ListTile不会随着每次添加而更新时间

时间:2020-09-08 01:44:04

标签: flutter dart

我使用的是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
                          ),
                        ),
                      );
                    }
                ),
              ),
            ],
          ),
      ),
    );
  }
}

提前感谢您阅读此消息

2 个答案:

答案 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(() {
    });
  }