fix: 修复手机连不上服务器时启动页无限转圈(B-58)

- 启动页先读本地凭证:无凭证(首次打开)直接进登录页,不再先等 SDK 初始化
- SDK init/login 加 20s 超时;init 用共享 Future 防止超时后重复触发 initSDK
- 登录页对 IM 登录超时给出明确提示(确认手机连着公司内网 WiFi)
- 修复 flutter create 模板遗留的 widget_test(引用不存在的 MyApp),改为登录页渲染冒烟测试
- 版本号 1.0.1+2
This commit is contained in:
KIMI
2026-08-15 14:54:52 +08:00
parent d481e1bc2f
commit 3b5c76cac4
5 changed files with 45 additions and 40 deletions
+18 -3
View File
@@ -75,9 +75,24 @@ class IMService extends ChangeNotifier {
int get platformID => Platform.isIOS ? IMPlatform.ios : IMPlatform.android;
/// App 启动时初始化 SDK(只做一次)
Future<void> init() async {
if (sdkReady) return;
/// App 启动时初始化 SDK(只做一次)
/// 用共享 Future 防止超时后重复触发 initSDK:第一次调用还在跑时,
/// 后续调用直接复用同一个 Future;失败了则允许下次重试。
Future<void>? _initFuture;
Future<void> init() {
if (sdkReady) return Future.value();
final inFlight = _initFuture;
if (inFlight != null) return inFlight;
final future = _doInit();
_initFuture = future;
return future.whenComplete(() {
// 失败的初始化允许重试;成功的保留 sdkReady 标记即可
if (!sdkReady && identical(_initFuture, future)) _initFuture = null;
});
}
Future<void> _doInit() async {
final dir = await getApplicationDocumentsDirectory();
final dataDir = '${dir.path}/openim';
await Directory(dataDir).create(recursive: true);