Flutter 滚动到顶部
一个包装器,可以在 ScrollView 小部件上向用户显示一个滚动到顶部的提示。
安装
将以下依赖项添加到您的 pubspec.yaml 文件中
dependencies:
flutter_scroll_to_top: ^2.2.4
导入包
import 'package:flutter_scroll_to_top/flutter_scroll_to_top.dart';
ScrollWrapper
只需将您想显示滚动到顶部的提示的滚动小部件包装在 ScrollWrapper 中即可。
ScrollWrapper(
builder: (context, properties) => ListView.builder(
itemBuilder: (context, index) => Padding(
padding: const EdgeInsets.all(8.0),
child: ListTile(
title: Text('Tile $index'),
tileColor: Colors.grey.shade200,
),
),
),
)
ScrollView 属性
如果子 ScrollView 的 scrollController、scrollDirection、primary 或 reverse 参数与默认值不同,您需要将它们作为参数传递给 ScrollWrapper 小部件,因为它需要相同的参数。它在 builder 回调中提供了一个 ScrollViewProperties 对象,您可以使用它来访问 ScrollView 小部件中的属性。
ScrollWrapper(
primary: true,
scrollDirection: Axis.horizontal,
reverse: true,
builder: (context, properties) => ListView.builder(
controller: properties.scrollController,
scrollDirection: properties.scrollDirection,
reverse: properties.reverse,
primary: properties.primary,
itemBuilder: (context, index) => Padding(
padding: const EdgeInsets.all(8.0),
child: ListTile(
title: Text('Tile $index'),
tileColor: Colors.grey.shade200,
),
),
),
)
自定义
您可以传递以下参数来自定义提示
-
enabledAtOffset – 在哪个滚动偏移量启用提示。
-
alwaysVisibleAtOffset – 如果提示要在提供的偏移量处始终可见。将其设置为 false 只会在用户开始向上滚动时显示提示。默认值为 false。
-
scrollOffsetUntilVisible – 在提示变得可见之前,用户应该向相反方向滚动多少偏移量。
-
scrollOffsetUntilHide – 如果提示可见,用户应该滚动多少偏移量才能隐藏自身。
-
promptAlignment – 提示在小部件上的对齐方式。
-
promptDuration – 提示进入视图/消失所需的时间。
-
promptAnimationCurve – 提示进入视图时将遵循的动画曲线。
-
promptAnimationType – 提示在动画时遵循的 PromptAnimation。有三种选项:fade、scale 和 size。
-
scrollToTopDuration – 点击提示按钮时页面滚动到顶部所需的时间。
-
scrollToTopCurve – 滚动到顶部的动画曲线。
-
promptTheme – 您可以传递 PromptButtonTheme 来进一步修改提示按钮。它具有以下参数:padding – 提示按钮周围的内边距。iconPadding – 按钮内图标周围的内边距。icon – 按钮内的图标。color – 提示按钮的颜色。elevation – 按钮的阴影。
ScrollWrapper(
promptAlignment: Alignment.topCenter,
promptAnimationCurve: Curves.elasticInOut,
promptDuration: const Duration(milliseconds: 400),
enabledAtOffset: 300,
scrollOffsetUntilVisible: 500,
promptTheme: const PromptButtonTheme(
icon: Icon(Icons.arrow_circle_up, color: Colors.amber),
color: Colors.deepPurpleAccent,
iconPadding: EdgeInsets.all(16),
padding: EdgeInsets.all(32)),
builder: (context, properties) => ListView.builder(
controller: properties.scrollController,
scrollDirection: properties.scrollDirection,
reverse: properties.reverse,
primary: properties.primary,
itemBuilder: (context, index) => Padding(
padding: const EdgeInsets.all(8.0),
child: ListTile(
title: Text('Tile $index'),
tileColor: Colors.grey.shade200,
),
),
),
)
自定义提示小部件
您可以通过 promptReplacementBuilder 参数传递您选择的小部件来替换默认的提示小部件。
ScrollWrapper(
promptReplacementBuilder: (context, function) => MaterialButton(
onPressed: () => function(),
child: const Text('Scroll to top'),
),
builder: (context, properties) => ListView.builder(
controller: properties.scrollController,
scrollDirection: properties.scrollDirection,
reverse: properties.reverse,
primary: properties.primary,
itemBuilder: (context, index) => Padding(
padding: const EdgeInsets.all(8.0),
child: ListTile(
title: Text('Tile $index'),
tileColor: Colors.grey.shade200,
),
),
),
)