【发布时间】:2019-05-21 18:14:30
【问题描述】:
我创建了一个简单的应用程序来推送和弹出我在变量中列出的随机小部件:
List<Widget> _widgets = [TextWidget(), ImageWidget(), ButtonWidget()];
在屏幕上我必须按如下方式进行按钮
- 1) 附加随机小部件
- 2) 上一个小部件
点击附加随机小部件后,我将其存储在
final List<int> _widgetStacks = [0];
应用程序可以很好地使用此功能来存储它们
void attachWidget(int index) {
print(_widgetStacks[index]);
_widgetStacks.add(index);
setState(() {
_currentWidget = index;
});
}
现在我想通过这个功能点击上一个小部件返回_widgetStacks:
getPreviousWidget() {
if (_widgetStacks.length - 1 > 0) {
attachWidget(_widgetStacks[_widgetStacks.length - 1]);
} else {
_widgetStacks.removeAt(_widgetStacks.length - 1);
Navigator.pop(context);
}
}
void getPrevWidget(int index) {
setState(() {
_currentWidget = index;
});
}
多次点击上一个小部件的此功能不起作用
我的实现代码:
void main() {
runApp(MaterialApp(
title: 'AndroidMonks',
home: Scaffold(
appBar: AppBar(
title: Text('Androidmonks'),
backgroundColor: Colors.orangeAccent,
),
body: Home(),
),
));
}
class Home extends StatefulWidget {
Home({
Key key,
}) : super(key: key);
@override
State<Home> createState() => _Home();
}
class _Home extends State<Home> {
String title = "Title";
int _currentWidget = 0;
final List<int> _widgetStacks = [0];
@override
Widget build(BuildContext context) {
attachWidget(_currentWidget);
List<Widget> _widgets = [TextWidget(), ImageWidget(), ButtonWidget()];
//TextWidget
return WillPopScope(
onWillPop: () {
getPreviousWidget();
},
child: Scaffold(
body: Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('Attach RANDOM widget'.toUpperCase()),
onPressed: () {
var rnd = Random();
_currentWidget = rnd.nextInt(3);
attachWidget(_currentWidget);
},
),
RaisedButton(
child: Text('PREVIOUS widget'.toUpperCase()),
onPressed: () {
getPreviousWidget();
},
),
],
),
Expanded(
child: _widgets[_currentWidget],
),
],
),
),
);
}
void attachWidget(int index) {
print(_widgetStacks[index]);
_widgetStacks.add(index);
setState(() {
_currentWidget = index;
});
}
void getPrevWidget(int index) {
setState(() {
_currentWidget = index;
});
}
getPreviousWidget() {
if (_widgetStacks.length - 1 > 0) {
attachWidget(_widgetStacks[_widgetStacks.length - 1]);
} else {
_widgetStacks.removeAt(_widgetStacks.length - 1);
Navigator.pop(context);
}
}
}
class ImageWidget extends StatefulWidget {
@override
State<ImageWidget> createState() => _ImageWidget();
}
class _ImageWidget extends State<ImageWidget> {
@override
Widget build(BuildContext context) {
return Center(
child: Text("ImageWidget"),
);
}
}
class TextWidget extends StatefulWidget {
@override
State<TextWidget> createState() => _TextWidget();
}
class _TextWidget extends State<TextWidget> {
@override
Widget build(BuildContext context) {
return Center(
child: Text("TextWidget"),
);
}
}
class ButtonWidget extends StatefulWidget {
@override
State<ButtonWidget> createState() => _ButtonWidget();
}
class _ButtonWidget extends State<ButtonWidget> {
@override
Widget build(BuildContext context) {
return Center(
child: Text("ButtonWidget"),
);
}
}
【问题讨论】: