Flutter 全局禁用水波纹

去除 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.splashFactorysplashFactory上。

去除滚动水波纹

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!,
  ),
);

已发布

分类

作者:

标签