【问题标题】:Flutter snapshot data is emptyFlutter 快照数据为空
【发布时间】:2020-03-19 11:45:20
【问题描述】:

我是 Flutter 新手,我尝试从 rest api 解析数据。 API 返回:

http://www.json-generator.com/api/json/get/cqwVqdOFrC?indent=2

例如。这里从 json api 获取数据,例如。长度为 3231

class ApiService {
  static Future<dynamic> _get(String url) async {
    try {
    final response = await http.get(url);

    var jsonData = json.decode(response.body);

    if (response.statusCode == 200) {
        print(response.body.length);  //3231
        return jsonData;

    } else {
            return null;
    }
    }
  }

但这里是 snapshot.hasData = False,为什么?

return Scaffold(
   appBar: AppBar(title: Text('Posts'),),
      body: FutureBuilder(
        future: ApiService.getUserList(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          print(snapshot.hasData.toString());  //False no data





static Future<List<dynamic>> getUserList() async {
    return await _get('${Urls.BASE_API_URL}');
  }

在 json 开头没有 items 一切正常。我的网络服务器在开始时返回项目。有什么解决办法吗?

【问题讨论】:

  • 我们可以看到getUserList() 的正文以及它返回的内容吗?
  • @suhaibsalem 添加到问题中!

标签: json flutter


【解决方案1】:

必须尝试调用,

future: ApiService.getUserList().then((onValue) {
                      return onValue;
                    }

【讨论】:

    【解决方案2】:

    api 返回Map&lt;String, dynamic&gt; 而不是&lt;List&lt;dynamic&gt;&gt;

    class ListaAbitudini extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        return new _ListaAbitudiniState();
      }
    }
    
    class _ListaAbitudiniState extends State<ListaAbitudini> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text('Posts'),
            ),
            body: FutureBuilder(
                future: ApiService.getUserList(),
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  if(snapshot.hasData)
                  print("True");
    
                  return Container();
                }));
      }
    }
    
    class ApiService {
      static Future<Map<String, dynamic>> getUserList() async {
        return await _get('http://www.json-generator.com/api/json/get/cqwVqdOFrC?indent=2');
      }
    
      static Future<dynamic> _get(String url) async {
        try {
          final response = await http.get(url);
    
          var jsonData = json.decode(response.body);
    
          if (response.statusCode == 200) {
            print(response.body.length); //3231
            return jsonData;
          } else {
            return null;
          }
        } catch (e) {
          print(e);
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      通常当hasError = true 时你得到hasData = false。尝试查找 snapahot 错误 (snapshot.error)

      【讨论】:

        猜你喜欢
        • 2020-04-12
        • 2021-12-26
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 2020-05-28
        • 2020-06-16
        • 2021-11-17
        相关资源
        最近更新 更多