如何解决为什么 Flutter Navigator 2.0 API 不适用于 flutter_bloc?
我正在尝试通过 BLoC (flutter_bloc 6.1.1) 提供页面来进行导航。
main.dart:
class MyApp extends StatelessWidget {
List<MaterialPage> _pages = [
MaterialPage( key: ValueKey('Page1'),child: Page1() ),];
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',theme: ThemeData(
primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),home: BlocProvider(
create: (BuildContext context) => NavCubit(),// WHY PAGES NOT UPDATES HERE FROM BLoC?????
child: BlocListener<NavCubit,NavState>(
listener: (context,state) {
_pages = state.pages;
},child: Navigator(
pages: _pages,onPopPage: (route,result) {
if ( !route.didPop(result) ) {
return false;
}
return true;
},)
)
),);
}
}
第一页(Page 1)有一个按钮,点击它应该导航到第二页(Page2)
class Page1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => NavCubit(),child: Scaffold(
appBar: AppBar( title: Text('Page 1') ),body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
Text("page 11111111111"),RaisedButton(
child: Text('Go to: Page 2',style: TextStyle(fontSize: 20)),onPressed: () {
print("goto page2 btn");
context.read<NavCubit>().navigateTo();
},],)
),);
}
}
class NavCubit extends Cubit<NavState> {
...
void navigateTo() {
final navState = NavState([MaterialPage( key: ValueKey('Page2'),child: Page2() )]);
debugPrint(navState.toString());
emit(navState);
}
}
但它没有发生!
据我所知,BLoC 状态更新良好。但是屏幕没有变化...
请参阅PLS:
这里是我的完整测试项目:https://github.com/morfair/flutter_test_app/tree/master/lib
解决方法
在 Page1 中,您正在 NavCubit
中创建另一个 BlocProvider
。因此,您总共有 2 个 NavCubit。因此,当您随后调用 context.read<NavCubit>.navigateTo()
时,您是在错误的 NavCubit 上调用此方法。尝试去掉Page1构建方法中BlocProvider中第二肘的创建。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。