You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.6 KiB
77 lines
2.6 KiB
import 'package:flutter/cupertino.dart'; |
|
import 'package:hooks_riverpod/hooks_riverpod.dart'; |
|
import 'package:info_tren/components/cupertino_listtile.dart'; |
|
import 'package:info_tren/models.dart'; |
|
import 'package:info_tren/pages/settings/setings_page.dart'; |
|
import 'package:info_tren/providers.dart'; |
|
|
|
class SettingsPageCupertino extends SettingsPageShared { |
|
const SettingsPageCupertino({super.key,}); |
|
|
|
Future<T?> singleChoice<T>({required BuildContext context, required List<T> choices, required String Function(T) labelBuilder, String? title}) async { |
|
return await showCupertinoModalPopup<T>( |
|
context: context, |
|
builder: (context) { |
|
return CupertinoActionSheet( |
|
title: title != null ? Text(title) : null, |
|
actions: choices.map((c) => CupertinoActionSheetAction( |
|
onPressed: () { |
|
Navigator.of(context).pop(c); |
|
}, |
|
child: Text(labelBuilder(c)), |
|
)).toList(), |
|
cancelButton: CupertinoActionSheetAction( |
|
child: const Text('Anulare'), |
|
onPressed: () { |
|
Navigator.of(context).pop(); |
|
}, |
|
), |
|
); |
|
}, |
|
); |
|
} |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return CupertinoPageScaffold( |
|
navigationBar: CupertinoNavigationBar( |
|
previousPageTitle: 'Info Tren', |
|
middle: Text(pageTitle), |
|
), |
|
child: Builder( |
|
builder: (context) { |
|
final mq = MediaQuery.of(context); |
|
return SingleChildScrollView( |
|
child: Column( |
|
children: [ |
|
SizedBox( |
|
height: mq.padding.top, |
|
), |
|
Consumer( |
|
builder: (context, ref, _) { |
|
final currentUiDesign = ref.watch(uiDesignProvider); |
|
return CupertinoListTile( |
|
title: Text(appearanceTitle), |
|
trailing: Text(currentUiDesign.userInterfaceName), |
|
onTap: () async { |
|
final choice = await singleChoice( |
|
context: context, |
|
choices: UiDesign.values, |
|
labelBuilder: (UiDesign ud) => ud.userInterfaceName, |
|
title: appearanceTitle, |
|
); |
|
if (choice != null) { |
|
ref.read(uiDesignProvider.notifier).set(choice); |
|
} |
|
}, |
|
); |
|
}, |
|
), |
|
], |
|
), |
|
); |
|
}, |
|
), |
|
); |
|
} |
|
}
|
|
|