- 关键代码片段:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _data = '';
@override
void initState() {
super.initState();
_fetchData();
}
Future<void> _fetchData() async {
try {
final response = await http.get(Uri.parse('https://example.com/api/data'));
if (response.statusCode == 200) {
setState(() {
_data = response.body;
});
} else {
print('Request failed with status: ${response.statusCode}.');
}
} catch (e) {
print('Error: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Async Data Fetching'),
),
body: Center(
child: Text(_data),
),
);
}
}
- 代码解释:
- 导入必要的库:
import 'package:flutter/material.dart';
导入Flutter的UI库,用于构建用户界面。
import 'package:http/http.dart' as http;
导入HTTP库,用于进行网络请求。
- 定义页面状态类:
MyHomePage
是一个继承自 StatefulWidget
的类,它是页面的顶层组件。
_MyHomePageState
继承自 State<MyHomePage>
,用于管理页面的状态。这里定义了一个 _data
变量,用于存储从网络获取的数据。
- 初始化数据:
- 在
initState
方法中,调用 _fetchData
方法来开始异步获取数据。initState
方法在State对象插入到树中时被调用,只会调用一次。
- 异步获取数据方法:
_fetchData
是一个异步方法,使用 async
关键字声明。
final response = await http.get(Uri.parse('https://example.com/api/data'));
:使用 http.get
方法发送HTTP GET请求到指定的URL。await
关键字会暂停当前方法的执行,直到 http.get
返回一个响应,确保请求完成后再继续执行后续代码。
if (response.statusCode == 200)
:检查响应的状态码,如果是200,表示请求成功。
setState(() { _data = response.body; });
:在状态改变时,调用 setState
方法通知Flutter框架状态发生了变化,Flutter会重新构建UI,从而显示新获取的数据。
- 如果状态码不是200或者发生异常,会在控制台打印相应的错误信息。
- 构建UI:
- 在
build
方法中,构建一个简单的 Scaffold
,其中 Center
组件内的 Text
显示获取到的数据 _data
。在初始状态下,_data
为空字符串,获取数据成功后,_data
更新并重新构建UI显示数据。