dart 如果有空格,则将“CustomScrollView”居中

r3i60tvu  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(68)

我有folowing code

return Scaffold(
      body: CustomScrollView(
          physics: const AlwaysScrollableScrollPhysics(
            parent: BouncingScrollPhysics(),
          ),
          controller: controller,
          slivers: [
            SliverToBoxAdapter(
              child: Center(
                child: Padding(
                  padding: const EdgeInsets.symmetric(vertical: 64),
                  child: Text(
                    'Title',
                    style: theme.textTheme.titleLarge?.copyWith(
                      fontWeight: FontWeight.bold,
                      color: theme.colorScheme.onPrimary,
                    ),
                  ),
                ),
              ),
            ),
            SliverList.builder(
              itemCount: tiles.length,
              itemBuilder: (context, index) {
                final text = tiles[index];
                return Card(
                  margin: const EdgeInsets.symmetric(
                    horizontal: 24,
                    vertical: 8,
                  ),
                  child: ListTile(
                    title: Text(
                      text,
                      style: theme.textTheme.bodyLarge,
                    ),
                  ),
                );
              },
            ),
          ],
        ),
    );

字符串
这导致我的布局输出在我的手机上是这样的:


的数据
我想要的是一种方法,把一切都集中在如果所有适合屏幕,否则继续是。



是否可以使用Slivers做类似的事情?我想要他们,因为我想的标题反弹和滚动的项目时,他们滚动。

epfja78i

epfja78i1#

与ListView类似,CustomScrollView有一个shrinkWrap变量,当设置为true时,将尝试最小化滚动区域的高度。
脚手架的默认对齐方式是左上角,所以一旦你收缩滚动视图,你就需要添加中心部件作为它的父部件,以获得你想要的中心对齐方式。代码看起来像这样:

return Scaffold(
      body: Center(
        child: CustomScrollView(
          shrinkWrap: true,
          physics: AlwaysScrollableScrollPhysics(
            parent: BouncingScrollPhysics(),
          ),
          controller: controller,
          slivers: [
            SliverToBoxAdapter(
              child: Center(
                child: Padding(
                  padding: EdgeInsets.symmetric(vertical: 64),
                  child: Text(
                    'Title',
                    style: theme.textTheme.titleLarge?.copyWith(
                      fontWeight: FontWeight.bold,
                      color: theme.colorScheme.onPrimary,
                    ),
                  ),
                ),
              ),
            ),
            SliverList.builder(
              itemCount: tiles.length,
              itemBuilder: (context, index) {
                final text = tiles[index];
                return Card(
                  margin: const EdgeInsets.symmetric(
                    horizontal: 24,
                    vertical: 8,
                  ),
                  child: ListTile(
                    title: Text(
                      text,
                      style: theme.textTheme.bodyLarge,
                    ),
                  ),
                );
              },
            ),
          ],
        ),
      ),
    );

字符串

相关问题