如何在 Flutter 中 return 多个 sliver widgets?

How to return multiple sliver widgets in Flutter?

我正在使用 Slivers 和 Provider 构建一个 Flutter 应用程序。

Widget build(BuildContext context) {
  return CustomScrollView(
    slivers: [
      SliverAppBar(),
      Consumer<CustomerController>(
        builder: (context, model, child) {
          if (model.loading) {
            return Loading();
          }
          else {
            return Header();
            return Saved();
            return Recommendations();
          }
        },
      ),
    ],
  );
}

基本上在我的应用程序中,SliverAppBar 始终显示。

现在,根据模型的加载状态,需要渲染其余的条形小部件。但我只能使用 return 一次,它不会呈现已保存和推荐小部件。

如何解决这个问题?我如何 return 在 else 块中指定的所有条子小部件?

为了显示所有三个条子,您必须将 Consumer 小部件设为父小部件。看看下面的代码。

 Widget build(BuildContext context) {
    return Consumer<CustomerController>(
      builder: (context, model, child) {
        if (model.loading) {
          return Loading();
        } else {
          return CustomScrollView(slivers: [
            SliverAppBar(),
            Header(),
            Saved(),
            Recommendations(),
          ]);
        }
      },
    );
  }

我用过这个方便的包 - sliver_tools

并这样使用

Widget build(BuildContext context) {
  return CustomScrollView(
    slivers: [
      SliverAppBar(),
      Consumer<CustomerController>(
        builder: (context, model, child) {
          if (model.loading) {
            return Loading();
          }
          else {
            return MultiSliver(
              children: [
                Header(),
                Saved(),
                Recommendations(),
              ],
            };
          }
        },
      ),
    ],
  );
}