我想将值传递List<Map<String,String>>
给ListView.builder()
并在屏幕上显示并在每个单元格中添加两个按钮,在此单元格之后添加一个单元格并删除此单元格,问题是实际上它们被正确添加和删除,但添加的单元格是显示为最后一个单元格,因为它可以修复?
ps:我在按下按钮的时候试过了,Navigator.pushReplacement()...
但不是这样,在这种情况下页面位置丢失了
这是我的代码:
import 'dart:convert';
import 'package:flutter/material.dart';
import 'data/data.dart';
_AddPageState state = _AddPageState();
class AddPage extends StatefulWidget {
@override
_AddPageState createState() => _AddPageState();
}
class _AddPageState extends State<AddPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Ән қосу'),
centerTitle: true,
actions: <Widget>[
IconButton(
icon: Icon(
Icons.save,
size: 30.0,
),
onPressed: () {},
)
],
),
body: ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return ListTile(
title: Column(
children: <Widget>[
TextFormField(
initialValue: data[index]['data'],
),
TextFormField(
initialValue: data[index]['text']
)
],
),
subtitle: Row(
children: <Widget>[
Expanded(
flex: 50,
child: IconButton(
icon: Icon(Icons.add),
onPressed: () {
setState(() {
addBeforeIndex(data, index);
print(json.encode(data));
});
},
),
),
Expanded(
flex: 50,
child: IconButton(
icon: Icon(Icons.remove),
onPressed: () {
setState(() {
setState(() {
removeIndex(index);
print(json.encode(data));
});
});
},
),
)
],
));
},
),
);
}
}
这是来自的代码data.dart
:
List<Map<String, String>> data = [
{"data": "data1", "text": "text1"},
{"data": "data2", "text": "text2"},
{"data": "data3", "text": "text3"}
];
Map<String, String> inData = {"data": "", "text": ""};
void add(List data) {
Map<String, String> v = inData;
data.add(v);
}
void addBeforeIndex(List data, int index) {
Map<String, String> v = inData;
data.insert(index+1, v);
}
void removeIndex(int index) {
data.removeAt(index);
}
阅读Key是什么以及如何使用它。
修复代码,补充
key: new Key(data.length.toString())
(这是一个临时解决方案,考虑如何正确地做,从你的架构开始。):