🐛 Bug fixes on config refactor

This commit is contained in:
2024-12-21 01:58:49 +08:00
parent 2671ffad4b
commit 65a8f1e6c3
8 changed files with 47 additions and 28 deletions

View File

@ -1,6 +1,13 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:surface/providers/widget.dart';
const kAtkStoreKey = 'nex_user_atk';
const kRtkStoreKey = 'nex_user_rtk';
const kNetworkServerDefault = 'https://api.sn.solsynth.dev';
const kNetworkServerStoreKey = 'app_server_url';
const Map<String, FilterQuality> kImageQualityLevel = {
'settingsImageQualityLowest': FilterQuality.none,
@ -12,6 +19,12 @@ const Map<String, FilterQuality> kImageQualityLevel = {
class ConfigProvider {
late final SharedPreferences prefs;
late final HomeWidgetProvider _home;
ConfigProvider(BuildContext context) {
_home = context.read<HomeWidgetProvider>();
}
Future<void> initialize() async {
prefs = await SharedPreferences.getInstance();
}
@ -19,4 +32,12 @@ class ConfigProvider {
FilterQuality get imageQuality {
return kImageQualityLevel.values.elementAtOrNull(prefs.getInt('app_image_quality') ?? 3) ?? FilterQuality.high;
}
String get serverUrl {
return prefs.getString(kNetworkServerStoreKey) ?? kNetworkServerDefault;
}
set serverUrl(String url) {
prefs.setString(kNetworkServerStoreKey, url);
_home.saveWidgetData("nex_server_url", url);
}
}

View File

@ -11,15 +11,10 @@ import 'package:package_info_plus/package_info_plus.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:surface/providers/config.dart';
import 'package:surface/providers/widget.dart';
import 'package:synchronized/synchronized.dart';
const kAtkStoreKey = 'nex_user_atk';
const kRtkStoreKey = 'nex_user_rtk';
const kNetworkServerDefault = 'https://api.sn.solsynth.dev';
const kNetworkServerStoreKey = 'app_server_url';
const kNetworkServerDirectory = [
('Solar Network', 'https://api.sn.solsynth.dev'),
('Local', 'http://localhost:8001'),
@ -29,6 +24,7 @@ class SnNetworkProvider {
late final Dio client;
late final SharedPreferences _prefs;
late final ConfigProvider _config;
late final HomeWidgetProvider _home;
String? _userAgent;
@ -66,11 +62,12 @@ class SnNetworkProvider {
),
);
SharedPreferences.getInstance().then((prefs) {
_prefs = prefs;
client.options.baseUrl = _prefs.getString(kNetworkServerStoreKey) ?? kNetworkServerDefault;
_config = context.read<ConfigProvider>();
_config.initialize().then((_) {
_prefs = _config.prefs;
client.options.baseUrl = _config.serverUrl;
if (!context.mounted) return;
_home.saveWidgetData("server_url", client.options.baseUrl);
_home.saveWidgetData("nex_server_url", client.options.baseUrl);
});
}
@ -197,7 +194,7 @@ class SnNetworkProvider {
}
void setBaseUrl(String url) {
_config.serverUrl = url;
client.options.baseUrl = url;
_home.saveWidgetData("server_url", client.options.baseUrl);
}
}

View File

@ -1,8 +1,10 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:path/path.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:surface/providers/config.dart';
import 'package:surface/providers/sn_network.dart';
import 'package:surface/providers/widget.dart';
import 'package:surface/types/account.dart';
@ -13,10 +15,12 @@ class UserProvider extends ChangeNotifier {
late final SnNetworkProvider _sn;
late final HomeWidgetProvider _home;
late final ConfigProvider _config;
UserProvider(BuildContext context) {
_sn = context.read<SnNetworkProvider>();
_home = context.read<HomeWidgetProvider>();
_config = context.read<ConfigProvider>();
}
Future<String?> get atk async {
@ -25,8 +29,7 @@ class UserProvider extends ChangeNotifier {
}
Future<void> initialize() async {
final prefs = await SharedPreferences.getInstance();
final value = prefs.getString(kAtkStoreKey);
final value = _config.prefs.getString(kAtkStoreKey);
isAuthorized = value != null;
notifyListeners();
refreshUser().then((value) {