Compare commits

...

1 Commits
dev ... sorting

Author SHA1 Message Date
AlexisDanlos
4681c73959 display settings in settings 2024-11-15 17:25:52 +01:00
3 changed files with 162 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:dialer/features/settings/call/settingsCall.dart';
import 'package:dialer/features/settings/sim/settings_accounts.dart';
import 'package:dialer/features/settings/key/manage_keys_page.dart';
import 'package:dialer/features/settings/sorting/sorting.dart';
class SettingsPage extends StatelessWidget {
const SettingsPage({super.key});
@ -28,6 +29,12 @@ class SettingsPage extends StatelessWidget {
MaterialPageRoute(builder: (context) => const GestionDeClesPage()),
);
break;
case 'Sorting settings':
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SortingSettingsPage()),
);
break;
// Add more cases for other settings pages
default:
// Handle default or unknown settings
@ -41,6 +48,7 @@ class SettingsPage extends StatelessWidget {
'Calling settings',
'Page des comptes téléphoniques',
'Gestion de clés', // Add the new option here
'Sorting settings',
];
return Scaffold(

View File

@ -0,0 +1,153 @@
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
// store in shared preferences the sorting order of contacts
class SortingSettings {
static const _key = 'sorting_order';
static Future<void> setSortingOrder(SortingOrder order) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(_key, order.index);
}
static Future<SortingOrder> getSortingOrder() async {
final prefs = await SharedPreferences.getInstance();
final index = prefs.getInt(_key) ?? SortingOrder.ascending.index;
return SortingOrder.values[index];
}
static const _displayKey = 'contact_display';
static Future<void> setContactDisplay(ContactDisplay display) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(_displayKey, display.index);
}
static Future<ContactDisplay> getContactDisplay() async {
final prefs = await SharedPreferences.getInstance();
final index = prefs.getInt(_displayKey) ?? ContactDisplay.nameFirst.index;
return ContactDisplay.values[index];
}
}
enum SortingOrder { ascending, descending }
enum ContactDisplay { nameFirst, firstNameFirst }
class SortingSettingsPage extends StatefulWidget {
const SortingSettingsPage({Key? key}) : super(key: key);
@override
_SortingSettingsPageState createState() => _SortingSettingsPageState();
}
class _SortingSettingsPageState extends State<SortingSettingsPage> {
SortingOrder _sortingOrder = SortingOrder.ascending;
ContactDisplay _contactDisplay = ContactDisplay.nameFirst;
@override
void initState() {
super.initState();
_fetchSortingOrder();
}
Future<void> _fetchSortingOrder() async {
final order = await SortingSettings.getSortingOrder();
final display = await SortingSettings.getContactDisplay();
setState(() {
_sortingOrder = order;
_contactDisplay = display;
});
}
void _onOrderSelected(SortingOrder? order) {
setState(() {
_sortingOrder = order!;
});
}
void _onDisplaySelected(ContactDisplay? display) {
setState(() {
_contactDisplay = display!;
});
}
Future<void> _saveSortingOrder() async {
await SortingSettings.setSortingOrder(_sortingOrder);
await SortingSettings.setContactDisplay(_contactDisplay);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
title: const Text('Affichage'),
),
body: Column(
children: [
// subtitle for the sorting order
const ListTile(
title: Text(
'Ordre de tri',
style: TextStyle(color: Colors.white),
),
),
ListTile(
title: const Text('Croissant'),
leading: Radio<SortingOrder>(
value: SortingOrder.ascending,
groupValue: _sortingOrder,
onChanged: (SortingOrder? order) => _onOrderSelected(order),
),
),
ListTile(
title: const Text('Décroissant'),
leading: Radio<SortingOrder>(
value: SortingOrder.descending,
groupValue: _sortingOrder,
onChanged: (SortingOrder? order) => _onOrderSelected(order),
),
),
SizedBox(height: 16),
// subtitle for the contact display
const ListTile(
title: Text(
'Affichage des contacts',
style: TextStyle(color: Colors.white),
),
),
ListTile(
title: const Text('Exemple 1'),
leading: Radio<ContactDisplay>(
value: ContactDisplay.nameFirst,
groupValue: _contactDisplay,
onChanged: (ContactDisplay? display) => _onDisplaySelected(display),
),
),
ListTile(
title: const Text('Exemple 2'),
leading: Radio<ContactDisplay>(
value: ContactDisplay.firstNameFirst,
groupValue: _contactDisplay,
onChanged: (ContactDisplay? order) => _onDisplaySelected(order),
),
),
const Spacer(),
Padding(
padding: const EdgeInsets.all(16),
child: ElevatedButton(
// call _saveSortingOrder then go back to previous screen
onPressed: () {
_saveSortingOrder();
Navigator.of(context).pop();
},
child: const Text('Enregistrer'),
),
),
],
),
);
}
}

View File

@ -44,6 +44,7 @@ dependencies:
file_picker: ^5.2.5
asn1lib: ^1.0.0
intl_utils: ^2.0.7
shared_preferences: ^2.3.3
dev_dependencies:
flutter_test: