问题描述
您好,我是 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 (将#修改为@)