Flutter 开发过程中 的一些小坑

1、Text 的 TextOverflow.ellipsis 不生效
有时候我们的Text设置ellipsis不生效,而是出现如下图左边提示 overflowed 的警告,
其实大部分的时候,这是 Text 内部的 RenderParagraph 在判断 final bool didOverflowWidth = size.width < textSize.width; 时, size.width 和 textSize.width 是相等导致的。

所以你需要给 Text 设置一个 Container 之类的去约束它的大小,或者是 Row 中通过 Expanded + Container 去约束你的 Text。


image.png

2 系统字体缩放
现在的手机一般都提供字体缩放,这给应用开发的适配上带来一定工作量,所以大多数时候我们会选择禁止应用跟随系统字体缩放。
在 Flutter 中字体缩放也是和 MediaQueryData 的 textScaleFactor 有关。所以我们可以在需要的页面,通过最外层嵌套如下代码设置,将字体设置为默认不允许缩放。

 MediaQuery(
      data: MediaQueryData.fromWindow(WidgetsBinding.instance.window).copyWith(textScaleFactor: 1),
      child: new Container(),
    );

3 Margin 和 Padding
Padding 不支持负数,所以如果你需要用到负数的时候,推荐使用Transform

  Transform(
      transform: Matrix4.translationValues(10, -10, 0),
      child: new Container(),
    );

4 控件圆角裁剪
日常开发中我们大致会使用两种圆角方案
一种是通过 Decoration 的实现类 BoxDecoration 去实现。
一种是通过 ClipRRect 去实现。

其中 BoxDecoration 一般应用在 DecoratedBox 、 Container 等控件,这种实现一般都是直接 Canvas 绘制时,针对当前控件的进行背景圆角化,并不会影响其 child 。这意味着如果你的 child 是图片或者也有背景色,那么很可能圆角效果就消失了。

而 ClipRRect 的效果就是会影响 child 的,具体看看其如下的 RenderObject 源码可知。

5 Android 返回键回到桌面
Flutter 官方已经为你提供了 android_intent 插件了,这种情况下,实现回到桌面可以如下简单实现:

Future _dialogExitApp(BuildContext context) async {
    if (Platform.isAndroid) {
      AndroidIntent intent = AndroidIntent(
        action: 'android.intent.action.MAIN',
        category: "android.intent.category.HOME",
      );
      await intent.launch();
    }

    return Future.value(false);
  }
·····
 return WillPopScope(
      onWillPop: () {
        return _dialogExitApp(context);
      },
      child:xxx);

你可能感兴趣的:(Flutter 开发过程中 的一些小坑)