【问题标题】:How to send setState to root page from last page on Navigator stack?如何从 Navigator 堆栈的最后一页将 setState 发送到根页面?
【发布时间】:2020-03-06 14:27:07
【问题描述】:

我设计了我的应用程序,并决定使用路由并使用 firebase 进行身份验证。

如果用户想使用电子邮件登录,在根页面有一些按钮转到EmailLogin页面

EmailLogin页面如果用户没有注册之前去EmailRegister页面注册。

我使用了 3 次 Navigator.pop(),从堆栈中弹出:EmailRegisterEmailLoginLoginPage 然后按LoggedIn,但是当我按后退按钮时,我看到黑屏。


import 'package:flutter/material.dart';
import 'loginPage.dart';
import 'login-register/emailLogin.dart';
import 'login-register/emailRegister.dart';
import 'login-register/authentication.dart';
import 'logged-in/logged-in.dart';


BaseAuth auth = new Auth();

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      //home: LoginPage(),
      initialRoute: '/',
      routes: {
        // When navigating to the "/" route, build the FirstScreen widget.
        '/': (context) => LoginPage(),
        '/loggedIn' : (context) => LoggedIn(auth: auth),
        '/emailLogin': (context) => EmailLogin(),
        '/emailRegister': (context) => EmailRegister(auth: auth),
        //'/emailRegister': (context) => EmailRegister(),

      },
    );
  }
}

我改变了想法并决定为根路由设计HomePage,如果用户登录用户请查看LoggedIn页面,否则请查看loginPage,但我需要将setstate发送到HomePage小部件但我如何发送 ?因为页面堆栈看起来像这样:root -> login -> register

我每页都发送回调或者我需要做什么?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    我认为您之前安排页面路线的方式是正确的。你可以使用,

    1. Navigator.of(context).popUntil(),返回根目录。
    2. Navigator.of(context).pushAndRemoveUntil(),推送 Home 并移除直到 root

    虽然这可能会对您的导航查询进行排序,但我仍然不明白您为什么要在主页中设置 setState()。一个解释或一些代码会更好

    【讨论】:

    猜你喜欢
    • 2021-02-12
    • 2018-10-21
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多