я пытаюсь добавить список, когда я нажимаю FlatButton, но я не могу добавить название ввода и сумму у меня есть эта ошибка
Скриншот симулятора — iPhone 12 Pro Max
Основной файл:
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:testspeed3/passAddfun.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final titleController = TextEditingController();
final amountController = TextEditingController();
final List transaction = [
{
'title': 'Home',
'amount': 44,
'date': DateTime.now(),
},
// {
// 'title': 'Muhammed',
// 'amount': 22,
// 'date': DateTime.now(),
// },
// {
// 'title': 'BestPR',
// 'amount': 11,
// 'date': DateTime.now(),
// },
];
void SubmitData(var titleSub, double amountsub) {
final NewList = [
{
'title': titleSub,
'amount': amountsub,
'date': '${DateTime.now()}',
}
];
setState(() {
transaction.add(NewList);
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Test Speeeed',
home: Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Container(
margin: EdgeInsets.all(20),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
PassData(SubmitData),
...(transaction).map((e) {
return Card(
margin: EdgeInsets.fromLTRB(0, 10, 0, 10),
elevation: 3,
child: Row(
children: [
Container(
padding: EdgeInsets.all(3),
margin: EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.blue,
),
child: Text(
'\$${e['amount']}',
style:
TextStyle(fontSize: 15, color: Colors.white),
)),
Column(
children: [
Container(
margin: EdgeInsets.fromLTRB(0, 0, 0, 10),
child: Text(
e['title'],
style: TextStyle(fontWeight: FontWeight.bold),
)),
Text(
'${DateFormat.MMMMd().format(e['date'])}',
style: TextStyle(color: Colors.black38),
),
],
),
],
));
})
],
),
),
),
);
}
}
Файл PassAddFun:
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class PassData extends StatefulWidget {
final Function Adx;
PassData(this.Adx);
@override
_PassDataState createState() => _PassDataState();
}
class _PassDataState extends State<PassData> {
final titleController = TextEditingController();
final amountController = TextEditingController();
void sumbitdata() {
widget.Adx(titleController.text, double.parse(amountController.text));
}
@override
Widget build(BuildContext build) {
return Column(
children: [
Container(
padding: EdgeInsets.fromLTRB(0, 0, 0, 30),
child: TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: titleController,
)),
Container(
child: TextField(
decoration: InputDecoration(labelText: 'Amount'),
controller: amountController),
),
Container(
margin: EdgeInsets.fromLTRB(0, 10, 0, 40),
child: FlatButton(
onPressed: () {
sumbitdata();
},
child: Text(
'Add Transaction',
style: TextStyle(color: Colors.white),
),
color: Colors.blue,
)),
],
);
}
}
Я пытаюсь добавить запись в данные после нажатия указанной кнопки, но это делается не так, как я хочу? Почему это связано с типом списка? Или что и что я должен изменить в коде
Вы добавляете список в другой список. Для этого вы должны использовать .addAll вместо просто .add
setState(() {
transaction.addAll(NewList);
});