fix(app): Web 平台兼容性修复 + 字体资源 + API base URL
- 添加 Web/Windows 平台支持 (flutter create --platforms) - 下载字体资源 (NotoSansSC/Caveat Regular+Bold) - Isar 3.x Web 不兼容:添加 kIsWeb 守卫,Web 上跳过 Isar 初始化 - IsarJournalRepository: instance 返回 nullable,Web 上使用 RemoteJournalRepository - SyncEngine: persistPendingQueue/restorePendingQueue Web 安全 - SettingsBloc: 从 RepositoryProvider 改为 ListenableProvider - ApiClient base URL: 8080 → 3000 匹配后端端口 - Isar .g.dart: 64 位 ID 替换为 JS 安全范围值
This commit is contained in:
@@ -10,9 +10,11 @@
|
||||
// └─ BlocProvider<AuthBloc>
|
||||
// └─ MaterialApp.router
|
||||
|
||||
import 'package:flutter/foundation.dart' show kIsWeb;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:provider/provider.dart' show ListenableProvider;
|
||||
|
||||
import 'core/theme/app_theme.dart';
|
||||
import 'core/routing/app_router.dart';
|
||||
@@ -36,7 +38,10 @@ class NuanjiApp extends StatelessWidget {
|
||||
final apiClient = ApiClient();
|
||||
final authRepository = AuthRepository(apiClient: apiClient);
|
||||
// 离线优先:Isar 为主要本地仓库,Remote 供 SyncEngine 推送
|
||||
final journalRepository = IsarJournalRepository();
|
||||
// Web 平台:Isar 3.x 不支持 Web,直接使用远程仓库
|
||||
final journalRepository = kIsWeb
|
||||
? RemoteJournalRepository(api: apiClient)
|
||||
: IsarJournalRepository();
|
||||
final remoteJournalRepository = RemoteJournalRepository(api: apiClient);
|
||||
final syncEngine = SyncEngine(apiClient: apiClient);
|
||||
final classRepository = ClassRepository(api: apiClient);
|
||||
@@ -67,18 +72,22 @@ class NuanjiApp extends StatelessWidget {
|
||||
RepositoryProvider<RemoteJournalRepository>.value(value: remoteJournalRepository),
|
||||
RepositoryProvider<SyncEngine>.value(value: syncEngine),
|
||||
RepositoryProvider<ClassRepository>.value(value: classRepository),
|
||||
RepositoryProvider<SettingsBloc>.value(value: settingsBloc),
|
||||
],
|
||||
child: BlocProvider<AuthBloc>.value(
|
||||
value: authBloc,
|
||||
child: ListenableBuilder(
|
||||
listenable: settingsBloc,
|
||||
builder: (context, _) => _AppView(
|
||||
router: createAppRouter(authBloc),
|
||||
themeMode: settingsBloc.state.themeMode,
|
||||
child: ListenableProvider<SettingsBloc>.value(
|
||||
value: settingsBloc,
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
final settings = context.watch<SettingsBloc>();
|
||||
return BlocProvider<AuthBloc>.value(
|
||||
value: authBloc,
|
||||
child: _AppView(
|
||||
router: createAppRouter(authBloc),
|
||||
themeMode: settings.state.themeMode,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user