Flutter可滚动组件SingleChildScrollView

当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter则会提示Overflow错误。因此,Flutter提供了多种可滚动组件(Scrollable Widget)用于显示列表和长布局。

可滚动组件都直接或间接包含一个Scrollable组件。

Scrollable({
  this.axisDirection = AxisDirection.down,
  this.controller,
  this.physics,
})
axisDirection

滚动方向。

physics

默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果。

ClampingScrollPhysics:Android下微光效果。
BouncingScrollPhysics:iOS下弹性效果。
controller:

此属性接受一个ScrollController对象。ScrollController的主要作用是控制滚动位置和监听滚动事件。默认情况下,Widget树中会有一个默认的PrimaryScrollController,如果子树中的可滚动组件没有显式的指定controller,并且primary属性值为true时(默认就为true),可滚动组件会使用这个默认的PrimaryScrollController。

Scrollbar

Scrollbar是一个Material风格的滚动指示器(滚动条),如果要给可滚动组件添加滚动条,只需将Scrollbar作为可滚动组件的任意一个父级组件即可

Scrollbar(
  child: SingleChildScrollView(
    ...
  ),
);
CupertinoScrollbar

CupertinoScrollbar是iOS风格的滚动条,如果你使用的是Scrollbar,那么在iOS平台它会自动切换为CupertinoScrollbar。

ViewPort

在Flutter中,术语ViewPort(视口),如无特别说明,则是指一个Widget的实际显示区域。

基于Sliver的延迟构建

可滚动组件的子组件可能会非常多、占用的总高度也会非常大;一个可滚动组件支持Sliver模型,那么该滚动可以将子组件分成好多个“薄片”(Sliver),只有当Sliver出现在视口中时才会去构建它,这种模型也称为“基于Sliver的延迟构建模型”。

SingleChildScrollView

SingleChildScrollView类似于Android中的ScrollView,它只能接收一个子组件

reverse:

是否按照阅读方向相反的方向滑动

primary:

指是否使用widget树中默认的PrimaryScrollController;当滑动方向为垂直方向(scrollDirection值为Axis.vertical)并且没有指定controller时,primary默认为true.

import 'package:flutter/material.dart';

class StudySingleChildScrollView extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    String letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZXYZNYCABCDEFG";

    return Scaffold(
      appBar: AppBar(
        title: Text("SingleChildScrollView"),
      ),
      body: Scrollbar(//显示滚动条
        child: SingleChildScrollView(
          padding: const EdgeInsets.all(10),
          child:Container(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: letter.split("").map((e) => Text(e,style: TextStyle(
                fontSize: 36,
              ),)).toList(),
            ),
            width: double.infinity,
          ),

        ),
      ),
    );
  }

}

效果
在这里插入图片描述
通常SingleChildScrollView只应在内容不会超过屏幕太多时使用,因为SingleChildScrollView不支持基于Sliver的延迟实例化模型,所以如果预计视口可能包含超出屏幕尺寸太多的内容时,不建议使用SingleChildScrollView。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值