Flutter 如何在连接到api或使用StreamProvider.value()获取数据时显示闪烁

Flutter 如何在连接到api或使用StreamProvider.value()获取数据时显示闪烁,flutter,dart,Flutter,Dart,我有一个简单的小部件。我想有一个微光,而客户端仍然获取或连接到api 这是我正在挣扎的状况。我已经创建了shimmer小部件。在客户端完成抓取/连接后,如果没有找到英雄,则希望显示一个文本,以便客户端添加新英雄,如下所示 class HeroesHomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return MultiProvider( provide

我有一个简单的小部件。我想有一个微光,而客户端仍然获取或连接到api

这是我正在挣扎的状况。我已经创建了shimmer小部件。在客户端完成抓取/连接后,如果没有找到英雄,则希望显示一个文本,以便客户端添加新英雄,如下所示

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;
}