【flutter】如何在flutter中正确使用http请求的数据?

问题描述

在widget中使用http请求的数据,应用显示会出红屏,widget不同提示不同,总之都是表示没有数据传入。只有在热重载两次后才能正确显示。
报错如下:Failed assertion:line x pos y:'data != null'
【flutter】如何在flutter中正确使用http请求的数据?
【flutter】如何在flutter中正确使用http请求的数据?

问题出现的环境背景及自己尝试过哪些方法

原本我直接在statelesswidget里面返回Markdown(data:data.string,),发现问题后该用FutureBuilder来先处理http请求,等请求完成再渲染,但是这样写好像并不对,问题依旧,我甚至看不到定义的内容为loading的text widget。有考虑是不是应该用statefulwidget,但是也没有用。

相关代码

import 'package:flutter/material.dart';

import 'package:flutter_markdown/flutter_markdown.dart';

import 'package:http/http.dart' as http;

void main() => runApp(MyApp());

class DataTest {//处理http请求

var url = 'http://xxx/tips/cardiac-arrest.md';

var client = http.Client();

String string;

DataTest() {

getClient();

}

Future getClient() async {

client.get(url).then((http.Response response) {

if (response.statusCode == 200) {

string = response.body.toString();

} else {

print('erro');

}

});

}

}

class MyApp extends StatelessWidget {

// This widget is the root of your application.

@override

Widget build(BuildContext context) {

return MaterialApp(

title: 'Flutter HTTP Test',

theme: ThemeData(

primarySwatch: Colors.blue,

),

home: Scaffold(

appBar: AppBar(

title: Text('客户端请求HTTP测试'),

),

body: Center(

child: MyStatefulWidget(),

),

),

);

}

}

class MyStatefulWidget extends StatefulWidget{

@override

MyState createState() => MyState();

}

class MyState extends State<MyStatefulWidget>{

var data = new DataTest();

@override

Widget build(BuildContext context){

return FutureBuilder(

future: data.getClient(),

builder: (BuildContext context, AsyncSnapshot snapshot) {

print('data:${snapshot.data}');

print('connectionState:${snapshot.connectionState}');

if (snapshot.connectionState == ConnectionState.waiting) {

return Text('loading...');

} else {

return Markdown(data:data.string,);

}

},

);

}

}

你期待的结果是什么?实际看到的错误信息又是什么?

我的服务端会返回md格式的字符串,我想在页面上用markdown插件渲染出来,但是问题并不在markdown上,因为text widget也是一样的效果。

回答

以上是 【flutter】如何在flutter中正确使用http请求的数据? 的全部内容, 来源链接: utcz.com/a/84203.html

回到顶部