flutter_boost
flutter_boost copied to clipboard
3.0最新版本FlutterBoost,每次push一个页面,都会重新build栈内所有页面,问题得不到解决
Steps to Reproduce
路由表映射关系如下: static Map<String, FlutterBoostRouteFactory> routerMap = { FlutterRouteTable.A: (settings, uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { final params = getParamsFromSettings(settings); return buildPage(APage( params: params, )); }); }, FlutterRouteTable.B: (settings, uniqueId) { return CupertinoPageRoute( settings: settings, builder: () { final params = _getParamsFromSettings(settings); return buildPage(BPage( params: params, )); }); }, }
先打开Flutter A 页面,再打开Flutter B页面。routerMap中也会执行A的builder函数,相当于重新构造了一次APage,这是正常的吗?
Flutter Boost Version v3.0-null-safety-preview.15 Target Platform: Target OS version/browser: Devices:
Logs
add your crash log or something else.
看上去不太正常,你这个能给我们一个可以复现的例子吗
看上去不太正常,你这个能给我们一个可以复现的例子吗
感谢您的回复!使用的就是demo中的代码,稍加有所改动。 代码如下: ` void main() { ///添加全局生命周期监听类 PageVisibilityBinding.instance.addGlobalObserver(AppLifecycleObserver());
///这里的CustomFlutterBinding调用务必不可缺少,用于控制Boost状态的resume和pause CustomFlutterBinding(); runApp(MyApp()); }
///创建一个自定义的Binding,继承和with的关系如下,里面什么都不用写 class CustomFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {}
class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); }
class MyAppState extends State<MyApp> {
static Map<String, FlutterBoostRouteFactory> routerMap = {
'/': (settings, uniqueId) {
return PageRouteBuilder
};
Route
Widget appBuilder(Widget home) { return MaterialApp( home: home, debugShowCheckedModeBanner: true, ///必须加上builder参数,否则showDialog等会出问题 builder: (_, __) { return home; }, initialRoute: "/", ); } @override Widget build(BuildContext context) { return FlutterBoostApp( routeFactory, appBuilder: appBuilder, ); } } `
页面操作步骤为 mainPage 中打开 simplePage ,
routerMap中日志显示如下:
I/flutter (24797): build page -> simplePage I/flutter (24797): build page -> mainPage
然后在simplePage中打开 replacementPage,
routerMap中日志显示如下
I/flutter (24797): build page -> replacementPage I/flutter (24797): build page -> mainPage I/flutter (24797): build page -> simplePage
不明白哪里出了问题,希望得到答复!
附Flutter Doctor日志: [✓] Flutter (Channel unknown, 2.0.3, on macOS 11.2.3 20D91 darwin-x64, locale zh-Hans-CN) • Flutter version 2.0.3 at /Users/xulc/Library/flutter • Framework revision 4d7946a68d (8 个月前), 2021-03-18 17:24:33 -0700 • Engine revision 3459eb2436 • Dart version 2.12.2
[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0) • Android SDK at /Users/xulc/Library/Android/sdk • Platform android-31, build-tools 31.0.0 • ANDROID_HOME = /Users/xulc/Library/Android/sdk • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264) • All Android licenses accepted.
[!] Xcode - develop for iOS and macOS • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 12.2, Build version 12B45b ✗ CocoaPods not installed. CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side. Without CocoaPods, plugins will not work on iOS or macOS. For more info, see https://flutter.dev/platform-plugins To install see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.
[✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 4.2) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
[✓] Connected device (2 available) • SM G9730 (mobile) • R28M800NJ2X • android-arm64 • Android 11 (API 30) • Chrome (web) • chrome • web-javascript • Google Chrome 95.0.4638.69
我也遇到,在线急等解决
重现代码 git clone [email protected]:liuyicheng3/flutter_boost.git git checkout dev-v3.0-null-safety-preview.16-bug-replay
路径 ( open flutter page => popUntil demo => 点下面两个按钮进去然后回来 每次 都rebuild)
试了用原生的 Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) { return TransparentWidget(); }));
不会导致rebuild
试了用原生的 Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) { return TransparentWidget(); }));
不会导致rebuild
由于boost 内部采用 navigator 2.0 管理内部路由,而 navigator 2.0 flutter本来就有 rebuild问题,所以不是boost导致的,可以参考给官方提的isuess:https://github.com/flutter/flutter/issues/91657#event-5668851667。你现在使用原生的肯定是没问题的,它走的是 navigator 1.0 逻辑
相关提交:#flutter/pull/71689
目前可行的解决方案https://github.com/alibaba/flutter_boost/pull/1486
目前可行的解决方案#1486
感谢您的回复,但我试了下 貌似效果是一样的:)
目前可行的解决方案#1486
感谢您的回复,但我试了下 貌似效果是一样的:)
代码发出来看看
1486 那个问题解决了 栈内所有widget build函数,目前问题是,如果使用了 PageVisibilityBinding 则会导致上一个 页面的build函数,push时, 如果关闭 PageVisibilityBinding 这个,则不会再build
1486 那个问题解决了 栈内所有widget build函数,目前问题是,如果使用了 PageVisibilityBinding 则会导致上一个 页面的build函数,push时, 如果关闭 PageVisibilityBinding 这个,则不会再build
请问怎么解决的啊,我现在也是用PageRouteBuilder的方式打开弹窗,结果底下的页面会刷新。
试了用罂粟的 Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) { return TransparentWidget(); })); 不会导致重建
boost 内部采用 navigator 2.0 管理路径,而 navigator 2.0 flutter 本来就有问题,所以不是参考boost内部的,可以给官方的提问题:https ://github.com/flutter/flutter/issues/91657# event-5668851667。你现在使用的肯定是没有问题的,它走的是navigator 1.0逻辑
试了用罂粟的 Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext) { return TransparentWidget(); })); 不会导致重建
boost 采用 navigator 2.0 管理路径,而 navigator 2.0 flutter 本来的问题,所以不是参考boost有内部的问题,可以给官方的问题:https: //github.com/flutter/flutter/issues/91657#event-588851667 。你现在使用的肯定是没有问题的,它走的是navigator 1.0逻辑
您这个说法我验证过,并不是官方的navigator 2.0有问题,而是您这个样例本身代码有误。
试了用原生的 Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) { return TransparentWidget(); })); 不会导致rebuild
由于boost 内部采用 navigator 2.0 管理内部路由,而 navigator 2.0 flutter本来就有 rebuild问题,所以不是boost导致的,可以参考给官方提的isuess:https://github.com/flutter/flutter/issues/91657#event-5668851667。你现在使用原生的肯定是没问题的,它走的是 navigator 1.0 逻辑
Hello. How do you fix this issue? https://github.com/flutter/flutter/issues/91657 I implement navigation 2.0 and when I push, all pages is rebuild.