如何从 API 获取 json

How to get the json from API

我想做的是从 API 获取 json 并从 json 内容制作按钮。

API 响应没有改变,所以我只想调用一次。(重新加载小部件时不需要回忆)

所以,我的想法是简单地从 initState

调用 API
  Future<List> getSmartTags() async {
    var url = Uri.parse("http://localhost:8008/api/smarttags/");
    var resp = await http.get(url);
    return json.decode(resp.body);
  }

并想确认 json 是否正确返回。

  void initState() {
    super.initState();
    var temp = getSmartTags();
    print(temp);
  }

发生此错误。

[VERBOSE-2:ui_dart_state.cc(198)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'FutureOr<List<dynamic>>'
#0      _SmartTagState.getSmartTags (package:flutter_aic/main.dart:64:17)

我认为这是Future的基本概念,不过我没明白。

我认为每当你用 json 解码你的 html 正文而不是 List.

时你会得到一个 Map<String, dynamic>

此外,由于 await,您的 return 值不是 Future。每当请求完成时,最终值都会存储在您的变量 resp.

所以,理论上,它应该是这样工作的:

Map<String, dynamic> getSmartTags() async {
var url = Uri.parse("http://localhost:8008/api/smarttags/");
var resp = await http.get(url);
return json.decode(resp.body);

它会 return 一个 Future<Map<String, dynamic>> 而不是,当你写它时没有 wait

并且为了避免由于异步函数和外部 print() 而导致的更多错误,我建议您在函数内部打印 JSON 输出,而不是在 initState 中。