我试图检测到该用户不再通过身份验证,并将用户重定向到登录名。这就是我的做法
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()));
}
小部件,因为父小部件包含应用栏和浮动按钮,并且需要在没有这些控件的情况下显示登录视图。我需要导航。
有可能做到吗?
答案 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)