Vox*_*vid 2 android dart flutter
昨天我发现扑了一下,虽然我有一个问题,但我已经尝试了一下.我已经按照教程实现了一个导航抽屉(这个),抽屉打开很好,所有和按钮改变他们应该改变的东西但是调用Navigator.pop(上下文)或Navigator.of(上下文).pop() (两者)表现得像这样:
在点击"人物"之前
点击"人物"后
我在网上搜索过,但找不到有同样问题的人:/这是我的代码:
main.dart:
import 'package:flutter/material.dart';
import 'package:dnd/home.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'DnD',
home: new Home()
);
}
}
Run Code Online (Sandbox Code Playgroud)
home.dart:
import 'package:flutter/material.dart';
import 'package:dnd/home_fragment.dart';
import 'package:dnd/char_fragment.dart';
class Home extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return new HomeState();
}
}
class HomeState extends State<Home> {
int selectedDrawerIndex = 0;
getDrawerItemWidget(int pos) {
switch(pos) {
case 0:
return new HomeFragment();
case 1:
return new CharFragment();
default:
return new Text('ERROR');
}
}
onSelectItem(int index) {
setState(() => selectedDrawerIndex = index);
print(Navigator.of(context).pop());
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'DnD',
home: new Scaffold(
appBar: new AppBar(
title: new Text(
'DnD'
)
),
drawer: new Drawer(
child: new Column(
children: <Widget>[
new UserAccountsDrawerHeader(
accountName: new Text(
'bla'
),
accountEmail: null,
),
new Column(
children: <Widget>[
new ListTile(
title: new Text(
'Home'
),
leading: new Icon(
Icons.home
),
selected: 0 == selectedDrawerIndex,
onTap: () => onSelectItem(0),
),
new ListTile(
title: new Text(
'Characters'
),
leading: new Icon(
Icons.person
),
selected: 1 == selectedDrawerIndex,
onTap: () => onSelectItem(1),
)
],
),
],
),
),
body: getDrawerItemWidget(selectedDrawerIndex)
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
home_fragment.dart:
import 'package:flutter/material.dart';
class HomeFragment extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Center(
child: new Text(
'moin'
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
char_fragment.dart:
import 'package:flutter/material.dart';
class CharFragment extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return new CharState();
}
}
class CharState extends State<CharFragment> {
characterNew() async {
await showDialog<bool>(
context: context,
child: new AlertDialog(
title: new Text('Create new Character?'),
actions: <Widget>[
new FlatButton(
child: new Text('Yes'),
onPressed: () => Navigator.of(context).pop(true)
),
new FlatButton(
child: new Text('No'),
onPressed: () => Navigator.of(context).pop(false)
)
],
)
);
}
@override
Widget build(BuildContext context) {
return new Center(
child: new GridView.count(
crossAxisCount: 3,
crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0,
children: <Widget>[
new RaisedButton.icon(
onPressed: characterNew,
icon: new Icon(Icons.add, size: 80.0,),
label: new Text('')
)
],
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码中有两个错误:
MaterialApp两次,您应该只有一个实例,MaterialApp因为它保存您的根配置.Navigator堆栈上推送任何路由,所以你试图pop从一个空列表(即,堆栈内没有任何东西被弹出).为了演示,你是Scaffold通过使用来控制身体的内容setState所以你正在切换Home和Charaters小部件之间他们真的看不到彼此(如果你选择Home小部件,你的Char小部件不是构建的,现在如果你选择你的Char小部件,你的Home小部件已经被它完全取代)
在 home.dart 构建覆盖中。尝试返回 Scaffold 而不是 Material 应用程序的另一个实例。您现在在材料应用程序的主体中返回一个材料应用程序。你应该只返回 Scaffold 那里。
| 归档时间: |
|
| 查看次数: |
4790 次 |
| 最近记录: |