大佬教程收集整理的这篇文章主要介绍了dart – InheritedWidget – 在navigator.push之后调用getter,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这样的顶级小部件
class App extends StatelessWidget{ build(context){ return MaterialApp( title: 'Iniciar Sesion',home: LoginBlocProvider(child: WelcomeScreen()),); } }
然后WelcomeScreen有一个导航到LoginScreen的按钮
class WelcomeScreen extends StatelessWidget { @override Widget build(BuildContext context){ return Scaffold( body: Center(child: MyButton) ); } } class MyButton extends StatelessWidget { @override Widget build(BuildContext context) { return RaisedButton( shape: StadiumBorder(),child: Text('Ingresar',style: TextStyle(color: Colors.black)),elevation: 5.0,onPressed: () { Navigator.of(context).push(MaterialPageRoute( builder: (BuildContext context) =>LoginScreen() )); } ); } }
最后在LoginScreen中我想访问InheritedWidget
class LoginScreen extends StatefulWidget { @override _LoginScreenState createState() => _LoginScreenState(); } class _LoginScreenState extends State<LoginScreen> { LoginBloc bloc; @override void didChangeDependencies() { bloc = LoginBlocProvider.of(context); super.didChangeDependencies(); } @override Widget build(BuildContext context){ return Scaffold( body: Stack( fit: StackFit.expand,children: <Widget>[ Positioned( top: 0.0,child: Image.asset('assets/images/img.jpg',fit: BoxFit.none,),_buildLogin(),],); } }
编辑:这是LoginBlocProvider
class LoginBlocProvider extends InheritedWidget { final bloc; LoginBlocProvider({Key key,Widget chilD}) : bloc = LoginBloc(),super(key:key,child:child); @override bool updateShouldNotify(InheritedWidget oldWidget) => true; static LoginBloc of(BuildContext context) { return (context.inheritFromWidgetOfExactType(LoginBlocProvider) as LoginBlocProvider).bloc; } }
但是,当我运行InheritedWidget的.of方法时,我得到了这个错误
I/Flutter (27725): The following NoSuchMethodError was thrown building Builder: I/Flutter (27725): The getter 'bloc' was called on null. I/Flutter (27725): Receiver: null I/Flutter (27725): Tried calling: bloc
我的印象是,这一切都与Navigator.push构建器方法中的上下文有关.
因为如果我使用不带Navigator.push的LoginScreen小部件,我可以完美地使用InheritedWidget
发生错误是因为传递给LoginBlocProvider.of()方法的上下文未找到实例.
有什么想法吗?
class App extends StatelessWidget { @override Widget build(context) { return LoginBlocProvider( child: MaterialApp( title: 'Iniciar Sesion',home: WelcomeScreen(),); } }
以上是大佬教程为你收集整理的dart – InheritedWidget – 在navigator.push之后调用getter全部内容,希望文章能够帮你解决dart – InheritedWidget – 在navigator.push之后调用getter所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。