小部件构建期间如何在抖动中导航?

时间:2020-01-18 19:31:57

标签: flutter dart

我试图检测到该用户不再通过身份验证,并将用户重定向到登录名。这就是我的做法

public function finishView(FormView $view, FormInterface $form, array $options)
    {
        $field = 'category';
        $choices = $view->children[$field]->vars['choices'];
        foreach ($choices as $choice){
           // I can add any attribute to the options like so
           $choice->attr['new-attribute'] = 'attribute_value';
        }
        $view->children[$field]->vars['choices'] = $choices;

    }

不幸的是,在构建时无法导航。它抛出此错误

AbstractAdmin

我不能只返回 Widget build(BuildContext context) { return FutureBuilder( future: _getData(context), builder: (context, snapshot) { try { if (snapshot.hasError && _isAuthenticationError(snapshot.error)) { Navigator.push(context, MaterialPageRoute(builder: (context) => LoginView())); } 小部件,因为父小部件包含应用栏和浮动按钮,并且需要在没有这些控件的情况下显示登录视图。我需要导航。

有可能做到吗?

3 个答案:

答案 0 :(得分:12)

将其包装在Future.microtask中。这会将它安排在下一个异步任务周期(即build完成之后)进行。

Future.microtask(() => Navigator.push(
  context, 
  MaterialPageRoute(builder: (context) => LoginView())
));

答案 1 :(得分:0)

流式传输

通常的做法是使用发生用户更改的流程。 当用户注销时,他检测到该更改并将其定向到另一个窗口。

在此,我附上比试图解释更多的信​​息:
https://codingwithjoe.com/flutter-authentication/

答案 2 :(得分:-1)

问题:

snapshot.hasError && _isAuthenticationError(snapshot.error)

代替此使用 OR

snapshot.hasError || _isAuthenticationError(snapshot.error)