import 'package:flutter/material.dart'; import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; class RadioSettingsDialog extends StatefulWidget { final List> options; final T initialValue; final String? titleText; final String? descriptionText; final Widget? footer; final Widget? confirmButton; final Widget? cancelButton; const RadioSettingsDialog({ super.key, required this.options, required this.initialValue, this.titleText, this.confirmButton, this.cancelButton, this.descriptionText, this.footer, }); @override State> createState() => _RadioSettingsDialogState(); } class _RadioSettingsDialogState extends State> { late T _groupValue; @override void initState() { super.initState(); _groupValue = widget.initialValue; } @override Widget build(BuildContext context) { return AlertDialog( actions: [ widget.confirmButton ?? TextButton( onPressed: () => Navigator.pop(context), child: Text(S.of(context)!.cancel)), widget.confirmButton ?? TextButton( onPressed: () => Navigator.pop(context, _groupValue), child: Text(S.of(context)!.ok)), ], title: widget.titleText != null ? Text(widget.titleText!) : null, content: Column( mainAxisSize: MainAxisSize.min, children: [ if (widget.descriptionText != null) Text(widget.descriptionText!, style: Theme.of(context).textTheme.bodySmall), ...widget.options.map(_buildOptionListTile), if (widget.footer != null) widget.footer!, ], ), ); } Widget _buildOptionListTile(RadioOption option) => RadioListTile( groupValue: _groupValue, onChanged: (value) => setState(() => _groupValue = value!), value: option.value, title: Text(option.label), ); } class RadioOption { final T value; final String label; RadioOption({required this.value, required this.label}); }