Использование 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());