mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-10-31 02:04:52 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			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),
 | |
|     );
 | |
|   }
 | |
| }
 |