Flutter 如何在连接到api或使用StreamProvider.value()获取数据时显示闪烁
我有一个简单的小部件。我想有一个微光,而客户端仍然获取或连接到api 这是我正在挣扎的状况。我已经创建了shimmer小部件。在客户端完成抓取/连接后,如果没有找到英雄,则希望显示一个文本,以便客户端添加新英雄,如下所示Flutter 如何在连接到api或使用StreamProvider.value()获取数据时显示闪烁,flutter,dart,Flutter,Dart,我有一个简单的小部件。我想有一个微光,而客户端仍然获取或连接到api 这是我正在挣扎的状况。我已经创建了shimmer小部件。在客户端完成抓取/连接后,如果没有找到英雄,则希望显示一个文本,以便客户端添加新英雄,如下所示 class HeroesHomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return MultiProvider( provide
class HeroesHomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<List<Hero>>.value(
value: //...db_fetch_here...
),
//...other providers
],
child: HeroesScreen()
)
}
}
Hi根据文档,不希望使用StreamProvider.Value来传递值。尤其是当值易于更改时。检查文档。您可以提供初始值,然后按如下所示进行处理
class HeroesHomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<List<Hero>>.value(
value: //...db_fetch_here...
),
//...other providers
],
child: HeroesScreen()
)
}
}
类HeroesHomeScreen扩展了无状态小部件{
流getHeroesBuildContext上下文异步*{
//在这里取数据库
列出英雄=[
英雄
..id='1'
…名称='IronMan',
英雄
..id='2'
…姓名='CaptainAmerica',
];
等待未来。延迟持续时间秒:5;//模拟延迟。
屈服于英雄;
}
@凌驾
小部件构建上下文上下文{
回程多供应商
供应商:[
流提供者
创建:getHeroes,
initialData:null,
,
//…其他供应商
],
孩子:HeroesScreen,
;
}
}
相反,您可以检查传递给消费者小部件的数据,如下图所示,并决定渲染什么。这里我检查列表是否为空,并显示一个循环进度指示器
类HeroesScreen扩展了无状态小部件{
@凌驾
小部件构建上下文上下文{
返回容器
对齐:对齐.center,
儿童:消费者
生成器:上下文、列表英雄、子对象{
如果英雄==null
//用你的微光小部件替换退货
返回卡片子项:循环前进指示器;
返回ListView.builder
itemCount:heromes.length,
itemBuilder:上下文、索引{
回程卡
孩子:文本“我的英雄是英雄${heros[index].name}”,
;
},
;
},
,
;
}
}
你也能分享你的英雄吗class@SelimKundakçıoğlu我添加了英雄类。这只是一个简单的类。为什么你不能在等待数据时显示微光,并在数据加载后切换到英雄列表?谢谢你指出这一点。谢谢。所以在消费者小部件中,我可以检查英雄是否为空,然后显示某种文本“点击此处添加新英雄”,对吗?是的。如果您想直接使用流,那么可能应该使用StreamBuilder,您可以检查snapshot.connectionState==connectionState.Waiting然后显示一些微光,或者按照文档中的描述显示您的小部件。完美!我想这就是我要找的。非常感谢你!
class Hero {
String id;
String name;
}