From de941c841cd3ef13ce2f10aaf1957c715e7db1d4 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Mon, 19 Oct 2026 22:43:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(app):=20=E5=AF=B9=E9=BD=90=20release=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=88=E6=92=AD=E6=94=BE=E6=98=8E=E6=96=87?= =?UTF-8?q?HTTP=E3=80=81shared=5Fpreferences=20=E9=99=8D=E7=BA=A7=E9=98=B2?= =?UTF-8?q?=E5=B4=A9=E6=BA=83=E3=80=81=E5=8F=8C=E7=BD=91=E7=BB=9C=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 3 +- lib/core/config/app_config.dart | 28 ++++++++ lib/core/config/server_endpoint.dart | 12 ++-- .../data/services/auth_session_store.dart | 8 +-- lib/main.dart | 2 + pubspec.lock | 70 ++++++------------- pubspec.yaml | 28 +------- 7 files changed, 67 insertions(+), 84 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 91bbba2..2571b16 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -5,7 +5,8 @@ + android:icon="@mipmap/ic_launcher" + android:usesCleartextTraffic="true"> probeAndApplyBaseUrl() async { + try { + final client = HttpClient() + ..connectionTimeout = const Duration(seconds: 2); + final request = await client.getUrl( + Uri.parse('$lanBaseUrl/app/categories'), + ); + final response = await request.close().timeout(const Duration(seconds: 2)); + await response.drain(); + client.close(force: true); + if (response.statusCode == 200) { + applyRuntimeBaseUrl(lanBaseUrl); + return; + } + } catch (_) { + // 内网不可达,回落到公网。 + } + applyRuntimeBaseUrl( + compiledBaseUrl.isNotEmpty ? compiledBaseUrl : defaultBaseUrl, + ); + } + /// 后端返回的是相对路径(/files/...),这里补上服务地址。 static String mediaUrl(String path) { if (path.isEmpty) return ''; diff --git a/lib/core/config/server_endpoint.dart b/lib/core/config/server_endpoint.dart index 332eb6b..37355fc 100644 --- a/lib/core/config/server_endpoint.dart +++ b/lib/core/config/server_endpoint.dart @@ -39,11 +39,11 @@ abstract final class ServerEndpoint { /// In release builds this returns immediately without reading preferences. static Future load({ bool debug = kDebugMode, - SharedPreferencesAsync? preferences, + SharedPreferences? preferences, }) async { if (!debug) return; try { - final prefs = preferences ?? SharedPreferencesAsync(); + final prefs = preferences ?? await SharedPreferences.getInstance(); final stored = await prefs.getString(preferenceKey); AppConfig.applyRuntimeBaseUrl( resolve( @@ -60,12 +60,12 @@ abstract final class ServerEndpoint { /// Persists a normalized runtime endpoint. static Future save( String raw, { - SharedPreferencesAsync? preferences, + SharedPreferences? preferences, }) async { final normalized = normalize(raw); if (normalized == null) return false; try { - await (preferences ?? SharedPreferencesAsync()).setString( + await (preferences ?? await SharedPreferences.getInstance()).setString( preferenceKey, normalized, ); @@ -76,9 +76,9 @@ abstract final class ServerEndpoint { } /// Removes the persisted runtime endpoint. - static Future clear({SharedPreferencesAsync? preferences}) async { + static Future clear({SharedPreferences? preferences}) async { try { - await (preferences ?? SharedPreferencesAsync()).remove(preferenceKey); + await (preferences ?? await SharedPreferences.getInstance()).remove(preferenceKey); } catch (_) { // Clearing an optional developer override is best effort. } diff --git a/lib/core/data/services/auth_session_store.dart b/lib/core/data/services/auth_session_store.dart index 1586759..e03cc6b 100644 --- a/lib/core/data/services/auth_session_store.dart +++ b/lib/core/data/services/auth_session_store.dart @@ -23,7 +23,7 @@ class AuthSessionStore { Future deviceId() async { if (_cachedDeviceId != null) return _cachedDeviceId!; - final prefs = SharedPreferencesAsync(); + final prefs = await SharedPreferences.getInstance(); var value = await prefs.getString(_kDeviceId) ?? ''; if (value.isEmpty) { final random = Random(); @@ -37,7 +37,7 @@ class AuthSessionStore { } Future read() async { - final prefs = SharedPreferencesAsync(); + final prefs = await SharedPreferences.getInstance(); final accessToken = await prefs.getString(_kAccessToken) ?? ''; final refreshToken = await prefs.getString(_kRefreshToken) ?? ''; if (accessToken.isEmpty || refreshToken.isEmpty) return null; @@ -58,14 +58,14 @@ class AuthSessionStore { } Future save(AuthSession session) async { - final prefs = SharedPreferencesAsync(); + final prefs = await SharedPreferences.getInstance(); await prefs.setString(_kAccessToken, session.accessToken); await prefs.setString(_kRefreshToken, session.refreshToken); await prefs.setString(_kUser, jsonEncode(session.user.toJson())); } Future clear() async { - final prefs = SharedPreferencesAsync(); + final prefs = await SharedPreferences.getInstance(); await prefs.remove(_kAccessToken); await prefs.remove(_kRefreshToken); await prefs.remove(_kUser); diff --git a/lib/main.dart b/lib/main.dart index cfc68ce..bb45154 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'app.dart'; +import 'core/config/app_config.dart'; import 'core/config/server_endpoint.dart'; Future main() async { @@ -12,5 +13,6 @@ Future main() async { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]), ServerEndpoint.load(), ]); + await AppConfig.probeAndApplyBaseUrl(); runApp(const LumaDramaApp()); } diff --git a/pubspec.lock b/pubspec.lock index 2db1ec3..7dc0e15 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: clock - sha256: e51d50bca3217c9a9fa2b41a30e4a38971133f5f9ec7a3d57bae095007f1d28e + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.3" + version: "1.1.2" collection: dependency: transitive description: @@ -208,26 +208,10 @@ packages: dependency: transitive description: name: intl - sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.flutter-io.cn" source: hosted - version: "0.20.3" - jni: - dependency: transitive - description: - name: jni - sha256: "6b9ca0602fef0230e83149afbe3f9f8227e94f2bbe84a1da4f14d699742f402d" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.0" - jni_util: - dependency: transitive - description: - name: jni_util - sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.0.0" + version: "0.20.2" json_annotation: dependency: transitive description: @@ -272,10 +256,10 @@ packages: dependency: transitive description: name: matcher - sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.flutter-io.cn" source: hosted - version: "0.12.20" + version: "0.12.19" material_color_utilities: dependency: transitive description: @@ -288,10 +272,10 @@ packages: dependency: transitive description: name: meta - sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" url: "https://pub.flutter-io.cn" source: hosted - version: "1.19.0" + version: "1.18.0" mime: dependency: transitive description: @@ -308,14 +292,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: ffcf4cf3d6c0b74ac43708d9f56625506e8a68aa935abe9d267a7330f320eb5d - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.0" path: dependency: transitive description: @@ -392,26 +368,26 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "1e85e0dccf5b4a016077fea7dfbb4a7cb39c759ac1596fcf60c06deadb7da91f" + sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82" url: "https://pub.flutter-io.cn" source: hosted - version: "2.5.6" + version: "2.3.3" shared_preferences_android: - dependency: transitive + dependency: "direct main" description: name: shared_preferences_android - sha256: b90caa27669d5f3ef9918d55343b44000f088ee9d4685ed822310848004c793e + sha256: "1e12aafe408aa50da80edfd679a2a6bf63ba7ab37c7fa98286da459a757b3399" url: "https://pub.flutter-io.cn" source: hosted - version: "2.5.0" + version: "2.4.28" shared_preferences_foundation: - dependency: "direct overridden" + dependency: transitive description: name: shared_preferences_foundation - sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f" + sha256: "2ec3934efa51e46117f23031cc141b8fc878e8525b94ec1ea4f7f586cf1b47ea" url: "https://pub.flutter-io.cn" source: hosted - version: "2.5.6" + version: "2.5.7" shared_preferences_linux: dependency: transitive description: @@ -421,7 +397,7 @@ packages: source: hosted version: "2.4.1" shared_preferences_platform_interface: - dependency: "direct dev" + dependency: transitive description: name: shared_preferences_platform_interface sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9" @@ -461,10 +437,10 @@ packages: dependency: transitive description: name: stack_trace - sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.flutter-io.cn" source: hosted - version: "1.12.2" + version: "1.12.1" stream_channel: dependency: transitive description: @@ -501,10 +477,10 @@ packages: dependency: transitive description: name: test_api - sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" url: "https://pub.flutter-io.cn" source: hosted - version: "0.7.12" + version: "0.7.11" typed_data: dependency: transitive description: @@ -517,10 +493,10 @@ packages: dependency: transitive description: name: vector_math - sha256: "92b9910f66ed1057fd4da7b040ae7c74cafacf885bdc81be496928d5049b032d" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.flutter-io.cn" source: hosted - version: "2.4.3" + version: "2.2.0" video_player: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index d184d02..092293d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -40,7 +40,8 @@ dependencies: dio: ^5.7.0 provider: ^6.1.5+1 video_player: ^2.14.0 - shared_preferences: ^2.5.5 + shared_preferences: 2.3.3 + shared_preferences_android: 2.4.28 flutter_localizations: sdk: flutter @@ -59,13 +60,8 @@ dev_dependencies: # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^6.0.0 - shared_preferences_platform_interface: ^2.4.2 flutter_launcher_icons: ^0.14.4 -# Xcode 16.2 / Swift 6.0.3 cannot parse the trailing comma in foundation 2.6.0. -dependency_overrides: - shared_preferences_foundation: 2.5.6 - # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -82,26 +78,6 @@ flutter: assets: - assets/icon/splash_mark.png - fonts: - - family: Outfit - fonts: - - asset: assets/fonts/Outfit-Regular.ttf - weight: 400 - - asset: assets/fonts/Outfit-SemiBold.ttf - weight: 600 - - asset: assets/fonts/Outfit-Bold.ttf - weight: 700 - - family: PlusJakartaSans - fonts: - - asset: assets/fonts/PlusJakartaSans-Regular.ttf - weight: 400 - - asset: assets/fonts/PlusJakartaSans-Medium.ttf - weight: 500 - - asset: assets/fonts/PlusJakartaSans-SemiBold.ttf - weight: 600 - - asset: assets/fonts/PlusJakartaSans-Bold.ttf - weight: 700 - # To add assets to your application, add an assets section, like this: # assets: # - images/a_dot_burr.jpeg