- [dart]支持业务侧获取当前flutter页面是否是外部路由flutter页面
- [dart]新增demo验证extended_image插件的图片左右滑动切换、缩放等手势操作是否有效
- [ohos]对外提供接口用于业务侧判断当前flutterEntry是否处于topContainer
- Revert "支持ACB跳跃路由业务场景" Reason: 经讨论,认为夸克业务中的该场景可以直接在业务侧实现,不需要改动boost内部,为了尽量减少对boost内部逻辑的干扰,决定回滚该提交
- [ohos]简化实现'修复连续打开同一个弹窗再回退时页面卡死的问题'
- [ios]修复打开一个新的container时会执行多次surfaceUpdated的问题
- Revert "[ios]修复打开一个新的container时会执行多次surfaceUpdated的问题" Reason: 该修改存在bad case,需要换一种实现方式
- [ios]重新实现“修复打开一个新的container时会执行多次surfaceUpdated的问题”
- 更新README以及FAQ
- [ohos]修复日志无法序列化处理BigInt的问题
- 支持ACB跳跃路由业务场景
- [ohos]解决应用切换横屏时自动分屏的问题
- [ohos]解决dialog透明弹窗从全屏页面返回时重新执行进入动画的问题
- [ohos,dart]native侧取消业务自定义实现RouterOptions,优化页面返回传参接口易用性,修复native页面返回flutter页面时传参可能失败的问题
- [ohos]允许业务自己实现页面出栈逻辑
- [dart]优化PlatformView示例代码
- [dart]增加隐藏platformview的示例代码
- [dart]补充完善图片格式测试案例
- Revert: "[ohos,dart]native侧取消业务自定义实现RouterOptions,优化页面返回传参接口易用性..."
- [ohos]修复连续打开同一个弹窗再回退时页面卡死的问题
- [ohos,dart]优化页面返回传参接口易用性,修复native页面返回flutter页面时传参可能失败的问题
- [dart]添加
SystemChrome.setPreferredOrientations
测试案例 - [ohos]修复透明弹窗由于被其他全屏page遮盖导致弹窗再现时页面假死等一系列问题,补充和dialog相关场景example demo
- [ohos]解决FlutterBoostEntry中onPageHide的调用和onPageShow不对称问题
- [ohos]适配最新的PlatformView方案
- [ohos]解决横竖屏不生效的问题
- [ohos]解决因权限问题从系统剪贴板获取数据失败的问题
- [ohos]解决透明弹窗返回时底下flutter页面闪烁的问题
- [dart]添加HDR/HEIC/HEIF/TIFF/WBMP/WEBP等图片格式的测试案例
- [ohos]解决透明弹窗页面切后台或被Native页面覆盖后出现的假死问题
- [ohos]完全支持鸿蒙页面返回参数传递,包括全部四种情况(native返回native、Flutter返回native、native返回Flutter、Flutter返回Flutter)
- [ohos]添加前后台事件通知逻辑
- [ohos]让业务可以控制调试日志的输出
- [ohos]解决透明弹窗场景下前后台切换页面假死的问题
- [ohos]鸿蒙页面返回传参支持
- [ohos]修复Tab场景下log莫名报‘Missing params’的问题
- [ohos]重构ets层页面路由参数传递逻辑,支持native页面获取来自上一个native或flutter页面的业务参数
- [ohos]适配api12 & DevEco-5.0.3.300
- [ohos]问题已修复,统一使用回鸿蒙社区的git依赖
- 更新FlutterBoost版本说明
- 添加clipboard示例
- [ohos]更新FlutterBoost项目结构
- [ohos]接管FlutterView绑定引擎的时机,解决Tab场景显示异常的问题,避免冗余的attach/detach
- [ohos]解决从透明弹窗返回后页面假死的问题
- [ohos]修复image_pick插件示例
- [ohos]简化鸿蒙示例代码
- [ohos]非官方认可的联合插件,需要在pubspec中单独指定
- [ohos]修复WebView示例代码
- [ohos]使用Navigation,解决半透明弹窗不透底的问题
- [ohos]修复使用Navigation后页面后退异常的问题
- [ohos]代码重构,便于后续优化
- [ohos]默认显式使用surface模式
- 添加SafeArea测试案例
- [ohos]设置全屏窗口
- [ohos]修复透明弹窗透底异常的问题
- [ohos]添加PlatformView测试案例
- [ohos]更新插件的import方式
- [ohos]支持传入启动参数和dart入口参数
- [ohos]更新plugin注册逻辑(BREAKING CHANGE)
- [ohos]移除不必要的生命周期通知
- [ohos]修复getStackFromHost/saveStackToHost相关的message channel代码错误
- [ohos]example增加打开鸿蒙原生页面的逻辑
- [ohos]修复
hot restart
白屏的问题
- [ohos]解决页面切换闪烁问题
- [ohos]临时修复tab内容第一次显示异常的问题
- 适配鸿蒙
- 将AGP的版本从7.0.4降回3.3.0
- Revert: "修复快速内部路由切换导致页面卡死的问题"
- 向业务暴露更新SystemUIOverlays方法
- 完善SystemUiOverlayStyle Demo
- 创建新容器时,默认使用上个容器的SystemUiOverlayStyle来配置新容器的状态栏、导航栏
- 修复快速内部路由切换导致页面卡死的问题
- Uniform iOS code style.
- 更新提issue的模版
- fix: 修复6.0 AccessibilityBridge.release()' on a null object reference
- [ios] 解决pop传参不能返回的问题
- Improve codes in Android. (#1855)
- Improve codes (#1856)
- [Android] 解决横/竖屏切换后,后退时闪现页面被拉伸(或压缩)的问题 (#1857)
- Support passing through Dart entrypoint arguments (#1858)
- Revert: "[Android] 解决横/竖屏切换后,后退时闪现页面被拉伸(或压缩)的问题 (#1857)" (#1859)
- 增加自定义
appBuilder
示例 (#1827) - [Android] fix flutterfragment快速切换时,出现不渲染的bug (#1830)
- Fixes the compilation errors when running the example with Flutter 3.10.0 (#1838)
- 解决打开弹窗并关闭后再关闭页面时「返回参数」不能传递到上一个页面的问题 (#1846)
- 修复removeWithResult接口不能返回结果的问题 (#1850)
- Add license headers (#1851)
- 暴露接口,让业务可以开启Android端内部日志输出,便于调试问题 (#1853)
- [Android] 通过栈来记录活动的Activity,解决部分场景下topActivity可能为空的问题 (#1810)
- Add Test Cases for ImageCache. (#1822)
- Fix type conversion errors and add a prompt for unregistered routes. (#1823)
- 修复后退时前一个页面不必要的rebuild的问题 (#1824)
- Add hero animation demo. (#1756)
- [ios] Fixes the warning that the license file does not exist (#1759)
- 处理 pushReplacement 泛型转换错误 (#1758)
- 更新授权许可链接 (#1754)
- fix(FlutterTextureHooker):设置setSurfaceTexture异常问题 (#1774)
- 为半透明弹窗增加PlatformView场景 (#1799)
- 开放FlutterBoostAppState中的_containers (#1800)
- 修复部分push场景与该手势可能冲突导致触发了两次pop
- [Android] 解决FlutterBoostFragment切换时可能闪现上一个页面的问题 (#1807)
- [Android] Fixes HybridCompositon does not work (#1743)
- Add pigeon commands to script file. (#1744)
- [ios] Use a screen edge pan gesture to go back to the previous page of a non-container page. (#1751)
- [Android] 修复FlutterFragment可能会盖住NativeFragment的Bug (#1736)
- Update README_CN.md (#1731)
- [Android]fix popUntil not working (#1718)
- Add demo for afterimage test
- [Android] 与纯Flutter应用生命周期行为保持一致:应用切换到后台时,暂停帧调度,解决动画残影的问题。[注意] 应用「务必」确保前后台通知事件(onBackground/onForeground)的准确性(必要时通过dispatchBackForegroundEvent接口进行接管),否则可能出现页面假死现象;
- [Android]对子类开放didFragmentShow和didFragmentHide (#1726)
- 修复 onPostPush 和 onPostPush 类型强转失败 (#1707)
- [Android] 提前暴露混淆导致的异常,并给出明确指引
- 修复
addEventListener
函数中可能的类型转换错误
- 增加dual_screen测试案例
- [Android]恢复detachFromFlutterEngine重载逻辑,解决空指针崩溃问题
- 修复部分场景下运行时类型错误,例如hot restart
- 删除调试信息
- 支持Flutter 3.0
- 示例代码迁移至空安全
- [Android] 去掉不必要的兜底方案,解决Native页面返回值丢失的问题
- [Android] 增加计数器测试案例,验证页面刷新问题
- 支持空安全(基于Flutter2.5.x)
- [Android] 移除对AndroidX的依赖
- 修复flutter首页打开A页面,打开B页面返回到首页后内存泄露问题
- [bugfix] 1.解决异步导致的断言错误(#1583);2.修改测试案例,解决测试页面被拦截的问题
- [Android] 完善PlatformView测试案例: 1. 增加复杂的Native动画场景; 2. 支持intent打开测试页面,方便自动化测试;
- 增加简单的WebView测试场景
- 将拦截器内部实现修改为同步,避免时序相关问题
- [ios]增加platform view测试案例 (#1546)
- [Android] 在Fragment的使用场景中,onHiddenChanged/setUserVisibleHint可能比onCreateView先调用 (#1456)
- [featurePR]使FlutterBoost的FlutterBoostFragment#finishContainer方法在子类可以定制容器关闭逻辑 (#1565)
- fix(Android):FlutterBoost开启FlutterBoostFragment页面导致状态栏颜色异常 (#1570)
- 拦截器重构: (#1583)
- 重命名example_new为example_new_for_ios
Breaking Change
- 拦截器重构,具体见 alibaba#1583
- 修复hot restart导致的黑屏问题 (#1537)
- feat: Android抛出popRoute代理回调 (#1531)
- 将运行时异常修改为日志输出 (#1541)
- BoostContainer增加backPressedHandler用于自定义返回键功能
- 支持通过FlutterEngineProvider创建引擎
- 优化example
- [Android]修复特定场景下activity泄漏的问题
- [Android] 修复FlutterEngine空指针异常 (#1471)
- [flutter] 提供带有缓存的widget组件 BoostCacheWidget,可以解决在push过程中导致页面rebuild的问题 (#1486)
- [iOS] 修改 podspec xcconfig 为 pod_target_xcconfig ,避免修改宿主工程编译配置 (#1507)
- [Android] 修复特定场景下activity泄漏的问题 (#1444)
- [Android] 修复Fragment特定使用场景下的崩溃问题 (#1450)
- popUntil使用containers列表不能保证顺序性,在同步popRoute过程会导致出现containers的乱序。需要通过提前clone队列进行保证 (#1462)
- [dart] 修复应用启动首次访问flutter页面白屏问题
- [ios]对外暴露flutter页面资源释放API(#1443)
- [Android] 从Native页面切换回FlutterFragment时,恢复Dart视角的system chrome style,解决沉浸式状态栏显示问题
- [ios] 修复应用置后台后,通过外链接起应用进入Flutter页面,applicationState还处于inActive状态,渲染错误的问题 (#1442)
- [flutter] 修复在引擎启动完毕但是flutter侧还没有加载完毕的时候进行操作的函数调用的时序问题 (#1415)
- [Android] 修复实现了onWillPop回调的Widget不能后退的问题 (#1411)
- [iOS] 将控制iOS手势的方法收口到BoostChannel作为通用方法,以及在container的show的监听中做手势的动态禁用和启用
- [flutter] 更新example以及默认的appBuilder实现,传入builder参数,避免showDialog无法关闭dialog而是关闭页面的操作
- [flutter] 修复路由在极端情况下顺序错误的问题
- [flutter] 让NavigatorExt接管pushNamed方法
- [flutter] 增加tab模式的example,删除iOS端无用的生命周期,避免初始化阶段进行push,造成初始化情况下tab白屏问题
- [iOS] 提前事件监听的注册时机,以及在删除的时候对block进行判空,避免crash
- [iOS] 提供引擎预热功能,避免第一次进入flutter页面短暂的白屏/黑屏,以及字体大小跳动的情况
- [iOS] 单VC,多flutterPage下,动态控制容器手势侧滑,内部有多page的时候,侧滑将走flutter内部侧滑逻辑,避免多page下侧滑直接带走整个容器的情况
- [dart] 更新example代码,表明如何在单容器内跳转拥有跳转动画(比如iOS的push效果)
- [Android] 解决切后台场景下Android Q生命周期回调异常导致透明弹窗背景不正确问题 (#1288)
- [Android] 增加引擎释放接口 (#1291)
- [Android] 解决特定场景下半透明弹窗背景黑/白屏、传参丢失、请求权限失败,以及image_picker插件不可用等问题
- [Android] 修复FlutterBoostActivity和FlutterBoostFragment接收不到请求权限结果的bug
- 解决 iOS dismissViewController completion 异步回调事件不完整的问题
- [Android] 适配页面透明参数,增加测试案例 (#1265)
- [Android] fix #1264 修复由于这条提交 #1250 导致FlutterboosrActivity 接收不到onActivityResult 回调结果 的bug
- [Android] 解决前一个页面destroy时导致当前页面的PlatformViewsChannel断开的问题 (#1250)
- Hfix #1229 修复example中从Flutter页面推后台再回前天,栈顶页面是Native的页面的问题
- 修复单引擎多VC下问题:1.updateViewportMetrics在键盘唤起时被多个VC调用 2.Tab初始化场景下导致的Crash
- 修复 FlutterBoostFragment跳转新的FlutterBoostFragment,返回上一个FlutterFragment后不响应点击事件
1.[iOS] 修复iOS打开Flutter页面再关闭不走dispose逻辑问题 2.[Android] 解决setSystemUIOverlayStyle不生效的问题 3.[Android] 默认开启状态恢复功能
- Native侧代码重构 a.uniqueId的创建方式与Dart侧保持一致 b.去掉ContainerShadowNode抽象代码 c.去掉Flutter容器创建时不必要的engineId参数
- open方法实现自定义配置参数,增强拓展性
- [双端一致性] Android端抽象出FlutterContainerManager的概念
- 原生 onActivityResult 回传参数到Flutter 重构
- 增加线程判断,确保 engine run 在主线程,可以让业务在子线程 setup boost
- [android] 修复Tab场景下多个Fragment使用了同一个FlutterView,以及解决Fragment第一次显示时不能正确切换surface的问题
- FlutterBoostFragment优化
- [android]当FlutterFragment的onCreateView回调时,暂不attache到引擎
- iOS侧透明能力提供
- 增加example3.0
- 修复FlutterFragment退出后,下面的容器页面出现假死问题
- 为了业务能更方便地从2.0升级到3.0,为remove接口提供argument可选参数
- 【dart,Android,iOS】均提供自定义事件发送机制,事件均可双向传递
- [Android] 允许业务复用提前创建的引擎
- FIXED:HeroController.didPush assert(navigator != null) 报空异常
- 确保onPageShow事件能够在页面创建的时候调用到
- PageVisibility不再提供create和destroy方法,另外onPageCreate和onPageDestroy改名为onPagePush和onPagePop
- FIXED:同一个容器提供多个FlutterView,业务层通过remove(uniqueId),指定id移除非首个flutterview会失效
- Boost接管handleAppLifecycleStateChanged,让Flutter生命周期与应用前后台对齐
- BoostNavigator添加pushReplacement方法,同时修复pop和findContainerById的逻辑
- 过滤内部路由RouteSettings.name为null的路由事件,如对话框路等非页面路由事件,否则影响正常页面生命周期
- [双端一致性] iOS端FBFlutterContainerManager与Android统一,FLutterBoostPlugin生命周期相关逻辑统一
- 调整 Flutter Engine 初始化流程,避免使用异步方式产生插件注册时序问题
- 支持通过原生Navigator关闭容器页面
- 重构内部路由Pop时的结果回传逻辑
- [Android] 修复特定场景下(例如,ViewPager2)onPageHide事件未触发的问题
Breaking Change 1.为了后续Delegate的可扩展性,增加一个FlutterBoostRouteOptions的概念用于封装参数,Delegate的push和pop的参数传递都依赖这个对象
具体见 https://github.com/alibaba/flutter_boost/commit/14a3be59f97cad24bdba8663a79f3d17359641df https://github.com/alibaba/flutter_boost/commit/c085258e09b79dc6c3660d384409c50e2497ef4b https://github.com/alibaba/flutter_boost/commit/ce48530ad7114703d3a8dfb02e4e32543c9aaa10 https://github.com/alibaba/flutter_boost/commit/47676230f21472c28791660ec93515f41d4f6c2f
-
BoostNavigator提供的pop接口改为异步 https://github.com/alibaba/flutter_boost/commit/d2d1fdc100dee34085b76d597194b93309e0cd0f
-
PageVisibility不再提供create和destroy方法,另外onPageCreate和onPageDestroy改名为onPagePush和onPagePop 原先写在onPageCreate和onPageDestroy的代码,写到initState和dispose中 https://github.com/alibaba/flutter_boost/commit/e2f15b234260ede810e943c4f8248fd07fce6414
-
Boost接管handleAppLifecycleStateChanged,让容器数量决定Flutter的resume和pause状态 请移步接入文档,看BoostFlutterBinding的使用方式 https://github.com/alibaba/flutter_boost/commit/173c910ff8ed971eacfa1a263745921ae5cd5689 https://github.com/alibaba/flutter_boost/commit/abc2598f48dbcbeabf48057eec6d7737b0e21989
- 修复透明页面背景是前一个Container的问题
- 重写BoostContainerWidget判等方法,避免框架层对已存在页面进行rebuild
- BoostContainer重构,修复容器内打开和关闭页面时界面不刷新问题
- 添加前台后台的回调接口
- 增加从原生open flutter页面时,open操作完成后的回调能力
Breaking Change: [iOS] 增加从原生open flutter页面时,open操作完成后的回调能力 : https://github.com/alibaba/flutter_boost/commit/7f55728955b0afcdbaba5a17543e9dbdf1c24e65 由于一些业务方需要知道页面动画是否完成,需要获取present的completion回调, 因此将
- (void) pushFlutterRoute:(NSString *) pageName uniqueId:(NSString *)uniqueId arguments:(NSDictionary *) arguments 改为
- (void) pushFlutterRoute:(NSString *) pageName uniqueId:(NSString *)uniqueId arguments:(NSDictionary *) arguments completion:(void(^)(BOOL)) completion;
- 提供flutter_boost.dart作为对外接口
- BoostNavigator相关API和实现的修改
- 解决_pendingResult可能没有完成的问题
- 新增前置拦截器能力
- 解决在push和pop的时候,页面栈所有页面重复build的问题
- 使用effective_dart包提供的linter规则文件
- 生命周期实现调整
- 解决Android端特定场景下生命周期事件重复的问题
- 添加自定义启动参数设置入口
- 新增页面回退传参能力
Breaking Change: page create and destroy event adjustment : https://github.com/alibaba/flutter_boost/commit/62c88805bf08606805e13254170691d2bc00bd4a 由于生命周期实现的改变,PageVisiblityObserver的onPageShow和onPageHide方法中,不再包含参数isForegroundEvent以及isBackgroundEvent
Fixed bugs
Supported Flutter sdk 1.12.13
Rename the version number and start supporting androidx by default, Based on the flutter 1.9.1 - hotfixs。 fixed bugs
Fixed bugs
Fixed bugs
android: Fixed bugs
iOS: no change
android: Fixed bugs
iOS: no change
A better implementation to support Flutter v1.9.1+hotfixes
Change the content android:
- based on the v1.9.1+hotfixes branch of flutter
- Solve major bugs, such as page parameter passing
- Support platformview
- Support androidx branch :feature/flutter_1.9_androidx_upgrade
- Resolve memory leaks
- Rewrite part of the code
- API changes
- Improved demo and added many demo cases
ios:
1.based on the v1.9.1+hotfixes branch of flutter 2.bugfixed
The main changes are as following:
- The new version do the page jump (URL route) based on the inherited FlutterViewController or Activity. The jump procedure will create new instance of FlutterView, while the old version just reuse the underlying FlutterView
- Avoiding keeping and reusing the FlutterView, there is no screenshot and complex attach&detach logical any more. As a result, memory is saved and black or white-screen issue occured in old version all are solved.
- This version also solved the app life cycle observation issue, we recommend you to use ContainerLifeCycle observer to listen the app enter background or foreground notification instead of WidgetBinding.
- We did some code refactoring, the main logic became more straightforward.
- TODO: Describe initial release.
From the point of API changes, we did some refactoring as following:
- FlutterBoostPlugin's startFlutterWithPlatform function change its parameter from FlutterViewController to Engine
Before change
FlutterBoostPlugin
- (void)startFlutterWithPlatform:(id<FLBPlatform>)platform onStart:(void (^)(FlutterViewController *))callback;
After change
FlutterBoostPlugin2
- (void)startFlutterWithPlatform:(id<FLB2Platform>)platform
onStart:(void (^)(id<FlutterBinaryMessenger,
FlutterTextureRegistry,
FlutterPluginRegistry> engine))callback;
- FLBPlatform protocol removed flutterCanPop、accessibilityEnable and added entryForDart Before change:
@protocol FLBPlatform <NSObject>
@optional
//Whether to enable accessibility support. Default value is Yes.
- (BOOL)accessibilityEnable;
// flutter模块是否还可以pop
- (void)flutterCanPop:(BOOL)canpop;
@required
- (void)openPage:(NSString *)name
params:(NSDictionary *)params
animated:(BOOL)animated
completion:(void (^)(BOOL finished))completion;
- (void)closePage:(NSString *)uid
animated:(BOOL)animated
params:(NSDictionary *)params
completion:(void (^)(BOOL finished))completion;
@end
After change:
@protocol FLB2Platform <NSObject>
@optional
- (NSString *)entryForDart;
@required
- (void)open:(NSString *)url
urlParams:(NSDictionary *)urlParams
exts:(NSDictionary *)exts
completion:(void (^)(BOOL finished))completion;
- (void)close:(NSString *)uid
result:(NSDictionary *)result
exts:(NSDictionary *)exts
completion:(void (^)(BOOL finished))completion;
@end
Android mainly changed the IPlatform interface and its implementation. It removed following APIs:
Activity getMainActivity();
boolean startActivity(Context context,String url,int requestCode);
Map getSettings();
And added following APIs:
void registerPlugins(PluginRegistry registry) 方法
void openContainer(Context context,String url,Map<String,Object> urlParams,int requestCode,Map<String,Object> exts);
void closeContainer(IContainerRecord record, Map<String,Object> result, Map<String,Object> exts);
IFlutterEngineProvider engineProvider();
int whenEngineStart();