Flutter异步编程详解
在Flutter中,异步编程通常涉及到Future
和async/await
关键字。以下是一个简单的例子,展示了如何在Flutter中使用异步编程来从网络获取数据。
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: AsyncHomePage(),
);
}
}
class AsyncHomePage extends StatefulWidget {
AsyncHomePage({Key key}) : super(key: key);
@override
_AsyncHomePageState createState() => _AsyncHomePageState();
}
class _AsyncHomePageState extends State<AsyncHomePage> {
String _data = "Loading...";
Future<void> _fetchData() async {
final response = await http.get(Uri.parse('https://example.com/api'));
if (response.statusCode == 200) {
setState(() {
_data = response.body;
});
} else {
setState(() {
_data = "Error: ${response.statusCode}";
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Async Programming Example"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text("Fetch Data"),
onPressed: _fetchData,
),
Text(_data),
],
),
),
);
}
}
在这个例子中,_AsyncHomePageState
类包含一个_fetchData
方法,它使用http
包从网络获取数据。这个方法是异步的,因为它返回一个Future
对象,这意味着它将在未来某个时间点完成。在build
方法中,我们有一个RaisedButton
,它在被按下时调用_fetchData
。_fetchData
使用await
关键字等待http.get
调用的结果,这样就不会阻塞UI线程。当数据获取完成后,我们使用setState
来更新UI上显示的数据。这样,用户界面可以响应用户输入,同时异步任务在后台执行。
评论已关闭