[英]How to Fix Error when using Provider Package Flutter
I'm creating an app like a note that contains a list of activities that you can add.我正在创建一个应用程序,例如一个包含您可以添加的活动列表的笔记。 I use the provider package to save the changes to the list.
我使用提供者 package 将更改保存到列表中。 The list is created by
ListView.builder
, and the child is a ListTile
consisting of text and a checkbox.该列表由
ListView.builder
创建,子项是由文本和复选框组成的ListTile
。 there is no error in my coding, but in debugging there is an error "if you want to expose a variable that can be anything, consider to changing dynamic to object instead" like the image I gave.我的编码没有错误,但在调试中出现错误“如果你想公开一个可以是任何东西的变量,请考虑将动态更改为 object”,就像我给出的图像一样。 how can i fix it?
我该如何解决?
Main.dart
主.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:todoey_flutter/models/task_data.dart';
import 'screens/tasks_screen.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => TaskData(),
lazy: false,
child: MaterialApp(
debugShowCheckedModeBanner: false,
home: TasksScreen(),
),
);
}
}
task_list.dart
task_list.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'task_tile.dart';
class TaskList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer(
builder: (context, taskDataObject, child) {
return ListView.builder(
itemBuilder: (context, index) {
return TaskTile(
theTask: taskDataObject.tasks[index].name,
isChecked: taskDataObject.tasks[index].isDone,
checkboxCallback: (checkboxState) {
taskDataObject.updateTask(taskDataObject.tasks[index]);
},
);
},
itemCount: taskDataObject.taskCount,
);
},
);
}
}
task_tile.dart
task_tile.dart
import 'package:flutter/material.dart';
class TaskTile extends StatelessWidget {
TaskTile({
this.isChecked,
this.theTask,
this.checkboxCallback,
this.onLongPressCallback,
});
final bool isChecked;
final String theTask;
final Function checkboxCallback;
final Function onLongPressCallback;
@override
Widget build(BuildContext context) {
return ListTile(
onLongPress: onLongPressCallback,
title: Text(
theTask,
style: TextStyle(
decoration: isChecked ? TextDecoration.lineThrough : null),
),
trailing: Checkbox(
activeColor: Colors.lightBlueAccent,
value: isChecked,
onChanged: checkboxCallback,
),
);
}
}
the Provider class
提供者 class
import 'dart:collection';
import 'package:flutter/material.dart';
import 'package:todoey_flutter/models/task.dart';
class TaskData extends ChangeNotifier {
List<Task> _tasks = [
Task(name: 'cook'),
Task(name: 'reading'),
Task(name: 'sleding')
];
int get taskCount {
return _tasks.length;
}
UnmodifiableListView<Task> get tasks {
return UnmodifiableListView(_tasks);
}
void addTask (String newTaskTitle) {
final task = Task(name: newTaskTitle);
_tasks.add(task);
notifyListeners();
}
void updateTask (Task task){
task.toggleDone();
notifyListeners();
}
void deleteTask (Task task){
_tasks.remove(task);
notifyListeners();
}
}
You have to use Consumer
of T
, instead of only Consumer
.您必须使用
Consumer
的T
,而不仅仅是Consumer
。 So, change task_list.dart
to be like this:因此,将
task_list.dart
更改为如下所示:
class TaskList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<TaskData>( // <--- Here, insert <TaskData> after Consumer
builder: (context, taskDataObject, child) {
// ...
},
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.