首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

颤动包裹ListView.builder水平

是指在Flutter中使用ListView.builder构建水平滚动的列表视图,并且在滚动时产生颤动效果。

ListView.builder是Flutter中的一个构建列表视图的组件,它可以根据指定的itemBuilder函数动态构建列表项。在构建水平滚动的列表视图时,我们可以将ListView.builder的scrollDirection属性设置为Axis.horizontal,使其变为水平滚动。

颤动效果可以通过使用Flutter中的动画效果来实现。可以使用Flutter中的AnimationController和Tween来创建一个动画控制器,并将其应用于列表项的位置属性,从而在滚动时产生颤动效果。

以下是一个示例代码,演示如何实现颤动包裹ListView.builder水平的效果:

代码语言:txt
复制
import 'package:flutter/material.dart';

class ShakingListView extends StatefulWidget {
  @override
  _ShakingListViewState createState() => _ShakingListViewState();
}

class _ShakingListViewState extends State<ShakingListView>
    with SingleTickerProviderStateMixin {
  AnimationController _controller;
  List<String> items = List.generate(10, (index) => "Item $index");

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: Duration(milliseconds: 500),
    )..repeat(reverse: true);
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      scrollDirection: Axis.horizontal,
      itemCount: items.length,
      itemBuilder: (context, index) {
        return AnimatedBuilder(
          animation: _controller,
          builder: (context, child) {
            double shakeValue = _controller.value * 10;
            return Transform.translate(
              offset: Offset(shakeValue, 0),
              child: child,
            );
          },
          child: Container(
            width: 100,
            height: 100,
            margin: EdgeInsets.all(10),
            color: Colors.blue,
            child: Center(
              child: Text(
                items[index],
                style: TextStyle(color: Colors.white),
              ),
            ),
          ),
        );
      },
    );
  }
}

// 使用示例
void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: Text('Shaking ListView'),
      ),
      body: ShakingListView(),
    ),
  ));
}

在上述示例中,我们创建了一个ShakingListView组件,它继承自StatefulWidget,并实现了一个带有动画效果的水平滚动的ListView.builder。在每个列表项中,我们使用了一个AnimatedBuilder来应用动画效果,通过改变偏移量来实现颤动效果。

这个示例中使用了Flutter的基本组件和动画效果,可以根据实际需求进行修改和扩展。如果你想了解更多关于Flutter的开发知识和技术,可以参考腾讯云的Flutter开发文档:Flutter开发文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter 首页必用组件NestedScrollView

在普通的ScrollView中, 如果有一个Sliver组件容纳了一个TabBarView,它沿相反的方向滚动(例如,允许用户在标签所代表的页面之间水平滑动,而列表则垂直滚动),则该TabBarView...bool innerBoxIsScrolled) { return [SliverAppBar( title: Text('老孟'), )]; }, body: ListView.builder.../20180918/2018091815372344164.jpg', fit: BoxFit.fitHeight, ), ), )]; }, body: ListView.builder...reverse参数表示反转滚动方向,并不是由垂直转为水平,而是垂直方向滚动时,默认向下滚动,reverse设置false,滚动方向改为向上,同理水平滚动改为水平向左。...总是可以滑动 NeverScrollableScrollPhysics:禁止滚动 BouncingScrollPhysics :内容超过一屏 上拉有回弹效果 ClampingScrollPhysics :包裹内容

4.2K10

Flutter开发-可滚动组件

null,则会强制children的“长度”为itemExtent的值;这里的“长度”是指滚动方向上子组件的长度,也就是说如果滚动方向是垂直方向,则itemExtent代表子组件的高度;如果滚动方向为水平方向...addAutomaticKeepAlives:该属性表示是否将列表项(子组件)包裹在AutomaticKeepAlive 组件中;典型地,在一个懒加载列表中,如果将列表项包裹在AutomaticKeepAlive...addRepaintBoundaries:该属性表示是否将列表项(子组件)包裹在RepaintBoundary组件中。...ListView.builder ListView.builder适合列表项比较多(或者无限)的情况,因为只有当子组件真正显示的时候才会被创建,也就说通过该构造函数创建的ListView是支持基于Sliver...下面看一下ListView.builder的核心参数列表: ListView.builder({ // ListView公共参数已省略 ...

4.5K20
  • Flutter跨平台移动端开发丨SingleChildScrollView、ListView......

    addAutomaticKeepAlives:表示是否将列表项包裹在 AutomaticKeepAlive widget 中。(在懒加载时,如果设置了包裹那么在此列表项滑出屏幕外时不会被GC。...如果此列表项需要自己维护 KeepAlive 状态,那么此参数需为 false) addRepaintBoundaries:表示是否将列表项包裹在 RepaintBoundary 中。...ListView.builder 当 listview 的列表项较多或数量未知时,就需要使用 ListView.builder 来构建列表了 import 'package:flutter/material.dart...(在懒加载时,如果设置了包裹那么在此列表项滑出屏幕外时不会被GC。...如果此列表项需要自己维护 KeepAlive 状态,那么此参数需为 false) addRepaintBoundaries:表示是否将列表项包裹在 RepaintBoundary 中。

    8.7K51

    Flutter | 滚动组件,ListView,GridVIew等

    由于可滚动组件的默认方向一般都是沿垂直方向,所以默认情况下主轴就是指垂直方向,水平方向同理 SingleChildScrollView SingleChildScrollView 类似于 Android...该参数如果不为 null,则会强制 children 的 长度为 itemExtent 的值;这里的长度指的是方向上子组件的长度,也就是说滚动的是垂直方向,则 itemnExtent 代表子组件的高度;如果是水平方向...组件中; 典型的,在一个懒加载的列表中,如果将列表包裹在 AutomaticKeepAlive 中,在改了吧划出视口时,他也不会被 GC 回收(垃圾回收),他会使用 KeepAliveNotification...如果列表项自己维护其 KeepAlive 状态,则此参数必须为 false addRepaintBoundaries:表示该属性表示是否将子组件包裹在 RepaintBoundary 组件中,当可滚动组件滚动时...,被包裹的可以避免列表重绘,但是列表重绘的开销非常小(如一个颜色块,或者一个较短的文本) 时,不添加 RepaintBoundary 反而会更加高效。

    8.5K20
    领券