FutureWidget
简介
FutureWidget 是在您的 Nylo Website 项目中渲染 Future 的简便方式。它包装了 Flutter 的 FutureBuilder 并提供了更简洁的 API 以及内置的加载状态。
当 Future 正在处理中时,它会显示一个加载器。一旦 Future 完成,数据将通过 child 回调返回。
基本用法
以下是使用 FutureWidget 的简单示例:
// A Future that takes 3 seconds to complete
Future<String> _findUserName() async {
await sleep(3); // wait for 3 seconds
return "John Doe";
}
// Use the FutureWidget
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: FutureWidget<String>(
future: _findUserName(),
child: (context, data) {
// data = "John Doe"
return Text(data!);
},
),
),
);
}
该组件会自动为用户处理加载状态,直到 Future 完成。
自定义加载状态
您可以使用 loadingStyle 参数自定义加载状态的显示方式。
普通加载样式
使用 LoadingStyle.normal() 显示标准加载组件。您可以选择提供自定义子组件:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
loadingStyle: LoadingStyle.normal(
child: Text("Loading..."), // custom loading widget
),
)
如果未提供子组件,将显示默认的 Nylo Website 应用加载器。
骨架屏加载样式
使用 LoadingStyle.skeletonizer() 显示骨架屏加载效果。这非常适合显示与内容布局匹配的占位 UI:
FutureWidget<User>(
future: _fetchUser(),
child: (context, user) {
return UserCard(user: user!);
},
loadingStyle: LoadingStyle.skeletonizer(
child: UserCard(user: User.placeholder()), // skeleton placeholder
effect: SkeletonizerEffect.shimmer, // shimmer, pulse, or solid
),
)
可用的骨架屏效果:
SkeletonizerEffect.shimmer- 动画闪光效果(默认)SkeletonizerEffect.pulse- 脉冲动画效果SkeletonizerEffect.solid- 纯色效果
无加载样式
使用 LoadingStyle.none() 完全隐藏加载指示器:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
loadingStyle: LoadingStyle.none(),
)
错误处理
您可以使用 onError 回调处理 Future 中的错误:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
onError: (AsyncSnapshot snapshot) {
print(snapshot.error.toString());
return Text("Something went wrong");
},
)
如果未提供 onError 回调且发生错误,将显示一个空的 SizedBox.shrink()。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
future |
Future<T>? |
要等待的 Future |
child |
Widget Function(BuildContext, T?) |
Future 完成时调用的构建函数 |
loadingStyle |
LoadingStyle? |
自定义加载指示器 |
onError |
Widget Function(AsyncSnapshot)? |
Future 出错时调用的构建函数 |