【问题标题】: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,
                    )
                  ],
                )),
          );
        });
  }

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

【问题讨论】:

    标签: list flutter object dart


    【解决方案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) 转换文本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多