我使用的是ListTile,每次用户单击“添加”按钮时都需要添加时间,但总是添加相同的时间,即Flutter的执行时间。
示例:如果我在21:40运行代码并在不同时间单击按钮,它将始终显示21:40
我已经进行了研究,但找不到任何帮助我的东西,也许是因为它是如此简单。我是一个初学者,正在解决这些问题
@override
void initState(){
super.initState();
time = TimeOfDay.now();
}
TimeOfDay time;
List report = [];
void addItems (){
Map <String, String> item = Map();
item ['hours'] = '${time.format(context)}';
item ['hoursAgain'] = '${time.format(context)}';
report.add (item);
setState(() {
});
}
PS:我添加了“ hours”和“ hoursAgain”,因为Map需要两个参数。
完整代码:
import 'package:flutter/material.dart';
void main (){
runApp (MaterialApp(
home: Home()
));
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home>{
@override
void initState(){
super.initState();
time = TimeOfDay.now();
}
TimeOfDay time;
List report = [];
void addItems (){
Map <String, String> item = Map();
item ['hours'] = '${time.format(context)}';
item ['hoursAgain'] = '${time.format(context)}';
report.add (item);
setState(() {
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
Padding(padding: EdgeInsets.all(30),
child: GestureDetector(
child: Container(
alignment: Alignment.center,
width: 140,
height: 50,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(50),
gradient: LinearGradient(colors: [Color(0xff388df8), Color(0xff28c9fc)])
),
child: Text('ADD',
style: TextStyle(
color: Colors. white,
fontSize: 22,
fontWeight: FontWeight.bold
),
),
),
onTap:addItems
),
),
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: ListView.builder(
itemCount: report.length,
itemBuilder: (context, indice) {
return ListTile(
title: Text(report[indice]['hours'],
style: TextStyle(
fontSize: 17,
fontWeight: FontWeight.bold
),
),
trailing: Text(report[indice]['hoursAgain'],
style: TextStyle(
fontSize: 17
),
),
);
}
),
),
],
),
),
);
}
}
提前感谢您阅读此消息
答案 0 :(得分:0)
您的onTap
是错字。 addItens
应该是addItems
。对其进行更改,它将像魅力一样工作。下次请多加注意。
答案 1 :(得分:0)
您捕获了创建Home小部件时的时间。
void initState(){
super.initState();
time = TimeOfDay.now();
}
您要做的是将其移至addItems
并将其从班级中删除
void addItems (){
final time = TimeOfDay.now();
Map <String, String> item = Map();
item ['hours'] = '${time.format(context)}';
item ['hoursAgain'] = '${time.format(context)}';
report.add (item);
setState(() {
});
}