1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-12-26 12:58:51 +00:00
comunicmobile/lib/ui/routes/app_settings_route.dart

110 lines
2.7 KiB
Dart

import 'package:comunic/helpers/preferences_helper.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart';
/// Application settings route
///
/// @author Pierre HUBERT
class AppSettingsRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(tr("App settings")),
),
body: _AppSettingsBody(),
);
}
}
class _AppSettingsBody extends StatefulWidget {
@override
__AppSettingsBodyState createState() => __AppSettingsBodyState();
}
class __AppSettingsBodyState extends State<_AppSettingsBody> {
PreferencesHelper _preferencesHelper;
@override
void initState() {
super.initState();
_load();
}
void _load() async {
final prefs = await PreferencesHelper.getInstance();
setState(() {
_preferencesHelper = prefs;
});
}
void _needRefresh() {
setState(() {});
}
@override
Widget build(BuildContext context) {
if (_preferencesHelper == null)
return Center(child: CircularProgressIndicator());
return Padding(
padding: const EdgeInsets.all(8.0),
child: ListView(
children: <Widget>[
// Dark theme
_CheckBoxPreference(
preferenceKey: PreferencesKeyList.ENABLE_DARK_THEME,
preferencesHelper: _preferencesHelper,
onUpdate: _needRefresh,
title: tr("Enable dark theme"),
description:
tr("You will need to restart the application to apply changes"),
),
ListTile(
title: Text(tr("About Comunic")),
onTap: () => showAboutAppDialog(context),
),
],
),
);
}
}
class _CheckBoxPreference extends StatelessWidget {
final PreferencesKeyList preferenceKey;
final PreferencesHelper preferencesHelper;
final VoidCallback onUpdate;
final String title;
final String description;
const _CheckBoxPreference({
Key key,
@required this.preferenceKey,
@required this.preferencesHelper,
@required this.onUpdate,
@required this.title,
@required this.description,
}) : assert(preferencesHelper != null),
assert(preferencesHelper != null),
assert(onUpdate != null),
assert(title != null),
assert(description != null),
super(key: key);
@override
Widget build(BuildContext context) {
return SwitchListTile(
value: preferencesHelper.getBool(preferenceKey),
onChanged: (b) async {
await preferencesHelper.setBool(preferenceKey, b);
onUpdate();
return true;
},
title: Text(title),
subtitle: Text(description),
);
}
}