Flutter SimpleDialog中的项目
我创建了SimpleDialog和许多由数据列表生成的SimpleDialog选项,是否可以检测该SimpleDialog选项的索引?若并没有,我尝试在对话框中使用列表,但它只是显示一个空对话框,那个么如何使用对话框中的列表呢?我可以想出两种方法 1.映射和索引方法 2.具有简单的for循环 结果是: 守则:Flutter SimpleDialog中的项目,flutter,flutter-layout,Flutter,Flutter Layout,我创建了SimpleDialog和许多由数据列表生成的SimpleDialog选项,是否可以检测该SimpleDialog选项的索引?若并没有,我尝试在对话框中使用列表,但它只是显示一个空对话框,那个么如何使用对话框中的列表呢?我可以想出两种方法 1.映射和索引方法 2.具有简单的for循环 结果是: 守则: import 'dart:async'; import 'package:flutter/material.dart'; void main() => runApp(
import 'dart:async';
import 'package:flutter/material.dart';
void main() => runApp(
new MaterialApp(
home: new MyApp(),
),
);
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
int index = 0;
List<String> myList = new List();
@override
void initState() {
super.initState();
/*Adding elements to data list*/
for (int i = 0; i < 5; i++) myList.add("Title $i");
}
/*First Way*/
Future<Null> _showList1() async {
int selected = await showDialog<int>(
context: context,
builder: (BuildContext context) {
return new SimpleDialog(
title: const Text('Select'),
children: myList.map((value) {
return new SimpleDialogOption(
onPressed: () {
Navigator.pop(context, myList.indexOf(value));//here passing the index to be return on item selection
},
child: new Text(value),//item value
);
}).toList(),
);
});
setState(() {
index = selected;
});
}
/*Second Way*/
Future<Null> _showList2() async {
int selected = await showDialog<int>(
context: context,
builder: (BuildContext context) {
return new SimpleDialog(
title: const Text('Select'),
children: getOption(),
);
});
setState(() {
index = selected;
});
}
List<Widget> getOption() {
List<Widget> options = new List();
for (int i = 0; i < myList.length; i++)
options.add(new SimpleDialogOption(
onPressed: () {
Navigator.pop(context, i);//here passing the index to be return on item selection
},
child: new Text(myList[i]),//item value
));
return options;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("NonStopIO"),
),
body: new Center(
child: new Column(
children: <Widget>[
new Padding(
padding: const EdgeInsets.all(100.0),
),
new Text(
"Selected Index : $index",
style: new TextStyle(fontSize: 30.0),
),
new Padding(
padding: const EdgeInsets.all(18.0),
),
new Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
new RaisedButton(
onPressed: () async {
_showList1();
},
child: new Text("Show List [ First Way ] "),
),
new RaisedButton(
onPressed: () async {
_showList2();
},
child: new Text("Show List [ Second Way ] "),
)
],
),
],
),
),
);
}
}
导入'dart:async';
进口“包装:颤振/材料.省道”;
void main()=>runApp(
新材料聚丙烯(
主页:新建MyApp(),
),
);
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>new_MyAppState();
}
类MyAppState扩展了状态{
int指数=0;
List myList=新列表();
@凌驾
void initState(){
super.initState();
/*向数据列表添加元素*/
对于(inti=0;i<5;i++)myList.add(“Title$i”);
}
/*第一条路*/
Future\u showList1()异步{
int selected=等待显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回新的SimpleDialog(
标题:常量文本(“选择”),
子项:myList.map((值){
返回新的SimpleDialogOption(
已按下:(){
Navigator.pop(context,myList.indexOf(value));//这里传递要在项目选择时返回的索引
},
子项:新文本(值),//项值
);
}).toList(),
);
});
设置状态(){
索引=已选择;
});
}
/*第二条路*/
Future\u showList2()异步{
int selected=等待显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回新的SimpleDialog(
标题:常量文本(“选择”),
子项:getOption(),
);
});
设置状态(){
索引=已选择;
});
}
列表getOption(){
列表选项=新列表();
for(int i=0;i
请添加代码,演示您试图完成的任务、尝试的内容以及失败的地方。我印象深刻。这对于如此少量的代码来说是非常强大的。通过初始化定义为final的列表,可以进一步减少代码。如果TextEditingController正在使用数据,则不需要设置状态,因为可以将文本分配给TextEditingController(我认为)。它似乎对我有用。