Flutter触摸涟漪效果插件ripple_touch的使用

Flutter触摸涟漪效果插件ripple_touch的使用

添加一个触摸时的涟漪效果。

安装

在你的 pubspec.yaml 文件的依赖项中添加 ripple_touch。然后导入它:

import 'package:ripple_touch/RippleManager.dart';

如何使用

在应用启动时初始化叠加层(推荐)。

// 初始化
@override
void initState() {
  super.initState();
  Future.delayed(Duration.zero).then((value) => RippleManager().init(context));
}

// 销毁
RippleManager().dispose();

对于更详细的示例,请查看 example 文件夹。

示例

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

import 'package:flutter/material.dart';
import 'package:ripple_touch/RippleManager.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.teal), useMaterial3: false,),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  void initState() {
    super.initState();
    Future.delayed(Duration.zero).then((value) => RippleManager().init(
      context,
      fadeInDuration: const Duration(milliseconds: 300),
      fadeOutDuration: const Duration(milliseconds: 0),
      enableRippleOnSwipe: true,
      isAnimationReverse: true,  // 反向动画
      extraScale: 0.0, // 新增参数
    ));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.teal,
        title: const Text("Demo"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text('Tap anywhere in the app'),
            MaterialButton(
              color: Colors.orange[300],
              child: const Text("Navigate to newPage"),
              onPressed: () {
                Navigator.of(context).push(MaterialPageRoute(builder: (context) => const PageTwo()));
              },
            )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton.extended(
        label: const Text("Use custom touch widget"),
        icon: const Icon(Icons.star),
        backgroundColor: Colors.teal[300],
        onPressed: () {
          RippleManager().dispose();
          RippleManager().init(context, customChild: const Icon(Icons.star, color: Colors.orange, size: 50));
        },
      ),
    );
  }
}

class PageTwo extends StatefulWidget {
  const PageTwo({super.key});

  @override
  State<PageTwo> createState() => _PageTwoState();
}

class _PageTwoState extends State<PageTwo> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.teal,
        title: const Text("page Two"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            MaterialButton(
              color: Colors.indigo[200],
              child: const Text("Navigate back"),
              onPressed: () {
                Navigator.of(context).pop();
              },
            )
          ],
        ),
      ),
    );
  }
}

演示

演示图

如果你缺少了某些功能或有任何问题,请随时提交一个 issue 或贡献代码!


更多关于Flutter触摸涟漪效果插件ripple_touch的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter触摸涟漪效果插件ripple_touch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ripple_touch 是 Flutter 中一个用于实现触摸涟漪效果的插件。这个插件可以帮助你轻松地在用户触摸或点击时,显示一个 Material Design 风格的涟漪效果。虽然 Flutter 本身已经提供了 InkWellInkResponse 等内置组件来实现涟漪效果,但 ripple_touch 提供了一种更简单和灵活的方式来实现类似的效果。

安装

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

dependencies:
  ripple_touch: ^1.0.0

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

使用

ripple_touch 提供了一个 RippleTouch 组件,你可以将它包裹在任何子组件上,以实现触摸涟漪效果。以下是一个简单的使用示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Ripple Touch Example'),
        ),
        body: Center(
          child: RippleTouch(
            onPressed: () {
              print('Button Pressed!');
            },
            child: Container(
              width: 200,
              height: 50,
              decoration: BoxDecoration(
                color: Colors.blue,
                borderRadius: BorderRadius.circular(10),
              ),
              child: Center(
                child: Text(
                  'Press Me',
                  style: TextStyle(color: Colors.white, fontSize: 18),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

参数说明

RippleTouch 组件支持以下参数:

  • onPressed: 当用户点击时触发的回调函数。
  • child: 需要包裹的子组件。
  • rippleColor: 涟漪效果的颜色,默认为 Colors.black.withOpacity(0.2)
  • radius: 涟漪效果的半径,默认为 25.0
  • borderRadius: 涟漪效果的圆角半径,默认为 0.0
  • duration: 涟漪效果的持续时间,默认为 Duration(milliseconds: 300)

自定义涟漪效果

你可以通过调整 rippleColorradiusborderRadiusduration 等参数来自定义涟漪效果。例如:

RippleTouch(
  onPressed: () {
    print('Custom Ripple Pressed!');
  },
  rippleColor: Colors.red.withOpacity(0.3),
  radius: 50.0,
  borderRadius: BorderRadius.circular(20),
  duration: Duration(milliseconds: 500),
  child: Container(
    width: 200,
    height: 50,
    decoration: BoxDecoration(
      color: Colors.green,
      borderRadius: BorderRadius.circular(10),
    ),
    child: Center(
      child: Text(
        'Custom Ripple',
        style: TextStyle(color: Colors.white, fontSize: 18),
      ),
    ),
  ),
);
回到顶部