如何将项目添加到具有多个对象的列表中?

Posted

技术标签:

【中文标题】如何将项目添加到具有多个对象的列表中?【英文标题】:How to add items to a list with multiple objects? 【发布时间】:2021-09-23 15:42:31 【问题描述】:

我想创建一个体重日记,用户可以在其中将当天的体重添加到列表中。所以我创建了一个类和一个列表来节省一天的重量。

class WeightData 
  final DateTime date;
  final double weight;

  const WeightData(
    this.date,
    this.weight,
  );


List<WeightData> weights = [
  WeightData(date: DateTime.now(), weight: 56),
  WeightData(date: DateTime.now(), weight: 55.5),
];

我的第一个问题是,这样做是否正确?

我也希望用户可以动态添加新的权重,但我不知道怎么做。到目前为止,我的代码如下所示:

void newEntry() 
    showDialog(
        context: context,
        builder: (BuildContext context) 
          return AlertDialog(
            content: Form(
                key: _formKey,
                child: Column(
                  children: [
                    TextFormField(
                      keyboardType: TextInputType.number,
                      validator: (input) =>
                          input.trim().isEmpty ? 'Please enter Day' : null,
                    ),
                    TextFormField(
                      keyboardType: TextInputType.number,
                      validator: (input) =>
                      input.trim().isEmpty ? 'Please enter Weight' : null,
                    )
                  ],
                )),
          );
        );
  

因为要填写(天和体重)我不知道如何将这两个对象(这是正确的词吗?)添加到列表中。

【问题讨论】:

【参考方案1】:

Column 内添加ElevatedButton 并检查_formKey 是否经过验证,然后添加到列表中:

ElevatedButton(
  onPressed: () 
    if (_formKey.currentState!.validate()) 
      weights.add(WeightData(date: DateTime.now(), weight: weightController.value),) 
    
  ,  
  child: Text('Submit'),
 ),

TextFormField 中使用TextEditingController 获取值:

TextEditingController weightController= TextEditingController();

TextFormField(
  keyboardType: TextInputType.number,
  controller: weightController //here,
  validator: (input) =>
     input.trim().isEmpty ? 'Please enter Day' : null,
  ),

【讨论】:

当我输入一个重量并点击提交时没有任何反应,当我热重载时我得到了一个新的列表条目,但是我输入的是 'null' 而不是写的 在if case if (_formKey.currentState!.validate())前加一个print(weightController.value)看是否有值 我得到了这个输出:TextEditingValue(text: ┤25├, selection: TextSelection(baseOffset: -1, extentOffset: -1, affinity: TextAffinity.downstream, isDirectional: false), compose: TextRange(开始:-1,结束:-1)) value 更改为 textweightController.text 您的 WeightData 需要 double 所以,使用 double.parse(weightController.text) 转换文本

以上是关于如何将项目添加到具有多个对象的列表中?的主要内容,如果未能解决你的问题,请参考以下文章

将列表中具有零值的多个列添加到 Pandas 数据框中

如何将具有多个对象的状态数组作为参数传递给graphql突变?

如何从列表视图按钮单击将多个数据添加到数组列表?

当检查可以是字符串数组中的一个或多个项目时,如何将列表视图项目添加到数组中?

需要在列表中添加多个项目 - 决策表 - Drools

在循环中创建多个具有不同名称的对象以存储在数组列表中