Flutter Snapshot.hasData 总是返回 true

Posted

技术标签:

【中文标题】Flutter Snapshot.hasData 总是返回 true【英文标题】:Flutter Snapshot.hasData is always returning true 【发布时间】:2021-06-11 02:01:27 【问题描述】:

我需要从服务器获取数据,有时数据可能为空 logcat 的响应是数据snapshot.data 正在返回我的模型Instance of 'MyItems' 的实例,而当数据不可用时来自服务器的响应是


    "data": []

问题是 snapshot.hasData 对于空响应总是返回 true 我已经测试了 snapshot.data == null 仍然是 true。

模型类

import 'dart:convert';

MyItems myItemsFromJson(String str) => MyItems.fromJson(json.decode(str));

String myItemsToJson(MyItems data) => json.encode(data.toJson());

class MyItems 
  MyItems(
    this.dataa,
  );

  List<Datumm> dataa;

  factory MyItems.fromJson(Map<String, dynamic> json) => MyItems(
    dataa: List<Datumm>.from(json["data"].map((x) => Datumm.fromJson(x))),
  );

  Map<String, dynamic> toJson() => 
    "data": List<dynamic>.from(dataa.map((x) => x.toJson())),
  ;


class Datumm 
  Datumm(
    this.userId,
    this.Name,
    this.MiddelName,
  
  );

  String userId;
  String Name;
  String MiddelName;
 

  factory Datumm.fromJson(Map<String, dynamic> json) => Datumm(
    userId: json["user_id"],
    Name: json["Name"],
    MiddelName: json["MiddleName"],
  
  );

  Map<String, dynamic> toJson() => 
    "user_id": userId,
    "Name": crbtCode,
    "MiddelName": artistName,
    
  ;

我的未来 api 调用

 Future<MyItems> getUdata(String aName) async 
        var url =
            'https://cvbgng.com/test/$aName';
    
        final response = await http.get(url).timeout(Duration(seconds: 15000));
    
        if (response.statusCode == 200) 
    
         
          return MyItems.fromJson(json.decode(response.body));
         else 
          throw Exception('Faild to load');
        
      

【问题讨论】:

这是因为MyItems.fromJson 总是返回非null 值,无论如何,这有什么问题? @pskink 例如,如果没有数据,你如何报告有数据 snapshot.data.dataa.isEmpty / snapshot.data.dataa.isNotEmpty 【参考方案1】:

检查条件为snapshot.data.dataa.isEmpty,如果为真,则响应为空。

【讨论】:

以上是关于Flutter Snapshot.hasData 总是返回 true的主要内容,如果未能解决你的问题,请参考以下文章

StreamBuilder总是在flutter中的print(snapshot.hasData)中返回false

为啥文档不存在。但所有时间 !snapshot.hasData 都是假的

Document Stream snapshot.hasData 返回 true 但没有数据,如何解决这个问题?

尽管快照中有数据,Streambuilder snapshot.hasData 永远不会为真

Flutter StreamBuilder 在加载时删除旧数据

Listview在颤动中强制滚动到顶部