Как перезагрузить статус всех виджетов после входа в систему? - PullRequest
0 голосов
/ 15 октября 2019

Наше приложение для поиска работы, оно имеет 2 случая:

  • Уже есть учетная запись.
  • Доступ в качестве гостя.

Проблемапроисходит, когда пользователь обращается как гость, затем находит любимое задание и сохраняет его, мы перенаправили пользователя на вход после того, как пользователь завершил вход. Я сохранил информацию об учетной записи пользователя в SharedPreferences и переместил пользователя назад к предыдущемуэкран сведений о работе. Мы хотим, чтобы вошли все предыдущие экраны, потому что на некоторых из предыдущих экранов мы полагаемся на идентификатор пользователя, чтобы показать

1 Ответ

0 голосов
/ 16 октября 2019

Вы можете обновить свое приложение при изменении статуса входа в систему:

Добавьте эти два виджета в свое приложение:

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)

Таким образом, вы можете вызывать этот метод, когда вы переходите в состояние входа в систему, и вся ваша страница также будет обновлять состояние.

...