Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 当一个类已经通过我的主屏幕上下文化时,如何通过我的主页回调该类?_Flutter_Dart - Fatal编程技术网

Flutter 当一个类已经通过我的主屏幕上下文化时,如何通过我的主页回调该类?

Flutter 当一个类已经通过我的主屏幕上下文化时,如何通过我的主页回调该类?,flutter,dart,Flutter,Dart,详细说明一下,如何通过TaskScreen的回调清除TaskData中的任务列表?我发现它有点难以描述,但请参考代码中的注释,这样更容易理解 main.dart void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return ChangeNotifierProvider( cre

详细说明一下,如何通过TaskScreen的回调清除TaskData中的任务列表?我发现它有点难以描述,但请参考代码中的注释,这样更容易理解

main.dart

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的答案