Tilt widget

了解 Tilt widget 参数。 Tilt widget 默认有倾斜、阴影和光照的效果。

手势优先级

启用多个手势时,会按照优先级触发手势:

Touch > Hover > Controller > Sensors

Tilt widget 参数

参数名类型默认值描述
child 必选Widget-创建一个 widget,使 child widget 有倾斜效果。
childLayoutChildLayoutChildLayout()其它 child 布局。
例如:位于 child 外部、内部、后面的视差布局。
tiltStreamControllerStreamController<TiltStreamModel>?null使用 StreamController<TiltStreamModel>.broadcast() 来自定义控制倾斜。
disableboolfalse禁用所有效果。
fpsint120手势触发的帧数。
borderBoxBorder?nullBoxDecoration border。
borderRadiusBorderRadiusGeometry?nullBoxDecoration borderRadius。
clipBehaviorClipClip.antiAliasFlutter 中的 clipBehavior。
tiltConfigTiltConfigTiltConfig()倾斜效果配置。
lightShadowModeLightShadowModeLightShadowMode.base光影 Mode。
lightConfigLightConfigLightConfig()光照效果配置。
shadowConfigShadowConfigShadowConfig()阴影效果配置。
onGestureMovevoid Function(TiltDataModel, GesturesType)?null手势移动的回调触发。
onGestureLeavevoid Function(TiltDataModel, GesturesType)?null手势离开的回调触发。

ChildLayout

参数名类型默认值描述
outerList<Widget><Widget>[]与 Stack 一样,你可以使用 Stack 布局来创建一些位于 child 外部 的 widget。
例如:视差效果。
innerList<Widget><Widget>[]与 Stack 一样,你可以使用 Stack 布局来创建一些位于 child 内部 的 widget。
例如:视差效果。
behindList<Widget><Widget>[]与 Stack 一样,你可以使用 Stack 布局来创建一些位于 child 后面 的 widget。
例如:视差效果。

StreamController<TiltStreamModel>

final StreamController<TiltStreamModel> tiltStreamController = StreamController<TiltStreamModel>.broadcast();

/// 正在使用当前手势
tiltStreamController.add(
  TiltStreamModel(
    position: Offset(xx, xx),
  ),
);

/// 停止使用当前手势
tiltStreamController.add(
  TiltStreamModel(
    position: Offset(xx, xx),
    gestureUse: false,
  ),
);


参数名类型默认值描述
position 必选Offset-当前触发的坐标位置,
会触发对应位置的倾斜效果。
例如:
有一个组件尺寸为 width: 10, height: 10,
(0, 0):会触发最左上的倾斜。
(10, 10):会触发最右下的倾斜。
gesturesTypeGesturesTypeGesturesType.controller触发手势类型。
会根据 手势优先级 进行触发。
如果需要自定义动画或其他方式自行控制,
推荐 使用 GesturesType.controller
如果使用其他的类型进行触发,
那么就会受到对应类型相关配置、效果的影响。
例如:
自行触发 GesturesType.sensors 的时候。
配置 TiltConfig.enableSensorRevert 为 false 的情况下,
将同样不会复原至初始状态。
gestureUsebooltrue手势是否正在使用。
用于确定手势是否正在使用,并根据手势优先级进行处理。
例如:
如果在触发 GesturesType.touch 的时候永远不赋值为 false,那么优先级低于 GesturesType.touch 的手势将永远不会被触发。

TiltConfig

参数名类型默认值描述
disableboolfalse仅禁用倾斜效果。
initialOffset?null倾斜进度的初始值,范围 (x, y):(1, 1) 至 (-1, -1)
你可以超过这个范围,但是手势移动过程中的最大倾斜角度始终按照 [TiltConfig.angle] 进行倾斜。
例如:(0.0, 0.0) 中心
(1.0, 1.0) 左上角最大倾斜角度 [TiltConfig.angle]
angledouble10.0最大倾斜角度。
例如:180 会翻转。
directionList<TiltDirection>?null倾斜方向,多方向、自定义方向值。
enableReverseboolfalse倾斜反向,可以向上或向下倾斜。
filterQualityFilterQualitynullFlutter FilterQuality。
enableGestureSensorsbooltrue陀螺仪传感器触发倾斜。
仅以下手势生效:
GesturesType.sensors
sensorFactordouble10.0传感器触发系数(灵敏度)。
仅以下手势生效:
GesturesType.sensors
enableSensorRevertbooltrue启用传感器倾斜复原,会复原至初始状态。
仅以下手势生效:
GesturesType.sensors
sensorRevertFactordouble0.05传感器复原系数(阻尼),数值范围:0-1
仅以下手势生效:
GesturesType.sensors
sensorMoveDurationDurationDuration(milliseconds: 50)传感器移动时的动画持续时间。
仅以下手势生效:
GesturesType.sensors
enableGestureHoverbooltrueHover 手势触发倾斜。
仅以下手势生效:
GesturesType.hover
enableGestureTouchbooltrueTouch 手势触发倾斜。
仅以下手势生效:
GesturesType.touch
enableRevertbooltrue启用倾斜复原,会复原至初始状态。
仅以下手势生效:
GesturesType.touch
GesturesType.hover
GesturesType.controller
enableOutsideAreaMovebooltrue可以继续在区域外触发倾斜。
仅以下手势生效:
GesturesType.touch
GesturesType.controller
enterDurationDurationDuration(milliseconds: 1000)手势刚进入时的动画持续时间,需要搭配 [moveDuration][enterToMoveDuration] 使用。
仅以下手势生效:
GesturesType.touch
GesturesType.hover
moveDurationDurationDuration(milliseconds: 100)手势移动时的动画持续时间。
仅以下手势生效:
GesturesType.touch
GesturesType.hover
enterToMoveDurationDurationDuration(milliseconds: 600)手势从 Enter 过渡至 Move 的持续时间,需要搭配 [enterDuration][moveDuration] 使用。
仅以下手势生效:
GesturesType.touch
GesturesType.hover
leaveDurationDurationDuration(milliseconds: 300)手势离开后的动画持续时间。
仅以下手势生效:
GesturesType.touch
GesturesType.hover
moveCurveCurveCurves.linear手势移动时的动画曲线。
仅以下手势生效:
GesturesType.touch
GesturesType.hover
enterToMoveCurveCurveCurves.easeOutCubic手势从 Enter 过渡至 Move 的曲线,需要搭配 [enterToMoveDuration] 使用。
仅以下手势生效:
GesturesType.touch
GesturesType.hover
leaveCurveCurveCurves.linear手势离开后的动画曲线。
仅以下手势生效:
GesturesType.touch
GesturesType.hover
controllerMoveDurationDurationDuration(milliseconds: 100)controller 手势移动时的动画持续时间。
仅以下手势生效:
GesturesType.controller
controllerLeaveDurationDurationDuration(milliseconds: 300)controller 手势离开后的动画持续时间。
仅以下手势生效:
GesturesType.controller

LightShadowMode

枚举值描述
LightShadowMode.base[无性能风险]
仅对 Tilt.child 使用普通阴影效果,无性能损耗。
LightShadowMode.projector[有性能风险]
对整个 Tilt widget 使用类似投影仪效果的阴影,
会显示与 widget 非透明部分完全一致的阴影。
建议在以下场景使用:
- 仅图片
- 无数据状态
- 无 Hero 标签

LightConfig

参数名类型默认值描述
disableboolfalse仅禁用光照效果。
colorColorColor(0xFFFFFFFF)光照颜色。
minIntensitydouble0.0颜色最小不透明度,也是初始不透明度。
maxIntensitydouble0.5颜色最大不透明度,跟随倾斜最大进度。
spreadFactordouble4.0光源扩散系数,相对于当前 widget 尺寸。
projectorScaledouble1.1光照区域尺寸比例。
仅以下模式生效:
[LightShadowMode.projector]
directionLightDirectionLightDirection.around光照方向。
影响:
[ShadowConfig.direction](配置后不受影响)。
enableReverseboolfalse反转光照方向。
影响:
[ShadowConfig.direction](配置后不受影响)。
[ShadowConfig.enableReverse](配置后不受影响)。

ShadowConfig

参数名类型默认值描述
disableboolfalse仅禁用阴影效果。
colorColorColor(0xFF9E9E9E)阴影颜色。
minIntensitydouble0.0颜色最小不透明度,也是初始不透明度。
maxIntensitydouble0.5颜色最大不透明度,跟随倾斜最大进度。
offsetInitialOffsetOffset(0.0, 0.0)阴影偏移初始值。
例如:(0.0, 0.0) 中心
(40.0, 40.0) 向左上角偏移 40。
offsetFactordouble0.1阴影偏移系数,相对于当前 widget 尺寸。
spreadInitialdouble0.0阴影扩散半径初始值。
仅以下模式生效:
[LightShadowMode.base]
spreadFactordouble0.0阴影扩散半径系数,相对于当前 widget 尺寸。
仅以下模式生效:
[LightShadowMode.base]
minBlurRadiusdouble10.0最小阴影模糊半径,也是初始模糊半径。
仅以下模式生效:
[LightShadowMode.base]
maxBlurRadiusdouble20.0最大阴影模糊半径,跟随倾斜最大进度。
仅以下模式生效:
[LightShadowMode.base]
projectorScaleFromdouble1.0最小倾斜进度的阴影尺寸比例,也是初始尺寸比例。
仅以下模式生效:
[LightShadowMode.projector]
projectorScaleTodouble1.0最大倾斜进度的阴影尺寸比例。
仅以下模式生效:
[LightShadowMode.projector]
projectorBlurSigmaFromdouble5.0最小倾斜进度的阴影模糊 Sigma,也是初始模糊 Sigma。
仅以下模式生效:
[LightShadowMode.projector]
projectorBlurSigmaTodouble10.0最大倾斜进度的阴影模糊 Sigma。
仅以下模式生效:
[LightShadowMode.projector]
directionShadowDirection?null阴影方向。
enableReversebool?null反转阴影方向。