登录后如何重新加载所有小部件的状态?

问题描述 投票:0回答:1

我们的求职申请,有2种情况:

  • 已经有一个帐户。
  • 以访客身份访问。

当用户以访客身份访问,然后找到喜欢的工作并保存时,会发生问题。在用户完成登录后,我们已将用户重定向为登录。我将用户帐户信息保存在SharedPreferences中并导航了该用户返回上一个工作详细信息屏幕。我们想要的是所有先前的屏幕都已登录,因为我们依靠用户标识来显示先前的某些屏幕

flutter mobile dart flutter-layout flutter-dependencies
1个回答
0
投票

您可以在登录状态更改时刷新您的应用程序:

将这两个小部件添加到您的应用中:

class RestartWidget extends StatefulWidget {
  final Widget child;

  RestartWidget({this.child});

  static restartApp(BuildContext context) {
    final _RestartWidgetState state =
        context.ancestorStateOfType(const TypeMatcher<_RestartWidgetState>());
    state.restartApp();
  }

  @override
  _RestartWidgetState createState() => new _RestartWidgetState();
}

class _RestartWidgetState extends State<RestartWidget> {
  Key key = new UniqueKey();

  void restartApp() {
    this.setState(() {
      key = new UniqueKey();
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Container(
      key: key,
      child: widget.child,
    );
  }
}

class AppBuilder extends StatefulWidget {
  final Function(BuildContext) builder;

  const AppBuilder({Key key, this.builder}) : super(key: key);

  @override
  AppBuilderState createState() => new AppBuilderState();

  static AppBuilderState of(BuildContext context) {
    return context.ancestorStateOfType(const TypeMatcher<AppBuilderState>());
  }
}

class AppBuilderState extends State<AppBuilder> {
  @override
  Widget build(BuildContext context) {
    return widget.builder(context);
  }

  void rebuild() {
    setState(() {});
  }
}

然后将AppBuilder添加为Material App的父级:

AppBuilder(
  builder: (context) {
    return MaterialApp(

    );
  },
);

每次您要刷新应用程序的状态时,只需致电:

RestartWidget.restartApp(context)

因此,当您更改为登录状态时,您可以调用此方法,并且您的所有页面也会刷新状态。

© www.soinside.com 2019 - 2024. All rights reserved.