Flutter 颤振:如何从点击编辑按钮的列表数据填充表单并保存它?
我有一个列表,刚开始时是硬编码的。当我在表单中输入时,表单数据保存到列表中。当我点击更新图标时,我想以相同索引的形式获取数据。当前屏幕如下所示 我想在点击编辑按钮后得到这个输出。我有什么办法可以做到这一点吗 这是我的密码Flutter 颤振:如何从点击编辑按钮的列表数据填充表单并保存它?,flutter,listview,dart,Flutter,Listview,Dart,我有一个列表,刚开始时是硬编码的。当我在表单中输入时,表单数据保存到列表中。当我点击更新图标时,我想以相同索引的形式获取数据。当前屏幕如下所示 我想在点击编辑按钮后得到这个输出。我有什么办法可以做到这一点吗 这是我的密码 import 'package:flutter/material.dart'; import 'package:table/model.dart'; class Episode5 extends StatefulWidget { @override _Episod
import 'package:flutter/material.dart';
import 'package:table/model.dart';
class Episode5 extends StatefulWidget {
@override
_Episode5State createState() => _Episode5State();
}
class _Episode5State extends State<Episode5> {
TextEditingController nameController = TextEditingController();
TextEditingController emailController = TextEditingController();
final form = GlobalKey<FormState>();
static var _focusNode = new FocusNode();
User user = User();
List<User> userList = [
User(name: "a", email: "a"),
User(name: "d", email: "b"),
User(name: "c", email: "c")
];
@override
Widget build(BuildContext context) {
Widget bodyData() => DataTable(
onSelectAll: (b) {},
sortColumnIndex: 0,
sortAscending: true,
columns: <DataColumn>[
DataColumn(
label: Text("Name"),
numeric: false,
tooltip: "To Display name"),
DataColumn(
label: Text("Email"),
numeric: false,
tooltip: "To Display Email"),
DataColumn(
label: Text("Update"),
numeric: false,
tooltip: "To Display Email"),
],
rows: userList
.map(
(name) => DataRow(
cells: [
DataCell(
Text(name.name),
),
DataCell(
Text(name.email),
),
DataCell(
Icon(
Icons.edit,
color: Colors.black,
),
),
],
),
)
.toList(),
);
return Scaffold(
appBar: AppBar(
title: Text("Data add to List Table using Form"),
),
body: Container(
child: Column(
children: <Widget>[
bodyData(),
Padding(
padding: EdgeInsets.all(10.0),
child: Form(
key: form,
child: Container(
child: Column(
children: <Widget>[
TextFormField(
controller: nameController,
focusNode: _focusNode,
keyboardType: TextInputType.text,
autocorrect: false,
onSaved: (String value) {
user.name = value;
},
maxLines: 1,
validator: (value) {
if (value.isEmpty) {
return 'This field is required';
}
return null;
},
decoration: new InputDecoration(
labelText: 'Name',
hintText: 'Name',
labelStyle: new TextStyle(
decorationStyle: TextDecorationStyle.solid),
),
),
SizedBox(
height: 10,
),
TextFormField(
controller: emailController,
keyboardType: TextInputType.text,
autocorrect: false,
maxLines: 1,
validator: (value) {
if (value.isEmpty) {
return 'This field is required';
}
return null;
},
onSaved: (String value) {
user.email = value;
},
decoration: new InputDecoration(
labelText: 'Email',
hintText: 'Email',
labelStyle: new TextStyle(
decorationStyle: TextDecorationStyle.solid)),
),
SizedBox(
height: 10,
),
Column(
// crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Center(
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextButton(
child: Text("Add"),
onPressed: () {
if (validate() == true) {
form.currentState.save();
addUserToList(
user.name,
user.email,
);
clearForm();
}
},
),
],
),
),
],
),
],
),
),
),
),
],
),
),
);
}
void addUserToList(name, email) {
userList.add(User(name: name, email: email));
}
clearForm() {
nameController.clear();
emailController.clear();
}
bool validate() {
var valid = form.currentState.validate();
if (valid) form.currentState.save();
return valid;
}
}
导入“包装:颤振/材料.省道”;
导入“package:table/model.dart”;
类eposode5扩展了StatefulWidget{
@凌驾
_Episode5State createState()=>_Episode5State();
}
类_eposode5state扩展状态{
TextEditingController name控制器=TextEditingController();
TextEditingController emailController=TextEditingController();
最终形式=GlobalKey();
静态变量_focusNode=新的focusNode();
User=User();
列表用户列表=[
用户(姓名:“a”,电子邮件:“a”),
用户(姓名:“d”,电子邮件:“b”),
用户(姓名:“c”,电子邮件:“c”)
];
@凌驾
小部件构建(构建上下文){
Widget bodyData()=>DataTable(
选举:(b){},
sortColumnIndex:0,
排序:是的,
栏目:[
数据列(
标签:文本(“名称”),
数字:false,
工具提示:“显示名称”),
数据列(
标签:文本(“电子邮件”),
数字:false,
工具提示:“显示电子邮件”),
数据列(
标签:文本(“更新”),
数字:false,
工具提示:“显示电子邮件”),
],
行:用户列表
.地图(
(名称)=>DataRow(
单元格:[
数据单元(
文本(name.name),
),
数据单元(
文本(姓名、电子邮件),
),
数据单元(
图标(
图标。编辑,
颜色:颜色,黑色,
),
),
],
),
)
.toList(),
);
返回脚手架(
appBar:appBar(
标题:文本(“使用表格将数据添加到列表中”),
),
主体:容器(
子:列(
儿童:[
bodyData(),
填充物(
填充:所有边缘设置(10.0),
孩子:表格(
关键:形式,
子:容器(
子:列(
儿童:[
TextFormField(
控制器:名称控制器,
focusNode:_focusNode,
键盘类型:TextInputType.text,
自动更正:错误,
onSaved:(字符串值){
user.name=值;
},
maxLines:1,
验证器:(值){
if(value.isEmpty){
返回“此字段为必填字段”;
}
返回null;
},
装饰:新的输入装饰(
labelText:'名称',
hintText:'名称',
标签样式:新的文本样式(
装饰样式:TextDecorationStyle.solid),
),
),
大小盒子(
身高:10,
),
TextFormField(
控制器:emailController,
键盘类型:TextInputType.text,
自动更正:错误,
maxLines:1,
验证器:(值){
if(value.isEmpty){
返回“此字段为必填字段”;
}
返回null;
},
onSaved:(字符串值){
user.email=值;
},
装饰:新的输入装饰(
labelText:“电子邮件”,
hintText:“电子邮件”,
标签样式:新的文本样式(
装饰样式:TextDecorationStyle.solid),
),
大小盒子(
身高:10,
),
纵队(
//crossAxisAlignment:crossAxisAlignment.start,
儿童:[
居中(
孩子:排(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本按钮(
子项:文本(“添加”),
已按下:(){
如果(validate()==true){
form.currentState.save();
addUserToList(
user.name,
user.email,
);
clearForm();
}
},
),
],
),
),
],
),
],
),
),
),
),
],
),
),
);
}
void addUserToList(姓名、电子邮件){
尤里斯
void _updateTextControllers(User user) {
setState(() {
nameController.text = user.name;
emailController.text = user.email;
});
}
rows: userList
.map(
(name) => DataRow(
cells: [
DataCell(
Text(name.name),
),
DataCell(
Text(name.email),
),
DataCell(
IconButton(
onPressed: () => _updateTextControllers(name), // new function here
icon: Icon(
Icons.edit,
color: Colors.black,
),
),
),
],
),
)
.toList(),