如何去除材质 PageView 组件中的飞溅?

Posted

技术标签:

【中文标题】如何去除材质 PageView 组件中的飞溅?【英文标题】:How to remove splash in a material PageView component? 【发布时间】:2018-11-07 14:48:55 【问题描述】:

如何去除material PageView component 中的飞溅? 我尝试将 ThemeData 的 accentColorsplashColor 设置为 Colors.transparent,但这会导致整个应用出现透明的黑色飞溅。

我试图创建一个类似于solution 的NoSplashContainer,但飞溅仍然留在孩子体内。

import 'package:flutter/material.dart';

class NoSplashContainer extends StatelessWidget 
  final Widget child;
  NoSplashContainer(this.child) : assert(child != null);
  @override
  Widget build(BuildContext context) 
    return (new Container(
        child: new Theme(
            data: Theme
                .of(context)
                .copyWith(splashFactory: const NoSplashFactory()),
            child: child)));
  


class NoSplashFactory extends InteractiveInkFeatureFactory 
  const NoSplashFactory();

  @override
  InteractiveInkFeature create(
    @required MaterialInkController controller,
    @required RenderBox referenceBox,
    @required Offset position,
    @required Color color,
    bool containedInkWell: false,
    RectCallback rectCallback,
    BorderRadius borderRadius,
    double radius,
    VoidCallback onRemoved,
  ) 
    return new NoSplash(
      controller: controller,
      referenceBox: referenceBox,
    );
  


class NoSplash extends InteractiveInkFeature 
  NoSplash(
    @required MaterialInkController controller,
    @required RenderBox referenceBox,
  )  : assert(controller != null),
        assert(referenceBox != null),
        super(
          controller: controller,
          referenceBox: referenceBox,
        );

  @override
  void paintFeature(Canvas canvas, Matrix4 transform) 

我像这样使用NoSplashContainer..

new NoSplashContainer(new PageView(
   children: ...,
)));

但在PageView 中仍然存在飞溅。

【问题讨论】:

你能发一些代码,什么样的飞溅? @Tree 我已经更新了我的问题。 【参考方案1】:

有一个名为ThemeWidget 会将主题应用于后代小部件。因此,您可以使用Theme 自定义应用程序的任何部分,而无需修改整个应用程序的主题。像这样的:

new Theme(
      data: Theme.of(context).copyWith(
        splashColor: Colors.transparent
      ), 
      child:....
    );

【讨论】:

以上是关于如何去除材质 PageView 组件中的飞溅?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据对话框组件中的取消和是按钮更新父组件的材质幻灯片切换值?

我们是不是可以在不使用 Datepicker 的情况下将材质 UI 选择器中的 Calendar 组件用作独立组件 - 如果可以,如何?

unity中GetComponent获取组件中的材质的颜色,用C#写

PageView (UIPageViewController) 的条件同级中断分页

unity 企鹅砸小猪 笔记1

Flutter PageView组件怎样让子组件不会重复加载