我正在创建一个带有扑朔迷离的火力的项目。这是一个家庭自动化项目。在这个项目中,我有很多卡可以打开和关闭东西,目前,对于每个用户,我已经创建了3个主卡,它们是在注册时创建的。我现在想做的是,使用ADD按钮,将使用用户要设置为该卡片的信息创建另一张卡片。我可以设法在Firestore中创建信息,但是,用户无法选择其中的内容。这就是我现在要解决的问题。因此,当用户单击ADD按钮时,我正在创建一个AlertDialog,他可以输入自己的信息来创建新按钮。我试图做的是创建一个AlertDialog,但是我不知道为什么当我尝试为其设置更多TextField时(我将需要4个)它不起作用。并使用此AlertDialog创建了一个Future,该Future应该返回一个List,但似乎只能与String一起使用。这是对话框的代码:
Future<String> createAlertDialog(BuildContext context){
TextEditingController customController = TextEditingController();
return showDialog(context: context, builder: (context){
return AlertDialog(
title: Text('Text'),
content: TextField(
controller: customController,
),
actions: <Widget>[
MaterialButton(
elevation: 5.0,
child: Text("OK"),
onPressed: (){
Navigator.of(context).pop(customController.text.toString());
},
)
],
);
});
}
[当用户键入他的信息时,这就是我收集他键入内容的方式:
createAlertDialog(context).then((value){
print(value);
});
稍后,我会将此列表数据插入到Firestore中,这是一个示例:
Firestore.instance.collection('dadosusuarios').document(user.uid)
.collection('buttons').document('button'+ cardamount.toString()).setData({
'activelabel': ListFromAlert[0],
'icondata': ListFromAlert[1],
'inactivelabel': ListFromAlert[2],
'text': ListFromAlert[3]
});
[如果有一种方法可以创建一个我可以自定义的警报对话框,那么我可以设置更多的TextField并以不同的方式放置Stuff,请提出建议。 [Thks
您可以在Column
的content
中只包含一个AlertDialog
,其中包含多个TextField
和它们自己的TextEditingController
。
content: Column(
children: [
TextField(
controller: customController1,
),
TextField(
controller: customController2,
),
],
),
content
取任何类型的Widget
。这可以是具有多个列,行等的嵌套结构,并且可以具有填充或特定的高度或宽度。
此后,只需在调用pop
时创建值列表即可
onPressed: (){
final values = [
customController1.text.toString(),
customController2.text.toString(),
];
Navigator.of(context).pop(values);
},
关于此问题'package:flutter/src/widgets/navigator.dart': Failed assertion: line 3580 pos 12: '!_debugLocked': is not true.
您可能在导航器中引用了错误的context
。尝试将context
重命名为ctx
作为构建器的参数:
showDialog(context: context, builder: (ctx){
并将其用于导航器:
Navigator.of(ctx).pop(values);