如何从文本字段获取值

时间:2020-03-22 02:00:26

标签: flutter

我正在疯狂地尝试从列中的小部件内的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);

                            }
                        ),
                      ],
                    ),
                  ),
                  ),
                );
              },
            );
          },
        )
    );
  }
}

1 个答案:

答案 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