Flutter可点击列表轮播视图插件clickable_list_wheel_view的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter可点击列表轮播视图插件clickable_list_wheel_view的使用

简介

pub package

clickable_list_wheel_viewListWheelScrollView 的一个简单包装,它允许子组件响应手势(如 onTap)事件。

安装

在你的 pubspec.yaml 文件的 dependencies: 部分添加以下行:

dependencies:
  clickable_list_wheel_view: latest_version

然后运行 flutter pub get 来安装插件。

使用方法

基本用法

你可以通过下面的方式快速开始使用这个插件:

ClickableListWheelScrollView(
  scrollController: _scrollController,
  itemHeight: _itemHeight,
  itemCount: _itemCount,
  onItemTapCallback: (index) {
    print("onItemTapCallback index: $index");
  },
  child: ListWheelScrollView.useDelegate(
    controller: _scrollController,
    itemExtent: _itemHeight,
    physics: FixedExtentScrollPhysics(),
    overAndUnderCenterOpacity: 0.5,
    perspective: 0.002,
    onSelectedItemChanged: (index) {
      print("onSelectedItemChanged index: $index");
    },
    childDelegate: ListWheelChildBuilderDelegate(
      builder: (context, index) => _child(index),
      childCount: _itemCount,
    ),
  ),
)

示例代码

以下是一个完整的示例代码,展示了如何使用 ClickableListWheelScrollView 插件:

import 'package:clickable_list_wheel_view/clickable_list_wheel_widget.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Material(
        child: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final _scrollController = FixedExtentScrollController();

  static const double _itemHeight = 60;
  static const int _itemCount = 100;

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: ClickableListWheelScrollView(
          scrollController: _scrollController,
          itemHeight: _itemHeight,
          itemCount: _itemCount,
          onItemTapCallback: (index) {
            print("onItemTapCallback index: $index");
          },
          child: ListWheelScrollView.useDelegate(
            controller: _scrollController,
            itemExtent: _itemHeight,
            physics: FixedExtentScrollPhysics(),
            overAndUnderCenterOpacity: 0.5,
            perspective: 0.002,
            onSelectedItemChanged: (index) {
              print("onSelectedItemChanged index: $index");
            },
            childDelegate: ListWheelChildBuilderDelegate(
              builder: (context, index) => _child(index),
              childCount: _itemCount,
            ),
          ),
        ),
      ),
    );
  }

  Widget _child(int index) {
    return SizedBox(
      height: _itemHeight,
      child: ListTile(
        leading: Icon(IconData(int.parse("0xe${index + 200}"), fontFamily: 'MaterialIcons'), size: 50),
        title: Text('Heart Shaker'),
        subtitle: Text('Description here'),
      ),
    );
  }
}

API详情

  • child (required):要包裹的目标 ListWheelScrollView
  • scrollController (required):必须与列表和包装器相同。
  • listHeight (optional):ListWheelScrollView 的高度。
  • itemHeight (required):ListWheelScrollView 中每个子项的高度。
  • itemCount (required):ListWheelScrollView 中的项目数量。
  • scrollOnTap (optional):如果为 true,则列表将在点击时滚动。
  • onItemTapCallback (optional):设置一个处理 tap 事件的处理器。
  • animationDuration (optional):设置滚动动画的持续时间。
  • loop (optional):与 ListWheelChildLoopingListDelegate 一起使用时是否循环。

更多关于Flutter可点击列表轮播视图插件clickable_list_wheel_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter可点击列表轮播视图插件clickable_list_wheel_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用clickable_list_wheel_view插件的一个示例代码案例。首先,你需要确保你的pubspec.yaml文件中已经添加了clickable_list_wheel_view依赖:

dependencies:
  flutter:
    sdk: flutter
  clickable_list_wheel_view: ^最新版本号  # 请替换为实际最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下方式使用clickable_list_wheel_view插件来创建一个可点击的列表轮播视图:

import 'package:flutter/material.dart';
import 'package:clickable_list_wheel_view/clickable_list_wheel_view.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Clickable List Wheel View Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 模拟一些数据
  final List<String> items = List.generate(20, (index) => 'Item $index');

  // 选择项的索引
  int selectedIndex = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Clickable List Wheel View Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: ClickableListWheelView(
                itemCount: items.length,
                diameterRatio: 0.3,
                itemBuilder: (context, index) {
                  return Center(
                    child: Text(
                      items[index],
                      style: TextStyle(fontSize: 20),
                    ),
                  );
                },
                onItemClick: (index) {
                  setState(() {
                    selectedIndex = index;
                  });
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text('You selected: ${items[index]}'),
                    ),
                  );
                },
              ),
            ),
            SizedBox(height: 20),
            Text(
              'Selected Item: ${items[selectedIndex]}',
              style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个包含20个项的列表items
  2. 使用ClickableListWheelView来显示这些项,并设置了一些基本属性,如itemCountdiameterRatio
  3. itemBuilder回调用于构建每个项,这里我们简单地显示一个文本。
  4. onItemClick回调用于处理项的点击事件,当用户点击某个项时,会更新selectedIndex并显示一个SnackBar。

这个示例展示了如何使用clickable_list_wheel_view插件来创建一个可点击的列表轮播视图,并在用户点击某个项时执行相应的操作。你可以根据需要进一步自定义和扩展这个示例。

回到顶部