我正在try 运行一个If-Else条件,该条件根据给定的条件显示某些图标.我正在try 查看列表中是否存在特定的quizID,即满足条件的字符串.由于某些原因,即使元素存在于列表中,条件似乎也不起作用.

我try 手动将quizid与特定字符串进行比较,结果很好.但一旦我把 list 放入条件,它就停止工作了.我发现quizID和list元素数据类型都是字符串,但它们仍然无法比较.

这是一段代码:

class QuizBadge extends StatelessWidget {
  const QuizBadge({super.key, required this.topic, required this.quizId});

  final Topic topic;
  final String quizId;

  @override
  Widget build(BuildContext context) {
    Report report = Provider.of<Report>(context);
    List completed = report.topics.values.toList();

    List a = completed.expand((element) => element).toList();
    print(a[1]);

    if (a[1] == "flutter-basics") {
      return const Icon(FontAwesomeIcons.checkDouble, color: Colors.green);
    } else {
      return const Icon(FontAwesomeIcons.solidCircle, color: Colors.grey);
    }
  }
}

任何帮助都将不胜感激.谢谢.

编辑后的代码片段:

  Widget build(BuildContext context) {
    Report report = Provider.of<Report>(context);

    List completed = report.topics[topic.id] ?? [];
    String str = completed.map((e) => e.toString()).join('-');

    if (str.contains(quizId)) {
      return const Icon(FontAwesomeIcons.checkDouble, color: Colors.green);
    } else {
      return const Icon(FontAwesomeIcons.solidCircle, color: Colors.grey);
    }
  }

这似乎奏效了.

推荐答案

发生这种情况是因为列表中的元素不是字符串.考虑判断report.topics.values.toList()返回的类型(我不能说,因为您没有包括它)和/或显式地将您期望为字符串的列表声明为List<String>,例如:

    List<String> a = completed.expand((element) => element).toList();

如果以这种方式声明,您将在该行上看到一个错误,并且该错误将提供线索.

通常,我倾向于避免在没有指定显式类型的情况下使用泛型,因为缺省值是dynamic,并且您不会得到静态类型判断的好处.您还可以通过使用var/final声明来维护显式类型,例如:

    var a = completed.expand((element) => element).toList();

后续行动

void main() {
  var completed = [["firestore-basics"], ["flutter-basics"], ["js-basics", "js-variables"], ["rxjs-basics"]];
  var a = completed.expand((element) => element).toList();
  print(a);
  bool contains = a.contains('flutter-basics');
  print('contains? = $contains');
}

输出:

[firestore-basics, flutter-basics, js-basics, js-variables, rxjs-basics]
contains? = true

Flutter相关问答推荐

在Flutter 中将参数从一个类传递到另一个类

如何在Ffltter Chrome应用程序中使用webview_fltter_web显示自定义html而不是外部uri?

什么是dart :这只是dart ?

缩短经常使用的行Theme.of(context).colorScheme

不要跨同步间隔使用BuildContext

Flutter Xcode 15 错误(Xcode):DT_TOOLCHAIN_DIR 无法用于判断 LIBRARY_SEARCH_PATHS

Riverpod Provider.family 和 HookConsumerWidget 不刷新 UI

如何使自动焦点位于已经有一些文本的 TextField 的第一行?

如何在flutter中实现这样的底部导航栏?

要禁用按钮上的通知声音,请点击Flutter

使用 Play Integrity API 时,Firebase 电话身份验证问题缺少客户端标识符错误

切换 Firebase 项目后 Flutter FirebaseAuthException 'configuration-not-found'

如何在两个不同的路由(屏幕)之间正确设置 BlocProvider?

如何流畅切换画面?

在 Flutter 中,您什么时候应该更喜欢Widget继承而不是组合?

CircleAvatar 在 ListTile 中领先

函数中的变量在 Dart 中应该有什么关键字?

在 FAB 上添加表格小部件单击 FLUTTER

我已经删除了我的 .android 密钥库,但我没有使用它,如何生成一个新的?

如何验证位于 PageView 内不同页面的 TextFormFields