我希望应用程序栏保持在应用程序顶部,而在更改选项卡时不更改或不显示动画,因此我将代码设置为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”的生成器。
如果有人可以帮助我克服这个问题,将不胜感激。
答案 0 :(得分:0)
Navigator.pushNamed(context, 'tabs/second');
可能是错误的上下文
将GlobalKey
传递给MaterialApp.navigatorKey
https://docs.flutter.io/flutter/material/MaterialApp/navigatorKey.html,并在调用导航方法时使用此键获取Navigator
的上下文。