flutter中的小技巧

  一、如何去掉右上角的DEBUG标签?

    1、

return MaterialApp(
      home: HomeScreen(),
      debugShowCheckedModeBanner: false,//去掉右上角DEBUG标签
    );

    2、构建release版本;

  二、SingleTickerProviderStateMixin是什么混入?

初始化animationController的时候需要一个TickerProvider类型的参数Vsync参数,所以需要我们混入TickerProvider的子类SingleTickerProviderStateMixin

  三、operator重载操作符

这里用js来举例,dart 判断两值相等,可以使用 == ,对一些基础数据类型进行判断。

如果你的需求是判断自定义类型相等,== 就不行了,这时候就要用===,但是dart不同于js,没有===。

但dart提供了operator重载操作符,这就是使用它的原因。

那如何使用呢,当然不能 A operator B 这么用了(js里当然可以 A === B),operator其实是类内部实现的,你在创建类的时候,就通过operator,为这个类提供一个对比方法,注意,dart是将这种对比,写成了自己的方法,栗子如下:

class A {
  bool operator ==(dynamic y) {
    return y == 1;
  }
}
  
main() {
  var a = new A();
  print(a == 1); // true
  print(a == 2); // false
}

看到没,这个对比的过程,被写成了类内部的一个方法。

  四、退出

exit(1);///异常退出
exit(0);///常规退出

  五、查看打包文件大小

flutter build apk --target-platform=android-arm /// Android32位 输出Built build/app/outputs/apk/release/app-release.apk (4.2MB)

flutter build apk --target-platform=android-arm64 /// Android64位 输出Built build/app/outputs/apk/release/app-release.apk (4.6MB)

flutter build ios && tar -zcf build/app.ipa build/ios/iphoneos/Runner.app && ls -lh build/app.ipa /// ios输出  example/helloworld app (as of this writing) is 8.3 MB

  六、修改flutter应用名

    1、ios

      Info.plist =>  <key>CFBundleName</key><string>XXXXX<string/>

    2、Android

      AndroidManifest.xml => android:label="XXXXX"

  七、修改应用图标

    1、ios

      AppIcon.appiconset内替换相应分倍率icon,同时更新同目录的Contents.json文件;

    2、Android

      mipmap内替换相应分倍率icon,同时更新AndroidManifest.xml 文件;

  八、Text下面出现黄色双下划线

style: TextStyle(
decoration: TextDecoration.none
)

  因为没有可继承的祖先样式widget;

  九、如何去掉Buttonwidget的点击效果

  GestureDetector(
     child: IconButton(
        icon: Icon(Icons.print),
        color: Colors.black,
        onPressed: null,
     ),
     onTap: (){
       print(123);
     },
 ),

  button没有onPressed会默认为禁用状态,置灰色,此时是没有点击效果的,通过color控制图标颜色,外面包一层GestureDetector来给button添加点击回调。

  如果可以接受button的点击效果,可以使用button自带的onPressed回调;

  十、TextField Widget 添加autofocus: true属性时,会报RenderBox was not laid out: RenderEditable#6beb5 NEEDS-LAYOUT NEEDS-PAINT ???

  别慌,1.21上的bug,flutter issues (bug发现时间1月13,当你看到这个问题的时候,可能我们的flutter团队工程师已经修复了这个bug)

  十一、滚动View撑满屏,无法被Column包括问题

1、View外面包裹Expanded;

2、View Widget添加 shrinkWrap: true 属性;

  实际都是限制View的尺寸;

  十二、flutter中的度数

import 'dart:math' as math;

math.pi   /// 180deg

math.pi / 2    /// 90deg

math.pi * 2   /// 360deg

  十三、Material设计规范中状态栏、导航栏、ListTile高度?

分别为24、56、56 

屏幕高度 

MediaQuery.of(context).size.height

  

  十四、flutter中的颜色转换

 ///颜色是一个字符串变量

var c = "dc380d";
Color(int.parse(c,radix:16)|0xFF000000) //通过位运算符将Alpha设置为FF Color(int.parse(c,radix:16)).withAlpha(255) //通过方法将Alpha设置为FF

  十五、指定当前系统

 debugDefaultTargetPlatformOverride=TargetPlatform.iOS;

print(defaultTargetPlatform); /// 会输出TargetPlatform.iOS

///上面代码即在Android中运行后,Flutter APP就会认为是当前系统是iOS,Material组件库中所有组件交互方式都会和iOS平台对齐,defaultTargetPlatform的值也会变为TargetPlatform.iOS

  十六、

原文地址:https://www.cnblogs.com/webcabana/p/12133284.html