Flutter 3.38.4 适配修改总结
1. App Lifecycle 状态变化适配(主要修改)
位置 :lib/src/boost_flutter_binding.dart
- 重写
handleAppLifecycleStateChanged,适配官方引擎的 App Lifecycle 状态变化 - 使用
_appLifecycleStateLocked锁定机制,控制生命周期状态变更 - 通过
changeAppLifecycleState方法手动触发生命周期状态变更
22:39:lib/src/boost_flutter_binding.dart
@override
void handleAppLifecycleStateChanged(AppLifecycleState state) {
if (_appLifecycleStateLocked) {
return;
}
Logger.log('boost_flutter_binding: '
'handleAppLifecycleStateChanged ${state.toString()}');
super.handleAppLifecycleStateChanged(state);
}
void changeAppLifecycleState(AppLifecycleState state) {
if (SchedulerBinding.instance.lifecycleState == state) {
return;
}
_appLifecycleStateLocked = false;
handleAppLifecycleStateChanged(state);
_appLifecycleStateLocked = true;
}
位置 :lib/src/flutter_boost_app.dart
- 在
_addAppLifecycleStateEventListener中处理原生端发送的生命周期事件 - 根据容器数量决定 Flutter 的 resume 和 pause 状态
- 参考了 Flutter Engine PR #42418 的实现
122:141:lib/src/flutter_boost_app.dart
void _addAppLifecycleStateEventListener() {
_lifecycleStateListenerRemover = BoostChannel.instance
.addEventListener(_appLifecycleChangedKey, (key, arguments) {
// we just deal two situation,resume and pause
// and 1 is resumed
// and 4 is paused
// See https://github.com/flutter/engine/pull/42418 for more details.
final int? index = arguments["lifecycleState"];
if (index == AppLifecycleState.resumed.index) {
BoostFlutterBinding.instance!
.changeAppLifecycleState(AppLifecycleState.resumed);
} else if (index == AppLifecycleState.paused.index) {
BoostFlutterBinding.instance!
.changeAppLifecycleState(AppLifecycleState.paused);
}
return Future<dynamic>.value();
});
}
2. 使用 mixin 修饰符
位置 :lib/src/boost_flutter_binding.dart
- 将
BoostFlutterBinding改为mixin,避免破坏用户代码 - 这是 CHANGELOG 5.0.1 中提到的修改
10:10:lib/src/boost_flutter_binding.dart
mixin BoostFlutterBinding on WidgetsFlutterBinding {
3. Android 端命名空间修复
- 在 Android 端添加了命名空间配置(CHANGELOG 5.0.2 第 2 条)
核心适配原理
Flutter 3.38.4 中官方引擎的 App Lifecycle 状态管理机制发生变化。FlutterBoost 通过:
- 拦截并控制
handleAppLifecycleStateChanged的调用 - 根据原生容器数量决定 Flutter 应用的生命周期状态
- 使用锁定机制避免与官方引擎的生命周期管理冲突
这些修改确保了 FlutterBoost 在 Flutter 3.38.4 下的正常运行,同时保持了与原生应用生命周期的正确同步。