watch(provider) 是否更新父部件的子部件?

Does watch(provider) update children of parent widget?

我正在尝试使用一个 UserInteraction 更新两个页面,因此尝试使用 Riverpod 库在两个页面中访问相同的流。

现在进一步解释。当我将 Stream 传递给 CustomerPage 时,我能够获取数据(String Anton)。当我单击触发 FireStore 更改的按钮时,当我返回它时,字符串在 ParentWidget 中更新为“Marco”。但它不会在 CustomerPage 中改变,除非我通过 ParentWidget 中的 RaisedButton 重新打开页面。 但我希望 它在我单击 CustomerPage 上的按钮后更新。

我希望这能让它更清楚。

class ParentWidget extends ConsumerWidget{
Widget build(BuildContext context, ScopedReader watch){
Stream<DocumentSnapshot> doc = watch(streamProvider.stream);
return Container(
child: Column(
  children: [ 
      Text(doc.name), //Lets say the name is Anton,
      RaisedButton(
         child: Text(" road to CustomerPage"),
         onPressed:(){
             Navigator.of(context).pushNamed(RouteGenerator.customerPage, arguments: doc);
     },), //RaisedButton
   ],), //Column
   );  //Container
  }
 }

class CustomerPage extends StatelessWidget{
   Stream<DocumentSnapshot> docStream
   CustomerPage({this.docStream});
   Widget build(BuildContext context){
   return Column(
        children: [ 
          Text(docStream.name) //Here is also Anton
          RaisedButton(
              child: Text("Change Name"),
              onPressed: () {
                  context.read(streamProvider).changeName("Marco"); 
            },), //RaisedButton
         ]
       ); //Column
      }
}

到目前为止我的理解是,riverpod 允许您获取提供者的状态,这基本上是一个值(?),这就是为什么只需在您想要的任何 Widget 中观看它就足够了从中访问它的数据。再也没有必要(就我而言)让Widgets在应用程序中传递。

下面是我认为正确的解决方案。

我给供应商打了多少次电话也没关系。它总是将是相同的实例。对于我的情况,这意味着 doc 和 doc2 是相同的。 我希望这能让它更清楚。

class ParentWidget extends ConsumerWidget{
Widget build(BuildContext context, ScopedReader watch){
Stream<DocumentSnapshot> doc = watch(streamProvider.stream);
return Container(
child: Column(
  children: [ 
      Text(doc.name), //Lets say the name is Anton,
      RaisedButton(
         child: Text(" road to CustomerPage"),
         onPressed:(){
             Navigator.of(context).pushNamed(RouteGenerator.customerPage);
     },), //RaisedButton
   ],), //Column
   );  //Container
  }
 }

class CustomerPage extends ConsumerWidget{
Widget build(BuildContext context, ScopedReader watch){
 Stream<DocumentSnapshot> doc2 = watch(streamProvider.stream);
   return Column(
        children: [ 
          Text(doc2.name) //Here is also Anton
          RaisedButton(
              child: Text("Change Name"),
              onPressed: () {
                  context.read(streamProvider).changeName("Marco"); 
            },), //RaisedButton
         ]
       ); //Column
      }
}