FlutterBoost适配Flutter3.38.4版本生成补丁包

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 通过:

  1. 拦截并控制 handleAppLifecycleStateChanged 的调用
  2. 根据原生容器数量决定 Flutter 应用的生命周期状态
  3. 使用锁定机制避免与官方引擎的生命周期管理冲突

这些修改确保了 FlutterBoost 在 Flutter 3.38.4 下的正常运行,同时保持了与原生应用生命周期的正确同步。

补丁包地址

FlutterBoost适配Flutter3.38.4版本补丁包

相关推荐
花燃柳卧12 小时前
跨平台路由组件工程源码补充上传
android·flutter·kotlin
心中有国也有家14 小时前
E-Brufen 技术选型全景:Flutter + 鸿蒙 + Hive CE
hive·hadoop·学习·flutter·华为·harmonyos
Mandy的名字被占用了16 小时前
Dart 与 Flutter 快速入门指南
后端·flutter·dart
心中有国也有家19 小时前
离线优先:无网络权限的鸿蒙 Flutter 应用设计
网络·学习·flutter·华为·harmonyos
心中有国也有家20 小时前
Flutter 鸿蒙编译与构建流程深度解析
学习·flutter·华为·harmonyos
心中有国也有家1 天前
使用 DevEco Studio 配置 Flutter 鸿蒙签名
学习·flutter·华为·harmonyos
nice先生的狂想曲1 天前
Stream与StreamController以及对应的使用场景
flutter·客户端
心中有国也有家1 天前
鸿蒙Flutter开发环境从零搭建教程(Windows/macOS双平台·避坑版)
学习·flutter·华为·harmonyos
心中有国也有家2 天前
Flutter 鸿蒙适配第一步:从 hive 迁移到 hive\_ce
hive·学习·flutter·华为·harmonyos
心中有国也有家2 天前
AtomGit Flutter 鸿蒙客户端:E-Brufen 架构设计
学习·flutter·华为·harmonyos