gpt4 book ai didi

flutter - BLoC:多次调用监听回调

转载 作者:IT王子 更新时间:2023-10-29 07:11:18 26 4
gpt4 key购买 nike

我有一个有状态的小部件,它从其父级获取一个 block :

class Page extends StatefulWidget {
@override
State<StatefulWidget> createState() =>
_PageState();
}

class _PageState extends State<Page> {
final TextEditingController mnemonicController = TextEditingController();
final _scaffoldKey = GlobalKey<ScaffoldState>();

@override
Widget build(BuildContext context) {

final MnemonicLogicBloc mnemonicLogicBloc =
BlocProvider.of<MnemonicLogicBloc>(context);

mnemonicLogicBloc.outCheckMnemonic.listen((isCorrect){
if (!isCorrect) {
SnackBar copySnack = SnackBar(content: Text('Wrong Mnemonic!'));
_scaffoldKey.currentState.showSnackBar(copySnack);
}
});

return Scaffold(
key: _scaffoldKey,
body: Container(
width: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
child: TextField(
controller: mnemonicController,
),
),
RaisedButton(
onPressed: () {
mnemonicLogicBloc.isMnemonicCorrect(mnemonicController.text);
},
child: Text('Check', style: TextStyle(color: Colors.white)),
)
],
),
));
}
}

我想做的是在用户按下按钮时检查插入的字符串是否正确。我在bloc中调用的方法是:

void isMnemonicCorrect(String typedMnemonic){
if(typedMnemonic == _lastGeneratedMnemonic)
_inCheckMnemonic.add(true);
else
_inCheckMnemonic.add(false);
}

_inCheckMnemonic 是我的主题的接收器(我正在使用 rxDart),而 outCheckMnemonic 是我的流。问题在于,即使 bloc 的“isCorrect”方法被调用一次,监听回调也会被调用两次(SnackBar 显示两次)。为什么会这样?

编辑:我使用 Navigator.push 导航到 Page():

Navigator.of(context).push(MaterialPageRoute(
builder: (BuildContext context) {
return Page();
}));

我能够检索 bloc,因为当我的应用程序启动时,我初始化了 bloc:

return runApp(BlocProvider<ApplicationBloc>(
bloc: ApplicationBloc(),
child: BlocProvider<MnemonicLogicBloc>(
bloc: MnemonicLogicBloc(),
child: BlocProvider<HomePageBloc>(
bloc: HomePageBloc(),
child: App(),
),
)

));

最佳答案

当您在 Navigator 中添加新的 Widget 时,避免在生成器中创建该小部件,而是在外部声明一个变量并在您的生成器中重用该变量,如下所示:

final page = Page();
Navigator.of(context).push(MaterialPageRoute(
builder: (BuildContext context) => page ), );

通过此更改,我们避免了以意想不到的方式多次重新创建小部件。

关于flutter - BLoC:多次调用监听回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56519093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com