使用.popUntil颤动传递数据

时间:2018-08-29 10:22:37

标签: dart flutter pop navigator

我一直在使用<app-someKindOfComponent> <app-directive [first]="'first 1'" [second]="'second 1'">A</app-directive> <app-directive [first]="'First 2'" [second]="'second 2'">B</app-directive> <app-directive [first]="'First 3'" [second]="'second 3'">C</app-directive> </app-someKindOfComponent>` 并将数据轻松传回1屏幕。但是,如果我使用Navigator.pop,将对象传递回目标屏幕的可接受方法是什么?

3 个答案:

答案 0 :(得分:0)

没有。这也没有意义,因为应该将结果返回给推动该路线的路线。

如果确实需要执行此操作,请使用多个pop调用:

// Widget of Route A:
String resultOfC = await Navigator.push(context, routeB);


// Widget of Route B:
String resultOfC = await Navigator.push<String>(context, routeC);
Navigator.pop(context, resultOfC); // pass result of C to A


// Widget of Route C:
Navigator.pop(context, 'my result'); // pass result to B

答案 1 :(得分:0)

您可以使用arguments中的RouteSettings将数据传递回特定的Route

例如:


// in MaterialApp
MaterialApp(
   onGenerateRoute: (settings) {
      switch (settings.name) {
         case '/':
            return MaterialPageRoute(
                     settings: RouteSettings(name: '/', arguments: Map()),  // (1)
                     builder: (_) => HomePage()
                  );
      }
   }
)

// in HomePage
Navigator.of(context).push(MaterialPageRoute(builder: (_) => StuffPage())
                     .then(_) {
                        final arguments = ModalRoute.of(context).settings.arguments as Map;
                        final result = arguments['result'];
                     };

// in StuffPage
Navigator.of(context).popUntil((route) {
   if (route.settings.name == '/') {
      (route.settings.arguments as Map)['result'] = 'something';
      return true;
   } else {
      return false;
   }
});

请注意:您必须初始化arguments,否则它将为null,这就是(1)的目的

答案 2 :(得分:0)

有点不正统,但我个人使用共享首选项,并在完成后清除