如何将项目添加到具有多个对象的列表中?
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 caseif (_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
更改为 text
。 weightController.text
您的 WeightData 需要 double
所以,使用 double.parse(weightController.text)
转换文本以上是关于如何将项目添加到具有多个对象的列表中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将具有多个对象的状态数组作为参数传递给graphql突变?