Как сохранить состояние BLoC при горячей перезагрузке Flutter?

Мне нравится горячая перезагрузка Flutter, но я обнаружил, что состояние в моем BLoC не сохраняется. Он сбрасывается каждый раз, когда я выполняю горячую перезагрузку.

Есть ли способ сохранить это состояние, чтобы оно сохранялось после горячей перезагрузки? (звонок, к которому я могу подключиться, или что-то в этом роде?)

Спасибо за ваше время!


person albrnick    schedule 13.03.2019    source источник
comment
Скорее всего, это связано с stackoverflow .com / questions / 52249578 /   -  person Rémi Rousselet    schedule 13.03.2019
comment
Скорее всего, это происходит из-за того, что вы создаете свой BLoC в методе сборки виджета, хотя этого не следует делать, как описано в предыдущей ссылке.   -  person Rémi Rousselet    schedule 13.03.2019
comment
@ RémiRousselet ох! В этом есть смысл! Я покопаюсь. Спасибо! знак равно   -  person albrnick    schedule 13.03.2019


Ответы (1)


@ RémiRousselet был на высоте! Я сохранял состояние вне виджета с отслеживанием состояния! Для наглядности вот код до и после. (Реальные изменения находятся в параметре home: и _MyHomePageState.build)

Плохой код:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: BlocProvider<PandemicBloc>(
          bloc: PandemicBloc(), child: MyHomePage(title: 'Pandemic Tracker')),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final PandemicBloc pandemicBloc = BlocProvider.of<PandemicBloc>(context);
  int _currentTab = 0;

  Widget build(BuildContext context) {
    return DefaultTabController(...

Хороший код:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(title: 'Pandemic Tracker'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _currentTab = 0;
  final _pandemicBloc = PandemicBloc();

  Widget build(BuildContext context) {
    return BlocProvider<PandemicBloc>(
      bloc: _pandemicBloc,
      child: DefaultTabController(...
person albrnick    schedule 14.03.2019