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版本补丁包

相关推荐
tangweiguo030519872 小时前
Flutter Packages 设计与实践:构建可维护的模块化应用
flutter
小a杰.3 小时前
Flutter 的编译技术核心
flutter
hudawei9964 小时前
flutter setState(() { … }) 作用
flutter
ujainu小4 小时前
Flutter 结合 local_auth 3.0.0 实现跨平台本地生物识别认证
flutter·local_auth
ujainu小5 小时前
Flutter 本地存储权威指南:sqflite 2.4.2 全平台集成与实战
flutter·sqflite
ujainu小6 小时前
Flutter 生物认证权威指南:local_auth 3.0.0 全平台集成与实战
flutter·local_auth
hh.h.6 小时前
灰度发布与A/B测试:Flutter+鸿蒙的分布式全量发布方案
分布式·flutter·harmonyos
爱吃大芒果16 小时前
Flutter 主题与深色模式:全局样式统一与动态切换
开发语言·javascript·flutter·ecmascript·gitcode