Поток флаттера: метод прослушивания действия вызывается несколько раз - PullRequest
0 голосов
/ 27 ноября 2018

Использование Flutter Flux 4.1.2

Если метод прослушивает действие, то в первый раз он получает удар один раз, а в следующий раз, если пользователь возвращается на ту же страницу, тогда метод получает удар дваждыи в третий раз его в 3 раза и увеличивается каждый раз.

Ниже приведен код, имитирующий то же самое при нажатии кнопки Далее вызывается действие и при изменении действия пользователь переносится на вторую страницу, но во второй разметод слушания действия получает удар дважды.Кто-нибудь может решить это или направить меня, если я что-то упустил.

    import 'package:flutter/material.dart';
    import 'package:flutter_flux/flutter_flux.dart';

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

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: MyHome(),
        );
      }
    }
    //========
    class MyHome extends StatefulWidget {
      @override
      _MyHomeState createState() => _MyHomeState();
    }

    class _MyHomeState extends State<MyHome> with StoreWatcherMixin<MyHome>  {
      AppStore store;
      @override
      void initState() {
        store = listenToStore(appStoreToken);
        changeStatus.listen(_openSetupDialogue);
        super.initState();
      }

      void _openSetupDialogue(dynamic payload){
        if(payload == true) {
          print("method got hit");
          Navigator.push(context, MaterialPageRoute(builder: (context) => SecondPage()));
        }
      }

      @override
      Widget build(BuildContext context) {
        return RaisedButton(
          child: Text("Next"),
          onPressed: (){
            changeStatus(true);
          },
        );
      }
    }
    //===========
    class SecondPage extends StatefulWidget {
      @override
      _SecondPageState createState() => _SecondPageState();
    }

    class _SecondPageState extends State<SecondPage> {
      @override
      Widget build(BuildContext context) {
        return RaisedButton(
          child: Text("back"),
          onPressed: (){Navigator.push(context, MaterialPageRoute(builder: (context) =>MyHome()),
            );
          },
        );
      }
    }
    //===========
    class AppStore extends Store {
      bool state = true;
      AppStore(){
        triggerOnAction(changeStatus, (status){
          state = status;
        });
      }
      bool get getAppStore => state;
    }
    final Action changeStatus = Action<bool>();
    final appStoreToken = StoreToken(AppStore());
...