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
十六、