我正在疯狂地尝试从列中的小部件内的4个文本字段中获取4个值。
我是一位扑朔迷离的新手,在尝试这样做之前几乎没有接受过6个小时的培训。
我需要的是:一种使用我的应用程序来提取某人的输入的方法,该应用触摸flatbutton,进入“ AlertDialog”内部,输入“ form”,在4行中输入4个值(foto, artigo,quantidade,precototal),然后单击凸起按钮上的“加号”按钮。我需要有这4个值,但到目前为止,我只得到了空的4个广告位列表,或者只是“ [null,,,,,,]
提前!
我在整个项目上浪费了将近10个小时,所以希望有人能指出我正确的方向...
这是我的代码:
“ main.dart”
class _EcrainicialState extends State<Ecrainicial> {
final _formKey = GlobalKey<FormState>();
String fotografia, nomedoproduto;
int quantidade, precototal;
var listaactual = <List>[["agua.png","Agua","7","14"],["bacalhau.png","Bacalhau","2","42"],["frango.png", "Frango","3","18"],["maca.png","Maca","4"," 4"]];
TextEditingController controlofoto = TextEditingController();
TextEditingController controloartigo = TextEditingController();
TextEditingController controloquantidade = TextEditingController();
TextEditingController controloprecototal = TextEditingController();
String obterfotografia = "";
String obterartigo = "";
String obterquantidade = "";
String obterprecototal = "";
submicaofoto(String valor) {
setState(() => obterfotografia = valor);
return obterfotografia;
}
submicaoartigo(String valor) {
setState(() =>obterartigo = valor);
}
submicaoquantidade(String valor) {
setState(() => obterquantidade = valor);
}
submicaoprecototal(String valor) {
setState(() => obterprecototal = valor);
print(obterprecototal);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Lista de produtos")),
body: ListView(
shrinkWrap: true,
padding: const EdgeInsets.fromLTRB(2.0, 10.0, 2.0, 10.0),
children: <Widget>[
ProductBox (
fotografia: "agua.png",
nomedoproduto: "Agua",
quantidade: 7,
precototal: 14,
),
ProductBox(
fotografia: "bacalhau.png",
nomedoproduto: "Bacalhau",
quantidade: 2,
precototal: 42,
),
ProductBox(
fotografia: "frango.png",
nomedoproduto: "Frango",
quantidade: 3,
precototal: 18
),
ProductBox(
fotografia: "maca.png",
nomedoproduto: "Maca",
quantidade: 4,
precototal: 4,
),
],
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Form(
key: _formKey,
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: EdgeInsets.symmetric(horizontal: 25.0),
child: TextField(
decoration: new InputDecoration(
hintText: 'atum, acucar disponiveis'),
maxLength: 25,
inputFormatters: [WhitelistingTextInputFormatter(RegExp("[a-z.]"))],
controller: controlofoto,
onSubmitted: submicaofoto,
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 25.0),
child: TextField(
decoration: new InputDecoration(
hintText: 'atum, acucar disponiveis'),
maxLength: 25,
inputFormatters: [WhitelistingTextInputFormatter(RegExp("[a-z]"))],
controller: controloartigo,
onSubmitted: submicaoartigo,
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 25.0),
child: TextField(
decoration: new InputDecoration(
hintText: 'Indique a quantidade, apenas numero .'),
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
keyboardType: TextInputType.number,
maxLength: 2,
controller: controloquantidade,
onSubmitted: submicaoquantidade,
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 25.0),
child: TextField(
decoration: new InputDecoration(
hintText: 'Indique o preco total, apenas numero'),
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
keyboardType: TextInputType.number,
maxLength: 2,
controller: controloprecototal,
onSubmitted: submicaoquantidade,
),
),
new RaisedButton(
child: Icon(Icons.add),
onPressed: () {
print(submicaofoto);
Artigo.adicionarartigo(obterfotografia, obterartigo, obterquantidade, precototal, listaactual);
}
),
],
),
),
),
);
},
);
},
)
);
}
}
答案 0 :(得分:0)
U可以使用像这样的文本编辑控制器:
TextEditingController controlofoto = TextEditingController();
&像这样将其放在TextField窗口小部件中:
TextField(
decoration: InputDecoration(
hintText: 'atum, acucar disponiveis'),
maxLength: 25,
inputFormatters: [WhitelistingTextInputFormatter(RegExp("[a-z.]"))],
controller: controlofoto,
),
无需使用setstate,而onSubmitted
可以使用它来获取用户输入的文本
String someValue = controlofoto.text