2022-11-19 05:35:51 +01:00
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:hooks_riverpod/hooks_riverpod.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);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
|
|
|
},
|
|
|
|
),
|
2022-12-11 01:34:19 +01:00
|
|
|
Consumer(
|
|
|
|
builder: (context, ref, _) {
|
|
|
|
final currentTZ = ref.watch(uiTimeZoneProvider);
|
|
|
|
return CupertinoListTile(
|
|
|
|
title: Text(timeZoneTitle),
|
|
|
|
trailing: Text(currentTZ.type.userInterfaceName),
|
|
|
|
onTap: () async {
|
|
|
|
final choice = await singleChoice(
|
|
|
|
context: context,
|
|
|
|
choices: UiTimeZoneType.values.where((tz) => tz != UiTimeZoneType.iana).toList(),
|
|
|
|
labelBuilder: (UiTimeZoneType utzt) => utzt.userInterfaceName,
|
|
|
|
title: timeZoneTitle,
|
|
|
|
);
|
|
|
|
if (choice != null) {
|
|
|
|
ref.read(uiTimeZoneProvider.notifier).set(UiTimeZone.fromSerString('${choice.name}\n'));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
|
|
|
},
|
|
|
|
),
|
2022-11-19 05:35:51 +01:00
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
},
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|