1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-23 05:19:22 +00:00
comunicmobile/lib/ui/widgets/settings/multi_choices_settings_tile.dart
2021-02-07 17:09:08 +01:00

47 lines
1.2 KiB
Dart

import 'package:comunic/ui/dialogs/multi_choices_dialog.dart';
import 'package:flutter/material.dart';
import 'package:settings_ui/settings_ui.dart';
/// Multiple choices settings tile
///
/// @author Pierre Hubert
class MultiChoicesSettingsTile<T> extends SettingsTile {
final String title;
final List<MultiChoiceEntry<T>> choices;
final T currentValue;
final Function(T) onChanged;
const MultiChoicesSettingsTile({
Key key,
@required this.title,
@required this.choices,
@required this.currentValue,
@required this.onChanged,
}) : assert(title != null),
assert(choices != null),
assert(currentValue != null),
assert(onChanged != null);
@override
Widget build(BuildContext context) {
return SettingsTile(
title: title,
subtitle: choices.firstWhere((f) => f.id == currentValue).title,
onPressed: (_) => _changeValue(context),
);
}
/// When the user request to change the current value
void _changeValue(BuildContext context) async {
final newChoice = await showMultiChoicesDialog(
context: context,
choices: choices,
defaultChoice: currentValue,
title: title,
);
if (newChoice == null) return;
onChanged(newChoice);
}
}