美文网首页Flutter圈子Android开发经验谈Android技术知识
Flutter禁用材料设计(Material Design)点击

Flutter禁用材料设计(Material Design)点击

作者: python草莓 | 来源:发表于2019-04-10 15:16 被阅读7次

    如果比较熟悉材料设计(Material Design)的话,会发现里面有很多酷炫的效果,包括点击控件时,从手指的点击处向外扩散的水波效果。

    Flutter也默认为我们的APP开发提供了材料设计的视图,但是会发现水波的展示有一些问题,特别是文本输入框TextField上面使用时。

    下面是我遇到的问题截图:


    -w370

    当来回切换两个输入框时,发现有时输入框背后的水波扩散完后没有消失,导致如图的展示异常。

    这是Flutter目前的一个Bug,如果你也遇到这种情况的话,有一种解决方式就是在这个输入框上禁用水波效果。

    下面我们就来介绍如何禁用控件的水波效果:

    创建两个类,进行主题(Theme)的自定义:

    import 'package:flutter/material.dart';
    
    class NoSplashFactory extends InteractiveInkFeatureFactory {
      const NoSplashFactory();
    
      @override
      InteractiveInkFeature create(
          {MaterialInkController controller,
          RenderBox referenceBox,
          Offset position,
          Color color,
          TextDirection textDirection,
          bool containedInkWell = false,
          rectCallback,
          BorderRadius borderRadius,
          ShapeBorder customBorder,
          double radius,
          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) {}
    }
    

    在需要禁用水波效果的控件上使用:

    ...
    child: Theme(
        data: ThemeData(splashFactory: const NoSplashFactory()),
        child: TextField(
          ...                          
        ),
    ),
    ...
    

    这也许仅是Flutter目前版本(1.2.1)的一个Bug,也许将来Flutter团队会修复这个问题。但是本篇文章也为我们自定义主题(Theme)提供了一种思路。
    欢迎大家留言讨论~

    相关文章

      网友评论

        本文标题:Flutter禁用材料设计(Material Design)点击

        本文链接:https://www.haomeiwen.com/subject/msoniqtx.html