Flutter轮播组件插件flick的使用

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

Flutter轮播组件插件flick的使用


flick

Cosmos Software Awesome Flutter
Pub License

这是一款专为Flutter设计的高级轮播组件插件,它允许你非常灵活地管理组件的滑动。

该插件与<snap>插件完美兼容,但也可以单独使用。

强烈建议在实际设备上运行示例项目以全面了解其功能。

媒体 | 描述 | 如何使用


注意事项

  • 尽管该插件在模拟器上可能会偶尔出现问题,但在实际设备上使用时表现良好。不要因此感到沮丧!

媒体

观看视频:

v0.1.0




描述

这是一款专为Flutter设计的高级轮播组件插件,它允许你非常灵活地管理组件的滑动。

只需将你想要滑动的组件包裹在FlickController中,并填写参数,该插件会处理其余的事情。


如何使用

“视图是被移动的部分。它是可以滑动的组件。边界是约束视图的部分。”

首先,定义一个全局键作为你的视图:

GlobalKey view = GlobalKey();

如果你希望你的视图受到限制,还需要定义一个全局键作为你的边界:

GlobalKey bound = GlobalKey();

然后,创建一个FlickController实例:

FlickController(
  uiChild(),    // uiChild
  false,        // useCache
  view,         // viewKey
  {
    Key key,
    boundKey          : bound,
    constraintsMin    : Offset.zero,
    constraintsMax    : const Offset(1.0, 1.0),
    flexibilityMin    : const Offset(0.75, 0.75),
    flexibilityMax    : const Offset(0.75, 0.75),
    customBoundWidth  : 0,
    customBoundHeight : 0,
    sensitivity       : 0.05,
    onMove            : _onMove,
    onDragStart       : _onDragStart,
    onDragUpdate      : _onDragUpdate,
    onDragEnd         : _onDragEnd,
    onFlick           : _onFlick
  }
)

其中uiChild()函数返回要滑动的组件:

Widget uiChild() {
  return Container(
    key: view,
    width: 200,
    height: 200,
    color: Colors.transparent,
    child: Padding(
      padding: const EdgeInsets.all(5),
      child: Container(
        constraints: BoxConstraints.expand(),
        decoration: const BoxDecoration(
          color: Colors.redAccent,
          borderRadius: const BorderRadius.all(const Radius.circular(10.0)),
        ),
        child: Center(
          child: Text(
            "Flick",
            style: const TextStyle(
              color: Colors.white,
              fontWeight: FontWeight.bold,
              fontSize: 25,
            ),
            textAlign: TextAlign.center,
          ),
        ),
      ),
    ),
  );
}

事件回调方法:

void _onMove(Offset offset) {
  // 处理滑动位置变化
}

void _onDragStart(dynamic dragDetails) {
  // 拖动开始时调用
}

void _onDragUpdate(dynamic dragDetails) {
  // 拖动更新时调用
}

void _onDragEnd(dynamic dragDetails) {
  // 拖动结束时调用
}

void _onFlick(Offset offset) {
  // 滑动结束时调用
}

进一步解释:

  • 对于所有参数和方法的详细描述,请参阅文档
  • 如果你的uiChild在Peek & Pop过程中不会改变,则将useCache设置为true
  • 如果设置了boundKey,则constraintsMinconstraintsMaxflexibilityMinflexibilityMax不能为null
  • 关于constraintsMinconstraintsMaxflexibilityMinflexibilityMax的更多说明,请参阅snap的文档
  • 使用FlickControllerStateshouldFlick(dynamic dragEndDetails, double treshold)方法来确定是否应该触发滑动,其中treshold是视图被认为是滑动的速度阈值。

注意事项

  • 我是在几周前开始学习Flutter的,所以这个包可能有一些部分不合理或者可以改进的地方。请告诉我,谢谢!

  • 任何帮助、建议或批评都将受到欢迎!


示例代码

以下是完整的示例代码,展示了如何使用flick插件创建一个可滑动的组件:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// © Cosmos Software | Ali Yigit Bireroglu                                                                                                           /
// All material used in the making of this code, project, program, application, software et cetera (the "Intellectual Property")                     /
// belongs completely and solely to Ali Yigit Bireroglu. This includes but is not limited to the source code, the multimedia and                     /
// other asset files. If you were granted this Intellectual Property for personal use, you are obligated to include this copyright                   /
// text at all times.                                                                                                                                /
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//[@formatter](/user/formatter):off

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

GlobalKey view = GlobalKey();

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flick Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: MyHomePage(title: 'Flick Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Widget box() {
    return Container(
      key: view,
      width: 200,
      height: 200,
      color: Colors.transparent,
      child: Padding(
        padding: const EdgeInsets.all(5),
        child: Container(
          constraints: BoxConstraints.expand(),
          decoration: const BoxDecoration(
            color: Colors.redAccent,
            borderRadius: const BorderRadius.all(const Radius.circular(10.0)),
          ),
          child: Center(
            child: Text(
              "Flick",
              style: const TextStyle(
                color: Colors.white,
                fontWeight: FontWeight.bold,
                fontSize: 25,
              ),
              textAlign: TextAlign.center,
            ),
          ),
        ),
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title!)),
      body: FlickController(
        box(),
        true,
        view,
        sensitivity: 0.1,
        onMove: (offset) {
          print("Moving $offset");
        },
        onDragStart: (details) {
          print("Drag start $details");
        },
        onDragUpdate: (details) {
          print("Drag update $details");
        },
        onDragEnd: (details) {
          print("Drag end $details");
        },
        onFlick: (offset) {
          print("Flick $offset");
        },
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用flick_carousel插件来实现轮播组件的示例代码。flick_carousel是一个非常流行的轮播组件插件,它提供了丰富的功能和自定义选项。

首先,确保你已经在pubspec.yaml文件中添加了flick_carousel依赖:

dependencies:
  flutter:
    sdk: flutter
  flick_carousel: ^3.0.0  # 请检查最新版本号

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

接下来,你可以在你的Flutter项目中使用flick_carousel。以下是一个简单的示例代码,展示了如何创建一个基本的轮播组件:

import 'package:flutter/material.dart';
import 'package:flick_carousel/flick_carousel.dart';
import 'package:flick_carousel/models/carousel_options.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flick Carousel Example'),
        ),
        body: CarouselExample(),
      ),
    );
  }
}

class CarouselExample extends StatefulWidget {
  @override
  _CarouselExampleState createState() => _CarouselExampleState();
}

class _CarouselExampleState extends State<CarouselExample> {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: FlickCarousel(
        options: CarouselOptions(
          height: 300,
          viewportFraction: 0.8,
          enableInfiniteScroll: true,
          autoPlay: true,
          autoPlayInterval: Duration(seconds: 3),
          autoPlayAnimationDuration: Duration(milliseconds: 800),
          autoPlayCurve: Curves.fastOutSlowIn,
        ),
        children: [
          Image.network(
            'https://via.placeholder.com/600x300?text=Image+1',
            fit: BoxFit.cover,
          ),
          Image.network(
            'https://via.placeholder.com/600x300?text=Image+2',
            fit: BoxFit.cover,
          ),
          Image.network(
            'https://via.placeholder.com/600x300?text=Image+3',
            fit: BoxFit.cover,
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 引入必要的包:我们导入了flutter/material.dartflick_carousel相关的包。
  2. 定义主应用MyApp是一个简单的MaterialApp,它有一个Scaffold,其中包含一个应用栏和一个CarouselExample组件。
  3. 创建轮播组件CarouselExample是一个有状态的组件,它在其build方法中返回一个FlickCarousel组件。
  4. 配置轮播选项:我们使用CarouselOptions类来配置轮播组件的各种选项,比如高度、视口比例、是否启用无限滚动、自动播放等。
  5. 添加子组件FlickCarouselchildren属性接受一个Widget列表,这里我们添加了三个网络图片作为示例。

这个示例展示了如何使用flick_carousel插件来创建一个基本的轮播组件,并配置了一些常见的选项。你可以根据需要进一步自定义和扩展这个组件。

回到顶部