- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个表单,其中包含四个用于用户输入数据的文本编辑字段和一个用于将数据保存到列表的按钮。
但是,当我将第二条记录添加到列表中时,第一条记录将自动更新,这是怎么回事。
IDE:VS代码
flutter SDK版本:1.12.13 + hotfix.8
操作系统:Windows 10
这是我的代码:
import 'package:flutter/material.dart';
class GridPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
List<TextEditingController> gControlers = [];
List<FocusNode> _fNodes = [];
List<Map> gridRecords = [];
_fNodes.addAll(new List<FocusNode>.generate(4, (_) => new FocusNode()));
gControlers.addAll(new List<TextEditingController>.generate(
4, (_) => new TextEditingController()));
final formKey = GlobalKey<FormState>();
List<Map> rowset = [
{"command": "X1", "columnID": "1", "value": ""},
{"command": "X2", "columnID": "2", "value": ""},
{"command": "X3", "columnID": "3", "value": ""},
{"command": "X4", "columnID": "4", "value": ""}
];
return Scaffold(
appBar: AppBar(
title: Text('Doc Detail'),
),
body: Center(
child: Form(
key: formKey,
child: Column(children: [
Expanded(
child: Container(
height: 100.0,
child: Column(children: [
Card(
elevation: 5.0,
child: ListTile(
title: TextFormField(
decoration: InputDecoration(
labelText: 'Item',
),
keyboardType: TextInputType.text,
autocorrect: false,
textInputAction: TextInputAction.next,
focusNode: _fNodes[0],
controller: gControlers[0],
autofocus: true,
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_fNodes[1]);
},
),
)
),
Card(
elevation: 5.0,
child: ListTile(
title: TextFormField(
decoration: InputDecoration(
labelText: 'Lot',
),
keyboardType: TextInputType.text,
autocorrect: false,
textInputAction: TextInputAction.next,
focusNode: _fNodes[1],
controller: gControlers[1],
autofocus: true,
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_fNodes[2]);
},
),
)
),
Card(
elevation: 5.0,
child: ListTile(
title: TextFormField(
decoration: InputDecoration(
labelText: 'Location',
),
textInputAction: TextInputAction.next,
focusNode: _fNodes[2],
controller: gControlers[2],
autofocus: true,
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_fNodes[3]);
},
),
)
),
Card(
elevation: 5.0,
child: ListTile(
title: TextFormField(
decoration: InputDecoration(
labelText: 'QTY',
),
keyboardType: TextInputType.number,
autocorrect: false,
textInputAction: TextInputAction.next,
focusNode: _fNodes[3],
controller: gControlers[3],
autofocus: true,
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_fNodes[0]);
},
),
)
),
]),
)
),
RaisedButton(
child: Text('New'),
onPressed: () {
int len = gridRecords.length;
var t1 = getTextToRecord(rowset, len ?? 0,gControlers);
gridRecords.add(t1);
FocusScope.of(context).requestFocus(_fNodes[0]);
}
)
])
)
)
);
}
Map getTextToRecord(List<Map> rowset, int length,List gControlers) {
int x = 0;
rowset.forEach((f) {
f["value"] = gControlers[x].text;
x = x+1;
});
Map _g1 = {};
_g1["line"] = length + 1;
_g1["valueMap"] = rowset;
return _g1;
}
}
最佳答案
请尝试以下代码并检查输出
class GridPage extends StatefulWidget {
@override
_GridPageState createState() => _GridPageState();
}
class _GridPageState extends State<GridPage> {
List<Map> gridRecords = [];
List<TextEditingController> gControlers = [];
List<FocusNode> _fNodes = [];
final formKey = GlobalKey<FormState>();
@override
void initState() {
super.initState();
_fNodes.addAll(new List<FocusNode>.generate(4, (_) => new FocusNode()));
gControlers.addAll(new List<TextEditingController>.generate(
4, (_) => new TextEditingController()));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Doc Detail'),
),
body: Center(
child: Form(
key: formKey,
child: Column(children: [
Flexible(
child: ListView(children: [
Card(
elevation: 5.0,
child: ListTile(
title: TextFormField(
decoration: InputDecoration(
labelText: 'Item',
),
keyboardType: TextInputType.text,
autocorrect: false,
textInputAction: TextInputAction.next,
focusNode: _fNodes[0],
controller: gControlers[0],
autofocus: true,
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_fNodes[1]);
},
),
)),
Card(
elevation: 5.0,
child: ListTile(
title: TextFormField(
decoration: InputDecoration(
labelText: 'Lot',
),
keyboardType: TextInputType.text,
autocorrect: false,
textInputAction: TextInputAction.next,
focusNode: _fNodes[1],
controller: gControlers[1],
autofocus: true,
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_fNodes[2]);
},
),
)),
Card(
elevation: 5.0,
child: ListTile(
title: TextFormField(
decoration: InputDecoration(
labelText: 'Location',
),
textInputAction: TextInputAction.next,
focusNode: _fNodes[2],
controller: gControlers[2],
autofocus: true,
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_fNodes[3]);
},
),
)),
Card(
elevation: 5.0,
child: ListTile(
title: TextFormField(
decoration: InputDecoration(
labelText: 'QTY',
),
keyboardType: TextInputType.number,
autocorrect: false,
textInputAction: TextInputAction.next,
focusNode: _fNodes[3],
controller: gControlers[3],
autofocus: true,
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_fNodes[0]);
},
),
)),
])),
RaisedButton(
child: Text('New'),
onPressed: () {
for (int i = 0; i < 4; i++) {
Map _g1 = Map();
_g1["line"] = i + 1;
_g1["valueMap"] = {
"command": 'X' + (i + 1).toString(),
"columnID": i + 1,
"value": gControlers[i].text
};
gridRecords.add(_g1);
gControlers[i].clear();
}
FocusScope.of(context).requestFocus(_fNodes[0]);
print("size of list" + gridRecords.toString());
},
)
]))));
}
}
关于flutter - Flutter:为什么在将新记录保存到列表时更新以前的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60406238/
我是 firebase 的新手,我正在尝试分页查询。我喜欢有一个“下一个”和“上一个”按钮。我的下一个按钮工作正常,我的问题是单击上一个 引用:https://firebase.google.com/
抱歉,标题这么蹩脚,但我只是不知道该放什么,希望你能理解。另外,我不知道以前是否有人问过类似的问题,因为我不知道合适的关键字 - 因此也无法用谷歌搜索。 基本上...在查看preg_match_all
我想在 TFS 中 check out 一个检入文件的先前版本。我可以轻松获得特定文件的变更集 ID 列表,但无法弄清楚如何 checkout 以前的版本。 我目前的代码: var workspace
我想使用 @FunctionalInterface来 self 代码中的 Java 8,但我希望能够将生成的类文件与 Java 6 一起使用。我认为我应该将源版本设为 1.8 , 目标版本为 1.6
自从 versions 被删除以来,我一直无法找到安装以前版本软件的方法。命令并点击 Homebrew。我在 2008 Mac Pro (3,1) 上运行 macOS 10.14.3 (Mojave)
当我开始当前的项目时,App Store 中已经有一个应用程序。此应用程序仅适用于 iPhone。 我的第一个任务是测试和构建一个也可以在 iPod Touch 上运行的版本。 大约 3 周前,App
我在 GitHub 上有一个曾经是 fork 的 repo,但现在不是了,因为我已经删除了原始项目的任何痕迹并开始了一个同名的新项目。 但是,GitHub 仍然表示该项目是 fork 的。有什么方法可
我是一名优秀的程序员,十分优秀!