控制滚动条向右滚动_Flutter - 自定义物理滚动

本文介绍如何在Flutter中通过自定义ScrollPhysics实现ListView滚动,使其每次滚动时移动一个项目,而非默认的整个视口。通过创建CustomScrollPhysics类并结合ScrollController,实现了类似PageView的一对一滚动效果。
摘要由CSDN通过智能技术生成
14c335e60af42b633a0c66238e74ecf6.png

在本文中,我们将编写自己的内容ScrollPhysics来更改中滚动的行为ListView。

KISS(Keep It Simple… pleaSe)

重复出现的情况,我们有一组页面或幻灯片要迭代。

94dba58920217d6000d415fe93def409.gif

Default PageView

执行此操作的代码非常简单。我们只需要使用PageView默认属性即可。

import 'dart:math';import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: MyHomePage(), ); }}class MyHomePage extends StatelessWidget { final List pages = List.generate(4, (index) => index); @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: PageView.builder( itemCount: pages.length, itemBuilder: (context, index) { return Container( color: randomColor, margin: const EdgeInsets.all(20.0), ); }, ), ), ); } Color get randomColor => Color((Random().nextDouble() * 0xFFFFFF).toInt() << 0).withOpacity(1.0);}

真棒。但是,

有时我们想给用户一个提示,或者也许不是真正的页面,而是列表中我们要迭代的元素。在这种情况下,如果当前元素仅填充视口的一小部分,这样我们就可以看到下一个(或上一个元素)的一部分,那就太好了。

不用担心,Flutter掩盖了一切。我们可以使用PageController。

8276052a7316dd783b7d649f242bc6f6.gif

PageView with viewportFraction

代码仍然非常简单。我们只需要将设置为viewportFraction要由列表中的当前元素填充的视口的比例。

class MyHomePage extends StatelessWidget { final List pages = List.generate(4, (index) => index); final _pageController = PageController(viewportFraction: 0.8); @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: PageView.builder( controller: _pageController, itemCount: pages.length, itemBuilder: (context, index) { return Container( color: randomColor, margin: const EdgeInsets.all(20.0), ); }, ), ), ); }

真棒。但是,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值