在颤动中更改颜色时,Gesturedetector 的 onTap 功能无法正常工作

如何解决在颤动中更改颜色时,Gesturedetector 的 onTap 功能无法正常工作

您好,我是 Flutter 编码新手。我正在使用各种小部件实现动画列表。我试图做的是通过检查 task.completed 来更改文本的颜色。但它不能正常工作。我检查了打印功能,但完成的值正在以正确的方式改变。我找不到为什么 setState 函数不起作用。我把 task.completed 弄脏了,这样 setState 就会明白要改变什么。有人可以帮助我吗?我在这个问题上挣扎了 3 天。

import 'package:Flutter/material.dart';
import 'package:Flutter_app/classes/task.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,home: Scaffold(
        appBar: AppBar(title: Text('Update AnimatedList data')),body: BodyWidget(),),);
  }
}

class BodyWidget extends StatefulWidget {
  @override
  BodyWidgetState createState() {
    return new BodyWidgetState();
  }
}

class BodyWidgetState extends State<BodyWidget> {
  // the GlobalKey is needed to animate the list
  final GlobalKey<AnimatedListState> _listKey = GlobalKey(); // backing data
  TextEditingController textEditingController = TextEditingController();
  List<Widget> _data = [];
  final List<Task> tasks = <Task>[];

  @override
  void initState() {
    super.initState();
    _data.add(GestureDetector(
      child: Text(
        "추가하기",style: TextStyle(color: Colors.grey,fontSize: 20.0),onTap: () {
        setState(() {
          _onButtonPress();
        });
      },));
  }

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        children: <Widget>[
          SizedBox(
            height: 400,child: AnimatedList(
              key: _listKey,initialItemCount: _data.length,itemBuilder: (context,index,animation) {
                return _buildItem(_data[index],animation);
              },)
        ],);
  }

  Widget _buildItem(Widget item,Animation animation) {
    return SizeTransition(sizefactor: animation,child: item);
  }

  void _onButtonPress() {
    // replace this with method choice below
    _insertSingleItem();
  }

  void _insertSingleItem() {
    int insertIndex = _data.length - 1;
    Widget widget = Form(
      child: TextField(
        controller: textEditingController,autofocus: true,decoration: Inputdecoration(
          isDense: true,contentPadding: EdgeInsets.all(0.0),border: InputBorder.none,onEditingComplete: () {
          Task task = Task(name: textEditingController.text,completed: false);
          print(identityHashCode(task));
          tasks.add(task);
          print(identityHashCode(tasks.last));
          Widget taskWidget = GestureDetector(
            child: Text(
              task.name,style: TextStyle(
                  color: task.completed ? Colors.grey : Colors.black87,onTap: () {
              setState(() {
                print(identityHashCode(task));
                task.completed = !task.completed;
                bool temp = task.completed;
                print('$temp');
              });
            },);
          _data.removeAt(insertIndex);
          _data.insert(insertIndex,taskWidget);
          textEditingController.clear();
          setState(() {});
        },showCursor: false,);
    _data.insert(insertIndex,widget);
    _listKey.currentState
        .insertItem(insertIndex,duration: Duration(seconds: 1));
  }
}

问题出现在这里

Widget taskWidget = GestureDetector(
            child: Text(
              task.name,);

我的任务类是这个

import 'time.dart';

enum Weekday {
  Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}

class Task {

  String name;
  bool completed;

  String memo;
  List<Time> recordTimes;
  List<Time> plannedTimes;
  bool isRepeated;
  Set<Weekday> repeatWeekday;

  Task({this.name,this.completed,this.memo,this.recordTimes,this.plannedTimes,this.isRepeated,this.repeatWeekday});

  Task copy ({String name,bool completed,String memo,List<Time> recordTimes,List<Time> plannedTimes,bool isRepeated,Set<Weekday> repeatWeekday}) {
    return Task(
      name: name ?? this.name,completed: completed ?? this.completed,memo: memo ?? this.memo,recordTimes: recordTimes ?? List<Time>.from(this.recordTimes ?? {}),plannedTimes: plannedTimes ?? List<Time>.from(this.plannedTimes ?? {}),isRepeated: isRepeated ?? this.isRepeated,repeatWeekday: repeatWeekday ?? Set<Weekday>.from(this.repeatWeekday ?? {}),);
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?