flutter - 返回不同的 StatefulWidgets 的方法在返回不同的小部件时不更新

标签 flutter dart

我有一个方法可以根据枚举的值返回两个有状态小部件之一。但是,即使我可以通过调试器看到正在返回“正确”的小部件,UI 也只会显示第一个呈现的小部件。状态对象似乎以某种方式在小部件的不同实例之间共享,或者我遗漏了一些东西。

Widget _buildInfoCard(LoginStatus status) {
    switch(status) {
        case LoginStatus.LOGIN_FAILED:
            return InfoCard("Login failed, please check your username and password.");
        default:
            return InfoCard("Please login with your username and password");
    }
}

我希望显示的信息卡的文本与返回的信息卡的文本相对应,但默认大小写始终存在。我已经逐步完成代码,返回了正确的小部件,之后没有返回默认小部件,因此应该显示,但没有显示。

编辑: _buildInfoCard 方法在 streambuilder 内部被调用。

最佳答案

您需要为 StatefulWidget 的每个实例提供一个 key ,否则它们可能会共享状态,如下所示:

Widget _buildInfoCard(LoginStatus status) {
  switch (status) {
    case LoginStatus.LOGIN_FAILED:
      return InfoCard(
        key: ValueKey(status),
        message: "Login failed, please check your username and password.",
      );
    default:
      return InfoCard(
        key: ValueKey(status),
        message: "Please login with your username and password",
      );
  }
}

关于我们为什么需要 key 的非常好的文章:https://medium.com/flutter/keys-what-are-they-good-for-13cb51742e7d

关于flutter - 返回不同的 StatefulWidgets 的方法在返回不同的小部件时不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56428502/

相关文章:

flutter - 有多个英雄在子树中共享相同的标签

flutter - Streambuilder 只触发一次

android - 在位于 Flutter 的 Column 小部件中的 Row 小部件中将 TextField 包裹在 Flexible 中居中

flutter - 发生更改时,TextFormField光标没有移动

string - Dart tryParse double vs string of double

flutter - 是否有Dart函数来检查对象是否具有特定的属性或方法?

dart - Flutter中 "context"的 "Widget build(BuildContext context)"是什么意思?

使用 flogs 的 Flutter 日志 - 它将保存在哪里

dart - 具有水平和垂直中心对齐分隔线的 GridView

android - Flutter Android后退按钮导航回主页