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