【发布时间】:2018-09-17 08:31:06
【问题描述】:
我昨天发现了颤振并尝试了一些,但我有一个问题。我按照教程实现了导航抽屉(this one),抽屉打开得很好,所有按钮都更改了它们应该更改的内容,但调用 Navigator.pop(context) 或 Navigator.of(context).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()
);
}
}
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)
)
);
}
}
home_fragment.dart:
import 'package:flutter/material.dart';
class HomeFragment extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Center(
child: new Text(
'moin'
)
);
}
}
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('')
)
],
)
);
}
}
【问题讨论】: