使用不包含导航器的上下文请求的导航器操作
完整代码在这里
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
drawer: new Drawer(child: new ListView(
children: <Widget>[
new DrawerHeader(
decoration:BoxDecoration(
color: Colors.blue
),
child: new Container(
child: new Text("Hearer name"),
),),
new ListTile(
title: new Text("pop1"),
onTap: (){Navigator.pop(context);},
),
new ListTile(
title: new Text("pop2"),
onTap: (){Navigator.pop(context);},
),
new Container(
padding: const EdgeInsets.all(20.0),
child: new Text("asdsad"),
decoration: BoxDecoration(
color: Colors.grey
),
), new ListTile(
title: new Text("pop4"),
onTap: (){Navigator.pop(context);},
),
new Container(
padding: const EdgeInsets.all(20.0),
child: new Text("opt2"),
), new Container(
padding: const EdgeInsets.all(20.0),
child:
new Text("Asdsa"),
),
],
),),
appBar: new AppBar(
title: new Text("Hi , i am milla"),
),
body: new Center(
child: new ListView(
shrinkWrap: true,
padding: const EdgeInsets.all(20.0),
children: <Widget>[
new ProductItem("orange"),
],
)
),
),
);
}
完全错误代码
: ══╡ 用手势捕捉异常╞═══════════════════════════════════════════════════════════════════ I/颤振(3551):处理手势时抛出以下断言:I/颤振(3551):使用不包含导航器的上下文请求的导航器操作。I/flatter(3551):用于从导航器推送或弹出路由的上下文必须是作为I/flatter(3551):导航器小部件的后代的小部件的上下文。I/flatter(3551):I/flatter(3551):抛出异常时,这是堆栈:I/flatter(3551):#0
导航器。属于(软件包:flatter/src/widgets/navigator.dart:1179:9)I/flatter(3551):
3551):#3#。建筑(file:///project/flutter_app_2/lib/main.dart:31:38)I/颤振(3551):
3551):#7个手势识别器_检查(软件包:flift/src/signatures/tap.dart:161:9)I/flift(3551):#8
TapGestureRecognitor。接受手势(程序包:flatter/src/birts/tap.dart:123:7)I/flatter(3551):#9
手势管理器。扫掠(套装:颤振/src/signatures/arena.dart:156:27)I/颤振(3551):
(软件包:flutter/src/手势/binding.dart:64: 7)I/flutter(3551):
(软件包:flutter/src/手势/binding.dart:48: 7)I/flutter(3551):
识别器:I/flatter(3551):
点击手势识别器#a8d39(调试所有者:手势检测器,状态:就绪,赢得竞技场,最终位置:I/flatter(3551):偏移量(51.9239.7),发送点击下)I/flatter(3551):════════════════════════════════════════════════════════════════════════════════════════════════════ I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。I/Flatter(3551):引发了另一个异常:使用不包含导航器的上下文请求了导航器操作。D/EGL_仿真(3551):eglMakeCurrent:0xa84052a0:ver 2 0(tinfo 0xa84032d0)与设备的连接中断。
你似乎返回一个MaterialApp在你的小部件appState。这是行不通的。
MaterialApp基本上是你的应用程序的切入点,应该生活在main.dart
MaterialApp配置顶级导航器。
https://api.flutter.dev/flutter/material/MaterialApp-class.html
每个筛网应有自己的脚手架。Dart中不再需要新关键字
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: new Drawer(child: new ListView(
children: <Widget>[
new DrawerHeader(
decoration:BoxDecoration(
color: Colors.blue
),
child: new Container(
child: new Text("Hearer name"),
),),
new ListTile(
title: new Text("pop1"),
onTap: (){Navigator.pop(context);},
),
new ListTile(
title: new Text("pop2"),
onTap: (){Navigator.pop(context);},
),
new Container(
padding: const EdgeInsets.all(20.0),
child: new Text("asdsad"),
decoration: BoxDecoration(
color: Colors.grey
),
), new ListTile(
title: new Text("pop4"),
onTap: (){Navigator.pop(context);},
),
new Container(
padding: const EdgeInsets.all(20.0),
child: new Text("opt2"),
), new Container(
padding: const EdgeInsets.all(20.0),
child:
new Text("Asdsa"),
),
],
),),
appBar: new AppBar(
title: new Text("Hi , i am milla"),
),
body: new Center(
child: new ListView(
shrinkWrap: true,
padding: const EdgeInsets.all(20.0),
children: <Widget>[
new ProductItem("orange"),
],
)
),
),
);
}
快乐飘飘
我已经检查了你的代码,它可以很好地与这个虚拟代码在这里。。。
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
drawer: new Drawer(
child: new ListView(
children: <Widget>[
new DrawerHeader(
decoration: BoxDecoration(
color: Colors.blue
),
child:new Text("Hearer name"),
),
new ListTile(
title: new Text("pop1"),
onTap: () {
Navigator.pop(context);
},
),
new ListTile(
title: new Text("pop2"),
onTap: () {
Navigator.pop(context);
},
),
new Container(
padding: const EdgeInsets.all(20.0),
child: new Text("asdsad"),
decoration: BoxDecoration(
color: Colors.grey
),
), new ListTile(
title: new Text("pop4"),
onTap: () {
Navigator.pop(context);
},
),
new Container(
padding: const EdgeInsets.all(20.0),
child: new Text("opt2"),
), new Container(
padding: const EdgeInsets.all(20.0),
child:
new Text("Asdsa"),
),
],
),),
appBar: new AppBar(
title: new Text("Hi , i am milla"),
),
body: new Center(
child: new ListView(
shrinkWrap: true,
padding: const EdgeInsets.all(20.0),
children: <Widget>[
],
)
),
);
}
}
我想这个代码可能对你有帮助。
在抽屉屏幕:
drawer: new Drawer(
child: new Column(
children: <Widget>[
new DrawerHeader(
child: new Container(
child: new Text("Hearer name"),
),
),
new Flexible(
child: new ListView.builder(
itemCount: 1,
itemBuilder: (BuildContext context, int index) {
return new ListTile(
title: new Text("Tap $index"),
onTap: () => Navigator.of(context).pop(),
);
},
),
)
],
),
),
我是新手。我正在努力实现这个用户界面 我还没有找到任何使用完整的解决方案来创建颤振中的透明底部导航栏。 我试过用 但这似乎行不通。请帮忙。
我目前正在构建一个Flutter应用程序,我正在努力找出实现导航的最佳方式。 null 因此,行为是正确的,因为单击按钮后,ProfilePage会移到主页上。 我的问题是,图形上的appbar应该保持不变,但当个人资料页面被推送时,动画清楚地表明它不是同一个appbar。 > 是否可以动画配置文件页面的条目,而不动画AppBar的重建? 当第二个路由建立在第一个路由之上时,一个新的Appbar建
Xcode的输出:在文件中包含从 /Users/dani/development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.3/ios/Classes/FLTURLLauncherPlugin.m: 7: /Users/dani/development/flutter/.pub-cache/hosted/pub.dart
每当用户按下< code >底部导航栏中的一个按钮时,我都想关闭我的< code >抽屉小部件,但是我不太明白这一点。我现在设置BNB的方式是通过应用程序记住所有屏幕的当前状态(使用< code>IndexedStack),但我想在按下BNB按钮之前关闭任何屏幕中打开的抽屉。我的每个屏幕都有自己的抽屉和应用程序栏,所以我不能在BNB里面放一个抽屉(或者我可以,我可以用一个开关盒动态地改变它们,当一
我正在Linux Ubuntu上配置Flatter SDK 我在文件中为和指定了,但我在运行时收到此错误: