从抽屉路由到新的主体不起作用

时间:2019-01-27 14:36:41

标签: dart flutter

我希望应用程序栏保持在应用程序顶部,而在更改选项卡时不更改或不显示动画,因此我将代码设置为main.dart:

with open('video_'+str(n)+'.mp4', "wb") as video:

这是第三个标签,third.dart:

while buffer:                
    video.write(buffer)
    print("buffer {0}".format(i))
    i += 1
    buffer = connection.recv(1024) 

当我在Third.dart中触发import 'package:flutter/material.dart'; import 'package:stewart_inc_app/tabs/first.dart'; import 'package:stewart_inc_app/tabs/second.dart'; import 'package:stewart_inc_app/tabs/third.dart'; void main() { runApp(MaterialApp( home: Home(), )); } class Home extends StatefulWidget { @override HomeState createState() => HomeState(); } class HomeState extends State<Home> { Widget build(BuildContext context) { return new Scaffold( appBar: AppBar( title: new Text( "Hello World", ), ), body: Navigator( initialRoute: 'tabs/third', onGenerateRoute: (RouteSettings settings) { WidgetBuilder builder; switch (settings.name) { case 'tabs/first': builder = (BuildContext _) => FirstTab(); break; case 'tabs/second': builder = (BuildContext _) => SecondTab(); break; case 'tabs/third': builder = (BuildContext _) => ThirdTab(); break; default: throw Exception('Invalid route: ${settings.name}'); } return MaterialPageRoute(builder: builder, settings: settings); }), drawer: Drawer( child: ListView( padding: EdgeInsets.zero, children: <Widget>[ DrawerHeader( child: Text( 'Select Tab', style: TextStyle(color: Colors.white), ), decoration: BoxDecoration( color: Colors.black, ), ), ListTile( title: Text('First Tab'), onTap: () { Navigator.pushNamed(context, 'tabs/first'); }, ), ListTile( title: Text('Second Tab'), onTap: () { Navigator.pushNamed(context, 'tabs/second'); }, ), ListTile( title: Text('Third Tab'), onTap: () { Navigator.pushNamed(context, 'tabs/third'); }, ), ], ), ), ); } } 时,它可以正常工作并将页面更改动画化到第二个选项卡。但是,当我从main.dart抽屉中触发相同的代码时,出现以下错误:

  

flutter:在处理手势时引发了以下断言:   颤动:在_WidgetsAppState中找不到路由“ tabs / second”的生成器。

如果有人可以帮助我克服这个问题,将不胜感激。

1 个答案:

答案 0 :(得分:0)

Navigator.pushNamed(context, 'tabs/second');可能是错误的上下文

GlobalKey传递给MaterialApp.navigatorKey https://docs.flutter.io/flutter/material/MaterialApp/navigatorKey.html,并在调用导航方法时使用此键获取Navigator的上下文。