- 我有一个文本字段数组。
- 一个将新的文本字段添加到数组的按钮。
- 如果将数据添加到文本字段并通过单击添加新元素 添加按钮,添加的数据就消失了。
- 按钮功能中有一个setstate来查看新元素 进行排列。
- 如何将新元素添加到数组中以将旧数据保留在 文本字段?
start_workout.dart
import 'package:flutter/material.dart';
import 'package:fultter_ultralifestyle/src/models/models.dart' show SetModel;
import 'package:fultter_ultralifestyle/src/presentation/widgets/dynamic_widget.dart';
class WorkoutStartScreen extends StatefulWidget {
static const String routeName = "workoutStart";
@override
_WorkoutStartScreenState createState() => _WorkoutStartScreenState();
}
class _WorkoutStartScreenState extends State<WorkoutStartScreen> {
final List<SetModel> sets = [
];
void _addSet() {
final id = sets.length;
sets.add(SetModel(id: id,pounds: 0,reps: 0));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Workout tracker"),centerTitle: true,),body: Container(
child: Column(
children: <Widget>[
Expanded(
child: ListView.builder(
itemCount: sets.length,itemBuilder: (BuildContext context,int index) {
return DynamicWidget(
set: sets[index],pos: index +1,delete: () {
sets.removeAt(index);
setState(() {});
},);
}),)
],floatingactionButton: FloatingactionButton(
onpressed: () => _addSet(),child: Icon(Icons.add),);
}
}
dynamic_widget.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fultter_ultralifestyle/src/models/models.dart';
import 'package:fultter_ultralifestyle/src/presentation/widgets/text_widget.dart';
class DynamicWidget extends StatelessWidget {
final TextEditingController poundsController = TextEditingController();
final TextEditingController repsController = TextEditingController();
final SetModel set;
final int pos;
Function delete;
DynamicWidget({
Key key,@required this.set,@required this.pos,@required this.delete,}) : super(key: key);
@override
Widget build(BuildContext context) {
final Size size = MediaQuery.of(context).size;
return Container(
child: Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
Container(
child: text(
caption: "SET $pos",SizedBox(width: 20.0),Container(
width: size.width / 4,child: Column(
children: <Widget>[
TextField(
controller: poundsController,keyboardType: TextInputType.number,inputFormatters: [
WhitelistingTextInputFormatter.digitsonly,],SizedBox(height: 10),text(caption: "pounds".toUpperCase()),SizedBox(
width: 20,text(caption: "X"),child: Column(
children: <Widget>[
TextField(
controller: repsController,inputFormatters: [
WhitelistingTextInputFormatter.digitsonly
],text(caption: "reps".toUpperCase()),SizedBox(width: 5.0),IconButton(
icon: Icon(Icons.delete_forever),onpressed: delete,)
],);
}
}