Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Class flatter/Dart:父类有子类列表,我们如何让子类意识到它';谁的父母?_Class_Flutter_Dart - Fatal编程技术网

Class flatter/Dart:父类有子类列表,我们如何让子类意识到它';谁的父母?

Class flatter/Dart:父类有子类列表,我们如何让子类意识到它';谁的父母?,class,flutter,dart,Class,Flutter,Dart,因此,需要一个简单的父/子类结构 class Parent{ Parent({this.id, this.children}); final int id; final List<Child> children; } class Child{ Child({this.id, this.parent}); final int id; final Parent parent; Parent getParent() => this.parent; //??

因此,需要一个简单的父/子类结构

class Parent{
  Parent({this.id, this.children});
  final int id;
  final List<Child> children;
}
class Child{
  Child({this.id, this.parent});
  final int id;
  final Parent parent;
  Parent getParent() => this.parent; //?????????
}

@override
Widget build(BuildContext context) {
  Parent p = new Parent(id: 1, children: new List<Child>.from({Child(id:0, parent:p), Child(id:1, parent:p)}));

  Parent childParent = p.children[0].getParent();
}
类父类{
父项({this.id,this.children});
最终int id;
最后儿童名单;
}
班童{
子项({this.id,this.parent});
最终int id;
最终父母;
Parent getParent()=>this.Parent;//?????????
}
@凌驾
小部件构建(构建上下文){
Parent p=新的父(id:1,子:new List.from({Child(id:0,父:p),Child(id:1,父:p)}));
Parent-childParent=p.children[0].getParent();
}
这将导致在声明之前使用p。但是为了做一些像

Parent p = Parent(id:1);
p.children = new List<Child>.from({Child(id:0, parent:p), Child(id:1, parent:p)}
Parent p=Parent(id:1);
p、 children=新列表。from({Child(id:0,parent:p),Child(id:1,parent:p)}
意味着p.children不能是最终的,也不能是构造函数的一部分,而且看起来很笨重

所以我看不出如何将对父项的引用传递到子项初始化中? 这似乎是一种标准模式,但仍在挣扎

助教

用例:

父/子结构位于firestore(集合-子集合)中。数据库服务获取firestore结构并将其映射到这些自定义对象,从而维护父/子结构。生成的对象通过提供程序存储在根小部件(main.dart->myApp builder)中,以允许从任何小部件进行访问


在某些时候,我们有一个屏幕/页面,它只显示子部件,因此没有小部件结构子部件是最顶层的小部件。然后,我想显示子部件有一个..的父部件和来自父部件的描述。在这一点上,如果这仍然只是指firestore快照->数据,我可以简单地调用child.parent()并获取父级。我似乎看不出如何在自定义类映射中复制它?

您能详细说明为什么要在子级中引用父级吗?当然可以..问题中添加了用例。您能向父级添加类似ID的字段并添加函数
searchById()
到具有
ChangeNotifier
searchById()
的类返回具有匹配id的父级。所有子级也会获得此id的副本。因此,当您只有子级并且希望获取其父级的数据时,您只需实例化提供程序并调用
searchById()
带有id。将其扩展为父>子>孙>曾孙>等。然后,由于从根目录开始的自上而下要求,searchById似乎很繁重。我猜在这一点上,存储到父目录的路径而不是id是合乎逻辑的。我们无法让子目录自己知道其父目录,这似乎很奇怪。你能理解吗为什么您要尝试在子对象中引用父对象?当然可以。问题中添加了用例。您是否可以向父对象添加类似ID的字段,并向具有
ChangeNotifier
的类添加函数
searchById()
searchById()
返回具有匹配id的父项。所有子项也将获得此id的副本。因此,当您只有子项并且希望获取其父项的数据时,您只需实例化提供程序并调用
searchById()
带有id。将其扩展为父>子>孙>曾孙>等。由于从根目录开始的自上而下的要求,searchById似乎很繁重。我猜在这一点上,存储到父目录的路径而不是id是合乎逻辑的。奇怪的是,我们无法让子目录自己知道它的父目录。