gpt4 book ai didi

flutter - 使用条件在Flutter中选择不同的小部件集

转载 作者:行者123 更新时间:2023-12-03 04:40:42 26 4
gpt4 key购买 nike

我正在关注Angela Yu的Flutter入门类(class),并扩展了Quizzler项目以应对个人挑战。在测验结束时,我给用户提供了一个重新开始(显示第一个问题屏幕)或结束游戏(显示“再见”屏幕)的机会。我有这个基本结构:

class _QuizPageState extends State<QuizPage> {
Widget selectContents() {
// getGameState() reads a boolean flag; false means user is quitting
// but a change from true to false is only detected
// when main.dart is saved in the IDE.
print('Game State: --------> ${quizBrain.getGameState()}');
return (quizBrain.getGameState()) ? QuizContents() : GoodbyeScreen();
}

@override
Widget build(BuildContext context) {
return Container(
child: selectContents(),
);
}
}
这是行不通的。当用户选择结束测验时,该选择不会注册,并且 QuizContents的最后一个屏幕仍然可见。当我进入IDE并简单地保存 main.dart时,该标记以某种方式更新(并且 print语句现在报告游戏状态的正确值),并且 GoodbyeScreen()出现在模拟器中。
此问题在StackOverflow上有许多版本和建议。我已经尝试了所有解决方案 herehere,包括:
  • 将三元运算符直接作为子代放到Container

  • 使用 Builder小部件而不是 Container
  • selectContents()函数放在build()_QuizPageState方法的内部和外部
  • 在匿名函数中使用if/else级联作为Container的子级
  • ...等

  • 这些都不起作用,并且行为保持不变。

    最佳答案

    这是一个状态管理问题。您尚未包括保存quizBrain的位置,但是如果它在_QuizPageState中,则在更改 bool(boolean) 值标志时调用setState应该可以解决此问题,否则永远不会重建该小部件。
    保存在IDE中会更新该值的原因是因为Flutter会执行热重装并重建一些(也许是全部)小部件。
    除了setState之外,还有许多其他状态管理方法。有趣的读物是Simple app state management。您的选择取决于应用程序的复杂性,但我想在这种情况下,setState应该足够了。

    关于flutter - 使用条件在Flutter中选择不同的小部件集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63311447/

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