Flutter下拉揭示内容插件reveal_on_pull的使用

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

Flutter下拉揭示内容插件reveal_on_pull的使用

功能

  • 轻松在下拉时显示隐藏的部件。
  • 可自定义揭示行为和动画。
  • 平滑且响应迅速的用户体验。
  • 兼容iOS和Android。

安装

在您的pubspec.yaml文件中添加以下依赖项:

dependencies:
  reveal_on_pull: ^1.0.0

然后运行flutter pub get来安装该包。

使用方法

要使用此包,请将您的部件树用RevealOnPull包裹,并指定要显示的部件。

RevealOnPull(
  scrollController: scrollController, // 滚动控制器
  animationDuration: const Duration(milliseconds: 500), // 动画持续时间
  widgetToRevealHeight: widgetToRevealHeight, // 部件高度
  widgetToReveal: Container( // 要显示的部件
    height: widgetToRevealHeight,
    width: MediaQuery.of(context).size.width,
    color: Colors.red, // 红色背景
  ),
  scrollableChild: CustomScrollView(
    controller: scrollController, // 滚动控制器
    physics: const ClampingScrollPhysics(), // 物理滚动效果
    slivers: [
      SliverList(
        delegate: SliverChildListDelegate(
          [
            for (var index = 0; index < 100; index++)
              Container(
                height: 100,
                decoration: BoxDecoration(
                  border: Border.all(width: 0.1), // 边框
                ),
                alignment: Alignment.center,
                child: Text('$index'), // 显示索引数字
              ),
          ],
        ),
      ),
    ],
  ),
)

示例代码

以下是完整的示例代码,展示如何在Flutter应用中使用reveal_on_pull插件。

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Reveal on pull - Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Reveal on pull - Example'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  ScrollController scrollController = ScrollController();
  final double widgetToRevealHeight = 180;

  [@override](/user/override)
  void dispose() {
    scrollController.dispose(); // 释放资源
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title), // 应用栏标题
      ),
      body: RevealOnPull(
        scrollController: scrollController, // 滚动控制器
        animationDuration: const Duration(milliseconds: 500), // 动画持续时间
        widgetToRevealHeight: widgetToRevealHeight, // 部件高度
        widgetToReveal: Container( // 要显示的部件
          height: widgetToRevealHeight,
          width: MediaQuery.of(context).size.width,
          color: Colors.red, // 红色背景
        ),
        scrollableChild: CustomScrollView(
          controller: scrollController, // 滚动控制器
          physics: const ClampingScrollPhysics(), // 物理滚动效果
          slivers: [
            SliverList(
              delegate: SliverChildListDelegate(
                [
                  for (var index = 0; index < 100; index++)
                    Container(
                      height: 100,
                      decoration: BoxDecoration(border: Border.all(width: 0.1)), // 边框
                      alignment: Alignment.center,
                      child: Text('$index'), // 显示索引数字
                    ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter下拉揭示内容插件reveal_on_pull的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter下拉揭示内容插件reveal_on_pull的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用reveal_on_pull插件来实现下拉揭示内容效果的代码示例。

首先,你需要在你的pubspec.yaml文件中添加reveal_on_pull依赖项:

dependencies:
  flutter:
    sdk: flutter
  reveal_on_pull: ^latest_version  # 请确保使用最新版本号

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

接下来,你可以在你的Flutter项目中实现下拉揭示内容效果。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Reveal on Pull Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: RevealOnPullExample(),
    );
  }
}

class RevealOnPullExample extends StatefulWidget {
  @override
  _RevealOnPullExampleState createState() => _RevealOnPullExampleState();
}

class _RevealOnPullExampleState extends State<RevealOnPullExample> {
  final double _maxHeight = 200.0; // 设定可下拉的最大高度
  double _currentHeight = 0.0; // 当前下拉的高度

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Reveal on Pull Example'),
      ),
      body: RevealOnPull(
        maxHeight: _maxHeight,
        initialHeight: _currentHeight,
        onPull: (double progress) {
          setState(() {
            _currentHeight = _maxHeight * progress;
          });
        },
        onRelease: (double velocity) {
          // 这里可以添加释放后的动画效果或逻辑
          if (velocity > 0) {
            // 手指向上滑动释放
            setState(() {
              _currentHeight = _maxHeight;
            });
          } else {
            // 手指向下滑动释放或未拉动到最大高度
            setState(() {
              _currentHeight = 0.0;
            });
          }
        },
        child: Container(
          color: Colors.grey[200],
          height: _currentHeight,
          child: Center(
            child: Text(
              'Pull down to reveal content',
              style: TextStyle(color: Colors.black),
            ),
          ),
        ),
        background: Center(
          child: Text(
            'Main Content',
            style: TextStyle(fontSize: 24),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个RevealOnPullExample组件,它使用RevealOnPull小部件来实现下拉揭示内容的效果。RevealOnPull小部件接收以下参数:

  • maxHeight:下拉的最大高度。
  • initialHeight:初始高度(通常为0,表示未下拉时的高度)。
  • onPull:当用户在拉动时触发的回调,返回当前的下拉进度(0到1之间)。
  • onRelease:当用户释放下拉时触发的回调,返回释放时的速度。
  • child:下拉时揭示的内容。
  • background:下拉时背景显示的内容。

通过这种方式,你可以轻松地在Flutter应用中实现下拉揭示内容的效果。请根据你的实际需求调整代码中的参数和样式。

回到顶部