我如何在颤振中动态设置变量的数据?

Posted

技术标签:

【中文标题】我如何在颤振中动态设置变量的数据?【英文标题】:How i set data dynamically on variable in flutter? 【发布时间】:2020-05-06 20:32:20 【问题描述】:

我需要一些帮助。如何在颤动的变量上动态设置数据?我在 listview.builder 中有一个表单。动态生成的 TextFormField 数量。因此很难为每个 TextFormField 制作不同的变量。 当 TextFormField 中的用户名文本时,我想在 var 上设置该数据,以便我可以将该数据存储在 firebase 中。这是我的代码的简单版本:

Form(
                  key: _formKey,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Expanded(
                        child: ListView.builder(
                            itemCount: widget.stops,

                            itemBuilder: (context, index) 
                              var stops = 1;

                              return Row(
                                children: <Widget>[
                                  Flexible(
                                    child: Container(
                                      child: TextFormField(
                                        decoration: InputDecoration(
                                          labelText: 'Stop ' +
                                              (stops + index).toString(), 
                                        ),
                                        validator: (val) => val.isEmpty
                                            ? 'Cannot be empty'
                                            : null,
                                        onChanged: (val) 
                                          setState(() 
                                             //here i want setdata dynamically
                                         );
                                        ,
                                      ),
                                    ),
                                  ),
                                  Flexible(
                                    child: Container(     
                                      child: TextFormField(
                                        cursorColor: Color(0xFF127772),
                                        decoration: InputDecoration(
                                          labelText: 'Ticket Price',
                                            ),
                                          ),
                                        ),
                                        validator: (val) => val.isEmpty
                                            ? 'Cannot be empty'
                                            : null,
                                        onChanged: (val) 
                                          setState(() 
                                            //here i want setdata dynamically
                                          );
                                        ,
                                      ),
                                    ),
                                  )
                                ],
                              );
                            ),
                      ),
                      Container(                   
                        child: RaisedButton(
                          ),
                          onPressed: () async 
                            if (_formKey.currentState.validate()) 
                          ,                    
                          child: Text('CREATE'),
                        ),
                      ),
                    ],
                  ),
                ),

【问题讨论】:

【参考方案1】:

您可以创建两个字符串列表,因为您在项目中有两个 textField,并在 onsave 方法上将 val 分配给此列表。

以下代码可以帮助您更好地理解。

class DeleteWidget extends StatefulWidget 
  final stops = 2;
  @override
  _DeleteWidgetState createState() => _DeleteWidgetState();


class _DeleteWidgetState extends State<DeleteWidget> 
  List<String> _list1;
  List<String> _list2;
  GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  @override
  void initState() 
    super.initState();
    _list2 = List(widget.stops);
    _list1 = List(widget.stops);
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Form(
        key: _formKey,
        child: Column(
          children: [
            Expanded(
              child: ListView.builder(
                itemCount: widget.stops,
                itemBuilder: (_, index) 
                  return Row(
                    children: [
                      Flexible(
                        child: TextFormField(
                          validator: (val) =>
                              val.isEmpty ? 'Cannot be empty' : null,
                          onChanged: (val) 
                            setState(
                              () 
                                _list1[index] = val;
                              ,
                            );
                          ,
                        ),
                      ),
                      SizedBox(
                        width: 20,
                      ),
                      Flexible(
                        child: TextFormField(
                          validator: (val) =>
                              val.isEmpty ? 'Cannot be empty' : null,
                          onChanged: (val) 
                            setState(
                              () 
                                _list2[index] = val;
                              ,
                            );
                          ,
                        ),
                      )
                    ],
                  );
                ,
              ),
            ),
            Container(
              child: RaisedButton(
                onPressed: () async 
                  if (_formKey.currentState.validate()) 
                    _formKey.currentState.save();
                    for (int i = 0; i < widget.stops; i++) 
                      print("item $i form field 1 $_list1[i]");
                      print("item $i form field 2 $_list2[i]");
                    
                  
                ,
                child: Text('CREATE'),
              ),
            ),
          ],
        ),
      ),
    );
  

【讨论】:

以上是关于我如何在颤振中动态设置变量的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤振中从 FirebaseAuth 电话验证方法返回变量?

如何在颤振中以简单的方式从实时数据库中获取数据?

如何在 github 复合操作步骤中动态设置环境变量?

在颤振中,我们如何按百分比设置高度或宽度?

如何在变量打字稿中动态设置当前时间

如何使用 POST 方法在颤振中获得 json 响应?