Flutter 颤振:将SliverAppbar与Column小部件组合

Flutter 颤振:将SliverAppbar与Column小部件组合,flutter,listview,sliverappbar,customscrollview,Flutter,Listview,Sliverappbar,Customscrollview,我正在尝试为一个应用程序创建一个事件页面,用户可以在其中查看带有横幅图像和一些其他有用信息的事件。我真的很喜欢实现带有横幅的滑动应用条,这样用户就可以滚动查看更多信息。为此,我似乎需要一个带有SliverAppBar和FlexibleSpaceBar的CustomScrollView 我在网上看到的所有教程都假设屏幕的其余部分应该是一个排序列表,但我更想要一个类似列的小部件。但是,列的高度没有限制,这会导致CustomScrollView中出现溢出错误。我可以用指定高度的容器包装它,但主体的内容

我正在尝试为一个应用程序创建一个事件页面,用户可以在其中查看带有横幅图像和一些其他有用信息的事件。我真的很喜欢实现带有横幅的滑动应用条,这样用户就可以滚动查看更多信息。为此,我似乎需要一个带有SliverAppBar和FlexibleSpaceBar的CustomScrollView

我在网上看到的所有教程都假设屏幕的其余部分应该是一个排序列表,但我更想要一个类似列的小部件。但是,列的高度没有限制,这会导致CustomScrollView中出现溢出错误。我可以用指定高度的容器包装它,但主体的内容物大小不一,所以这并不理想。有没有办法让滑动条和立柱并排工作

我想要的东西大致如下:

class ActivityPage extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(slivers: [
          SliverAppBar(
            flexibleSpace: FlexibleSpaceBar(
              background: Image(someImage),
            ),
            expandedHeight: Image,
            floating: false,
            pinned: true,
            snap: false,
          ),
          Column(
            children: [
              someChildren,
            ]
            ),
          )
        ]),
      ),
    );
  }

这应该是可能的,因为在我看来,这似乎是一种比较常见的模式,但我已经环顾了很多地方,我只能找到身体由列表组成的例子…

对于任何有同样挣扎的人来说:这是我刚刚找到的解决方案:

Widget build(BuildContext context) {
    return Scaffold(
      body: NestedScrollView(
        headerSliverBuilder:
            (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            SliverAppBar(
              backgroundColor: this.color,
              flexibleSpace: FlexibleSpaceBar(
              background: YourImage(),
              ),
            )
          ];
          },
        body: Container(
          child: Builder(builder: (context) {
            return Column(
              mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  WidgetOne(),
                  WidgetTwo()
                ]);
          })),
        ),
      )),
    );
  }

小部件构建(构建上下文){
返回脚手架(
正文:嵌套滚动视图(
班主任:
(BuildContext上下文,boolInnerBoxIsCrowled){
返回[
滑杆(
背景颜色:这个颜色,
flexibleSpace:FlexibleSpaceBar(
背景:YourImage(),
),
)
];
},
主体:容器(
子:生成器(生成器:(上下文){
返回列(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
WidgetOne(),
Widgetwo()
]);
})),
),
)),
);
}

对于有同样挣扎的人:以下是我刚刚找到的解决方案:

Widget build(BuildContext context) {
    return Scaffold(
      body: NestedScrollView(
        headerSliverBuilder:
            (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            SliverAppBar(
              backgroundColor: this.color,
              flexibleSpace: FlexibleSpaceBar(
              background: YourImage(),
              ),
            )
          ];
          },
        body: Container(
          child: Builder(builder: (context) {
            return Column(
              mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  WidgetOne(),
                  WidgetTwo()
                ]);
          })),
        ),
      )),
    );
  }

小部件构建(构建上下文){
返回脚手架(
正文:嵌套滚动视图(
班主任:
(BuildContext上下文,boolInnerBoxIsCrowled){
返回[
滑杆(
背景颜色:这个颜色,
flexibleSpace:FlexibleSpaceBar(
背景:YourImage(),
),
)
];
},
主体:容器(
子:生成器(生成器:(上下文){
返回列(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
WidgetOne(),
Widgetwo()
]);
})),
),
)),
);
}

使用列表视图而不是列。ListView具有动态大小

使用ListView而不是列。ListView具有动态大小