import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/user.dart'; import '../settings/app_settings.dart'; class SettingProvider extends ChangeNotifier { resetSettings() async { SharedPreferences prefs = await SharedPreferences.getInstance(); user = null; _assetGroup = null; prefs.remove(ASettings.user); prefs.remove(ASettings.assetGroup); notifyListeners(); } // check if setting loaded or not bool isLoaded = false; // contain saved user data User user; Future setUser(User user) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString(ASettings.user, json.encode(user.toJson())); this.user = user; notifyListeners(); selectAssetGroup(user); } void selectAssetGroup(User user) { if (user.assetGroups.length == 1) { _assetGroup = user.assetGroups.first; } else { int fmIndex = user.assetGroups.indexWhere((element) => element.id == 1); if (fmIndex < 0) { _assetGroup = user.assetGroups.first; } else { _assetGroup = user.assetGroups[fmIndex]; } } setAssetGroup(_assetGroup); // ApiManager.instance.assetGroup = _assetGroup; } Future setAssetGroup(AssetGroup assetGroup) async { // SharedPreferences prefs = await SharedPreferences.getInstance(); // prefs.setString(ASettings.assetGroup, json.encode(assetGroup.toJson())); _assetGroup = assetGroup; ApiManager.instance.assetGroup = _assetGroup; notifyListeners(); } String _host; String get host => _host; Future setHost(String host) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString(ASettings.host, host); _host = host; notifyListeners(); } String _language; AssetGroup _assetGroup; String get language => _language; AssetGroup get assetGroup => _assetGroup; Future setLanguage(String currentLanguage) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString(ASettings.language, currentLanguage); _language = currentLanguage; notifyListeners(); } String _theme; String get theme => _theme; Future setDarkTheme(bool value) async { SharedPreferences prefs = await SharedPreferences.getInstance(); _theme = value ? "dark" : "light"; prefs.setString(ASettings.theme, _theme); notifyListeners(); } String _speechToText; String get speechToText => _speechToText; Future setSpeechToText(String currentLanguage) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString(ASettings.speechToText, currentLanguage); _speechToText = currentLanguage; notifyListeners(); } // call loadSharedPreferences when provider initialise SettingProvider() { loadSharedPreferences(); } // get app setting Future loadSharedPreferences() async { SharedPreferences prefs = await SharedPreferences.getInstance(); if (prefs.containsKey(ASettings.language)) { _language = prefs.getString(ASettings.language); } else { _language = 'en'; } if (prefs.containsKey(ASettings.theme)) { _theme = prefs.getString(ASettings.theme); } else { _theme = 'light'; } if (prefs.containsKey(ASettings.speechToText)) { _speechToText = prefs.getString(ASettings.speechToText); } else { _speechToText = 'ar'; } if (prefs.containsKey(ASettings.user)) { String userJson = prefs.getString(ASettings.user); user = User.fromJson(json.decode(userJson)); selectAssetGroup(user); } // if (prefs.containsKey(ASettings.assetGroup)) { // // String assetJson = prefs.getString(ASettings.assetGroup); // _assetGroup = AssetGroup.fromJson(json.decode(assetJson)); // } if (prefs.containsKey(ASettings.host)) { _host = prefs.getString(ASettings.host); } else { _host = URLs.host1; } isLoaded = true; notifyListeners(); } }