【发布时间】:2022-01-20 08:04:22
【问题描述】:
我在使用提供程序时感到困惑。一些开发者在打开应用程序屏幕时使用 FutureBuilder 获取 API,如下所示
var provider = locator<AppIntroProvider>(); //GetIt Dependancy Infection
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder(
future: provider.getAppIntroItems(),
builder: (context, AsyncSnapshot<dynamic> snapshot) => snapshot
.data ==
null
? Container(
color: Colors.red,
) : MyDataListWidget(),
),
);
}
但我在 InitState 中实现 API 调用并使用 Consumer 监听数据,就像这样。
var provider = locator<AppIntroProvider>(); //GetIt DI
@override
void initState() {
provider.getAppIntroItems();
super.initState();
}
@override
Widget build(BuildContext context) {
//provider = Provider.of<AppIntroProvider>(context); //If I don't use GetIt DI
return Scaffold(
body: Consumer<AppIntroProvider>(
builder: (context, appInfoProvider, child) => appInfoProvider
.appIntroItemsDao ==
null
? Container(
color: Colors.red,
)
: MyDataListWidget(),
),
);
}
我的问题是
- 使用 FutureBuilder 而不是 Consumer 的目的是什么?
- 有什么不同?
- 什么是实现 API 调用的正确和更有效的方法?
【问题讨论】: