【问题标题】:Flutter compute method and filter results in jsonFlutter 计算方法和过滤结果在 json 中
【发布时间】:2021-05-17 17:06:25
【问题描述】:

我是 Flutter 的一个非常新鲜的开发者,我正在尝试根据标题过滤结果以生成 json 响应。 我想使用计算方法。这种方法只允许 2 个参数,所以我认为我需要使用映射来获取 response.body 和过滤查询。

这是我的 HttpService :

class HttpService {
  
  static List<Post> _parsePosts(Map map) {
    print(map);

    return map["body"].map((json) => Post.fromJson(json)).where((post) {
      final titleLower = post.title.toLowerCase();
      final queryLower = map["query"].toLowerCase();
      return titleLower.contains(queryLower);

    }).toList();
  }

  static Future<List<Post>> fetchPosts(String query) async {
    final uri = Uri.parse('https://jsonplaceholder.typicode.com/posts');
    final response = await retry(    
      () => http.get(uri).timeout(Duration(seconds: 10)),    
      retryIf: (e) => e is SocketException || e is TimeoutException,
    );

    Map posts = new Map();
    
    posts["body"] = json.decode(response.body);
    posts["query"] = query;

    if (response.statusCode == 200) {
      return compute(_parsePosts, posts);
    } else {
      
      throw Exception("Failed to load posts ${response.statusCode}");
    }
  }

}

打印(地图);包含带有值的地图 -> https://prnt.sc/131ldey

但问题报告在:return map["body"].map((json) =&gt; Post.fromJson(json)).where((post) {

与:_TypeError (type '(dynamic) =&gt; dynamic' is not a subtype of type '(dynamic) =&gt; bool' of 'test')

我真的不明白这个错误的原因是什么..

【问题讨论】:

    标签: json flutter dart


    【解决方案1】:

    您的 titleLower 未转换为 String 类型!所以 contains 方法返回一个动态值,因为它没有作为 VM 的 String 类型的 contains 方法出现!

    final String myValue = ...;
    return myValue.contains(‘a’);
    

    【讨论】:

    • 感谢您的帮助,它似乎修复了这个错误,但在 toList() 中出现了另一个错误:TypeError (type 'List' is not a subtype of type 'List')我试图设置 "map["body"].map((json)" 但产生相同的
    • 您确定问题来自那里吗?它不是来自返回计算吗?尝试指定计算方法的类型(compute>)
    • 既然我的回答对你有用,你能接受吗:)
    • 指定计算方法的类型不会改变任何事情:prnt.sc/131mjhp 错误修复后我会接受,它们都与同一个方法有关
    • 很公平,如果您确实将返回的值存储在强类型变量中,然后返回相同的变量呢?
    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 2021-07-22
    • 1970-01-01
    • 2020-01-28
    • 2017-01-23
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    相关资源
    最近更新 更多