Flutter 当一个类已经通过我的主屏幕上下文化时,如何通过我的主页回调该类?
详细说明一下,如何通过TaskScreen的回调清除TaskData中的任务列表?我发现它有点难以描述,但请参考代码中的注释,这样更容易理解 main.dartFlutter 当一个类已经通过我的主屏幕上下文化时,如何通过我的主页回调该类?,flutter,dart,Flutter,Dart,详细说明一下,如何通过TaskScreen的回调清除TaskData中的任务列表?我发现它有点难以描述,但请参考代码中的注释,这样更容易理解 main.dart void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return ChangeNotifierProvider( cre
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => TaskData(),
child: MaterialApp(,
home: TaskScreen()),
);
}
任务数据
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:todo/models/task.dart';
class TaskData extends ChangeNotifier {
TaskData();
List<Task> tasks = [
Task(name: 'Doodh le', time: null, date: null),
Task(name: 'Anda le', time: null, date: null),
];
//function to clear tasks that I want to callback
void clearTasks(List tasks) {
tasks.clear();
notifyListeners();
}
}
导入“包:flift/foundation.dart”;
进口“包装:颤振/材料.省道”;
导入“package:todo/models/task.dart”;
类TaskData扩展了ChangeNotifier{
TaskData();
列出任务=[
任务(名称:'Doodh le',时间:null,日期:null),
任务(名称:“Anda le”,时间:null,日期:null),
];
//函数以清除要回调的任务
作废clearTasks(列出任务){
任务。清除();
notifyListeners();
}
}
任务屏幕
class TaskScreen extends StatefulWidget {
@override
_TaskScreenState createState() => _TaskScreenState();
}
class _TaskScreenState extends State<TaskScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FlatButton(
child: Text('Delete all tasks'),
onPressed: () {
//callback to clear tasks
},
),
));
}
}
类TaskScreen扩展了StatefulWidget{
@凌驾
_TaskScreenState createState()=>\u TaskScreenState();
}
类_TaskScreenState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:扁平按钮(
子项:文本(“删除所有任务”),
已按下:(){
//回调以清除任务
},
),
));
}
}
您可以复制粘贴运行下面的完整代码步骤1:您可以使用
Provider.of(context,listen:false).clearTasks()代码>
步骤2:在clearTasks()中不需要参数
void clearTasks() {
_tasks.clear();
notifyListeners();
}
工作演示
完整代码
import 'dart:collection';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(MyApp());
}
class TaskScreen extends StatefulWidget {
@override
_TaskScreenState createState() => _TaskScreenState();
}
class _TaskScreenState extends State<TaskScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Consumer<TaskData>(builder: (context, taskData, child) {
return Expanded(
child: ListView.builder(
shrinkWrap: true,
itemCount: taskData.tasks.length,
itemBuilder: (context, index) => Card(
elevation: 3,
child: ListTile(
title: Text(taskData.tasks[index].name),
),
)),
);
}),
Center(
child: FlatButton(
child: Text('Delete all tasks'),
onPressed: () {
Provider.of<TaskData>(context, listen: false).clearTasks();
},
),
),
],
));
}
}
class Task {
String name;
DateTime time;
DateTime date;
Task({this.name, this.time, this.date});
}
class TaskData extends ChangeNotifier {
TaskData();
List<Task> _tasks = [
Task(name: 'Doodh le', time: null, date: null),
Task(name: 'Anda le', time: null, date: null),
];
UnmodifiableListView<Task> get tasks => UnmodifiableListView(_tasks);
//function to clear tasks that I want to callback
void clearTasks() {
_tasks.clear();
notifyListeners();
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => TaskData(),
child: MaterialApp(home: TaskScreen()),
);
}
}
导入“dart:collection”;
进口“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
void main(){
runApp(MyApp());
}
类TaskScreen扩展了StatefulWidget{
@凌驾
_TaskScreenState createState()=>\u TaskScreenState();
}
类_TaskScreenState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
使用者(生成器:(上下文、任务数据、子项){
扩大回报(
子项:ListView.builder(
收缩膜:对,
itemCount:taskData.tasks.length,
itemBuilder:(上下文,索引)=>卡片(
标高:3,
孩子:ListTile(
标题:文本(taskData.tasks[index].name),
),
)),
);
}),
居中(
孩子:扁平按钮(
子项:文本(“删除所有任务”),
已按下:(){
Provider.of(context,listen:false).clearTasks();
},
),
),
],
));
}
}
课堂任务{
字符串名;
日期时间;
日期时间日期;
任务({this.name,this.time,this.date});
}
类TaskData扩展了ChangeNotifier{
TaskData();
列表_任务=[
任务(名称:'Doodh le',时间:null,日期:null),
任务(名称:“Anda le”,时间:null,日期:null),
];
UnmodifiableListView获取任务=>UnmodifiableListView(\u任务);
//函数以清除要回调的任务
void clearTasks(){
_任务。清除();
notifyListeners();
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回ChangeNotifierProvider(
创建:(上下文)=>TaskData(),
子项:MaterialApp(主项:TaskScreen()),
);
}
}
您是否尝试过使用消费者
或提供者.of(上下文,请听:false)。clearTasks
?@Asadhameed不,我没有尝试过。你能详细说明一下吗?将此作为答案发布。请参见@chunhunghan的答案