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

 

 

  十六、

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM