簡體   English   中英

Flutter:如何從響應 API 顯示數據 HTML 結果?

[英]Flutter : How to show data HTML result from response API?

大家好,我有一個 HTML 格式的響應數據,我想管理要在屏幕上顯示的數據。 我使用庫flutter_html

這是我的代碼

Future<String> getHtml() async {
var headers = {
  'Cookie': 'ci_session=hgiugh'
};
var request = http.MultipartRequest('POST', Uri.parse('http://xxx/get'));
request.fields.addAll({
  '': '',
});

request.headers.addAll(headers);

final http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
  print("HTML_RESULT"+await response.stream.bytesToString());
}
else {
  print(response.reasonPhrase);
}

return await response.stream.bytesToString();}

我有 HTML,但是當我想展示它時,我得到instance of 'Future'

顯示數據的代碼

var i;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    i = getHtml();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Center(
          child: Html(
            data: i.toString(),
          ),
        ),
      ),
    );
  }

請給我一個幫助伙計們,任何參考對我都很重要,謝謝。

嘗試更改

final http.StreamedResponse response = await request.send();

為了:

http.Response response = await http.Response.fromStream(await request.send());

您也必須等待 getHtml(),但不能直接在 init 上執行。

void loadResponse() async {
    final response = await getHtml();
    setState(() {
        i = response;
    });
}

然后調用 init() 上的方法:

@override
void initState() {
  // TODO: implement initState
  super.initState();
  loadResponse();
}

將此行提取為單獨的代碼

print("HTML_RESULT"+await response.stream.bytesToString());

喜歡

var responseString = await response.stream.bytesToString();
print("HTML_RESULT $responseString");

編輯:

正如@Mariano所說,您需要創建新功能

void load() async {
    ... do your await here
    ... and after you got the value call
    setState(() {
        ... set your value here
    });
}

並從 initState 調用該函數

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    load();
  }
   if (responseString == null ||
        responseString.contains("A PHP Error was encountered") ||
        responseString.contains("<div") ||
        responseString.contains("</html")) {
      Fluttertoast.showToast(
          msg: "Server Error",
          toastLength: Toast.LENGTH_SHORT,
          gravity: ToastGravity.CENTER,
          timeInSecForIosWeb: 1,
          backgroundColor: Colors.red,
          textColor: Colors.white,
          fontSize: 16.0);

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM