FutureBuilder
是 Flutter 框架中的一个非常有用的组件,它允许开发者根据异步操作(通常是网络请求)的结果来构建 UI。以下是如何在 FutureBuilder
中呈现来自请求的数据的基础概念和相关步骤:
Future
表示一个可能还没有完成的异步操作的结果。Future
的状态(等待中、成功、失败)来构建不同 UI 的 Widget。FutureBuilder
允许 UI 自动更新以反映异步操作的结果。Future
状态构建不同的 UI。Future
还没有完成时的 UI。Future
成功返回数据时的 UI。Future
抛出异常时的 UI。假设我们有一个简单的 API 请求,我们将使用 FutureBuilder
来显示结果:
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FutureBuilder Example')),
body: FutureBuilderExample(),
),
);
}
}
class FutureBuilderExample extends StatelessWidget {
Future<String> fetchData() async {
final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts/1'));
if (response.statusCode == 200) {
return jsonDecode(response.body)['title'];
} else {
throw Exception('Failed to load data');
}
}
@override
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: fetchData(),
builder: (context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (snapshot.hasData) {
return Center(child: Text('Title: ${snapshot.data}'));
} else {
return Center(child: Text('No data found'));
}
},
);
}
}
future
属性正确设置,并且异步操作能够成功返回数据。snapshot.hasError
来捕获并显示错误信息。snapshot.connectionState == ConnectionState.waiting
来显示加载指示器。builder
函数中进行昂贵的计算,因为每次 Future
状态改变时它都会被调用。snapshot.hasError
并适当处理错误,以提供良好的用户体验。通过以上步骤和示例代码,你应该能够在 Flutter 应用中使用 FutureBuilder
来呈现来自请求的数据。
领取专属 10元无门槛券
手把手带您无忧上云