Alex Vincent's Blog

  • 首页
  • 我的
    • GitHub
  • 友情链接
    • Cal's Blog
    • Evsio0n的个人小站
    • Helo's Blog
Alex's Blog
Where Alex (a.k.a. AlexV525) used to write his blog.
  1. 首页
  2. 默认分类
  3. 正文

Flutter 全局禁用水波纹

6月 4, 2019 7487点热度 21人点赞 0条评论

去除 Ink 系列水波纹

1. 定义 NoSplashFactory

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

class NoSplashFactory extends InteractiveInkFeatureFactory {
  const NoSplashFactory();

  @override
  InteractiveInkFeature create({
    required MaterialInkController controller,
    required RenderBox referenceBox,
    required Offset position,
    required Color color,
    required TextDirection textDirection,
    bool containedInkWell = false,
    RectCallback? rectCallback,
    BorderRadius? borderRadius,
    ShapeBorder? customBorder,
    double? radius,
    VoidCallback? onRemoved,
  }) {
    return NoSplash(
      controller: controller,
      referenceBox: referenceBox,
      color: color,
      onRemoved: onRemoved,
    );
  }
}

/// 不显示水波纹效果
class NoSplash extends InteractiveInkFeature {
  NoSplash({
    required MaterialInkController controller,
    required RenderBox referenceBox,
    required Color color,
    VoidCallback? onRemoved,
  }) : super(
          controller: controller,
          referenceBox: referenceBox,
          color: color,
          onRemoved: onRemoved,
        ) {
    controller.addInkFeature(this);
  }

  @override
  void paintFeature(Canvas canvas, Matrix4 transform) {}
}

2. 在构建 ThemeData 时使用

ThemeData
class MyApp extends State<MyAppState> {
  return MaterialApp(
    theme: Theme.of(context).copyWith(
      highlightColor: Colors.transparent,
      splashFactory: const NoSplashFactory(),
    ),
    ///..........///
  );
}

如果需要局部启用,可以应用InkSplash.splashFactory到splashFactory上。

去除滚动水波纹

1. 定义 NoGlowScrollBehavior

NoGlowScrollBehavior
class NoGlowScrollBehavior extends ScrollBehavior {
  const NoGlowScrollBehavior();

  @override
  Widget buildViewportChrome(
    BuildContext context,
    Widget child,
    AxisDirection axisDirection,
  ) =>
      child;
}

2. 在全局套用 ScrollConfiguration

ScrollConfiguration
MaterialApp(
  builder: (_, Widget? w) => ScrollConfiguration(
    behavior: const NoGlowScrollBehavior(),
    child: w!,
  ),
);
标签: 暂无
最后更新:10月 20, 2021

Alex Vincent

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2021 AlexV525. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

桂ICP备16008143号-1