根据闭包上下文的要求,返回类型“动态”不是“布尔”

Posted

技术标签:

【中文标题】根据闭包上下文的要求,返回类型“动态”不是“布尔”【英文标题】:The return type 'dynamic' isn't a 'bool', as required by the closure's context 【发布时间】:2021-09-09 10:49:54 【问题描述】:

我正在我的颤振应用中实现搜索栏。但是_allUsers.where((user) => user["name"].toLowerCase().contains(enteredKeyword.toLowerCase())).toList(); 行抛出了一个错误:'返回类型 'dynamic' 不是 'bool',这是闭包上下文所要求的。' 有代码:

  final List<Map<String, dynamic>> _allUsers = [
    "id": 1, "name": "Andy", "type": "student",
    "id": 2, "name": "Aragon", "type": "student",
    "id": 3, "name": "Bob", "type": "student",
    "id": 4, "name": "Barbara", "type": "teacher",
    "id": 5, "name": "Candy", "type": 'student',
  ];
  void _runFilter(String enteredKeyword) 
    List<Map<String, dynamic>> results = [];
    if (enteredKeyword.isEmpty) 
      results = _allUsers;
     else 
      results = _allUsers.where((user) => user["name"].toLowerCase().contains(enteredKeyword.toLowerCase())).toList();
    
  

当我尝试在 dartpad.dev 中运行此代码时,它可以工作,但在 android Studio 中却不行。

【问题讨论】:

你确定你在同一行有错误吗?它对我有用。 【参考方案1】:

当您从地图中获取值时,请尝试添加演员表。现在,类型为dynamic(因为映射已以这种方式声明),这意味着类型安全被丢弃:

  void _runFilter(String enteredKeyword) 
    List<Map<String, dynamic>> results = [];
    if (enteredKeyword.isEmpty) 
      results = _allUsers;
     else 
      results = _allUsers
          .where((user) => (user["name"] as String)
              .toLowerCase()
              .contains(enteredKeyword.toLowerCase()))
          .toList();
    
  

【讨论】:

以上是关于根据闭包上下文的要求,返回类型“动态”不是“布尔”的主要内容,如果未能解决你的问题,请参考以下文章

根据闭包上下文的要求,返回类型“future<bool>”不是“Future<bool>”

FutureBuilder 错误:返回类型“对象?”不是闭包上下文所要求的“小部件”

SQLServer 空间查询返回错误在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'

SQL Server - 在“返回”附近的预期条件的上下文中指定的非布尔类型的表达式

作用域和闭包闭包

Java Script 什么是闭包?