From 59586cdadd94c24b026042b690215b8862cadf8b Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 5 May 2025 22:43:43 -0700 Subject: [PATCH] Preference migrate and init --- lib/main.dart | 5 +++- lib/preferences.dart | 68 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 lib/preferences.dart diff --git a/lib/main.dart b/lib/main.dart index 44a01d8..300c450 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,8 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'main_screen.dart'; +import 'preferences.dart'; -void main() { +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Preferences.init(); runApp(const MainApp()); } diff --git a/lib/preferences.dart b/lib/preferences.dart new file mode 100644 index 0000000..8d3271f --- /dev/null +++ b/lib/preferences.dart @@ -0,0 +1,68 @@ + +import 'dart:io'; +import 'dart:math'; + +import 'package:shared_preferences/shared_preferences.dart'; + +class Preferences { + static const String id = 'id'; + static const String url = 'url'; + static const String accuracy = 'accuracy'; + static const String interval = 'interval'; + static const String distance = 'distance'; + static const String buffer = 'buffer'; + + static Future init() async { + SharedPreferences preferences = await SharedPreferences.getInstance(); + if (Platform.isIOS) { + await _migrate(preferences); + } + await preferences.setString(id, preferences.getString(id) ?? (Random().nextInt(900000) + 100000).toString()); + await preferences.setString(url, preferences.getString(url) ?? 'http://demo.traccar.org:5055'); + await preferences.setString(accuracy, preferences.getString(accuracy) ?? 'medium'); + await preferences.setInt(interval, preferences.getInt(interval) ?? 300); + await preferences.setInt(distance, preferences.getInt(distance) ?? 0); + await preferences.setBool(buffer, preferences.getBool(buffer) ?? true); + } + + static Future _migrate(SharedPreferences preferences) async { + final oldId = preferences.getString('device_id_preference'); + if (oldId != null) { + preferences.setString(id, oldId); + preferences.remove('device_id_preference'); + } + final oldUrl = preferences.getString('server_url_preference'); + if (oldUrl != null) { + preferences.setString(url, oldUrl); + preferences.remove('server_url_preference'); + } + final oldAccuracy = preferences.getString('accuracy_preference'); + if (oldAccuracy != null) { + preferences.setString(accuracy, oldAccuracy); + preferences.remove('accuracy_preference'); + } + final oldIntervalString = preferences.getString('frequency_preference'); + final oldInterval = oldIntervalString != null ? int.tryParse(oldIntervalString) : null; + if (oldInterval != null) { + preferences.setInt(interval, oldInterval); + preferences.remove('frequency_preference'); + } + final oldDistanceString = preferences.getString('distance_preference'); + final oldDistance = oldDistanceString != null ? int.tryParse(oldDistanceString) : null; + if (oldDistance != null) { + preferences.setInt(distance, oldDistance); + preferences.remove('distance_preference'); + } + final oldAngleString = preferences.getString('angle_preference'); + final oldAngle = oldAngleString != null ? int.tryParse(oldAngleString) : null; + if (oldAngle != null) { + preferences.setInt('angle', oldAngle); + preferences.remove('angle_preference'); + } + final oldBuffer = preferences.getBool('buffer_preference'); + if (oldBuffer != null) { + preferences.setBool(buffer, oldBuffer); + preferences.remove('buffer_preference'); + } + } +}