Flutter 使用總結(jié)

Flutter 使用總結(jié)

Flutter 安裝

  1. 下載:Flutter SDK

    1. 配置環(huán)境變量:
      1. 打開終端箱熬,打開環(huán)境變量配置:open ~/.zshrc类垦;

      2. 如果沒有.zshrc,就新建:vim ~/.zshrc城须;

      3. 配置環(huán)境變量:

        export PATH
        export PATH export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 
        export PUB_HOSTED_URL=https://pub.flutter-io.cn # 國內(nèi)用戶需要設(shè)置
        export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn # 國內(nèi)用戶需要設(shè)置
        # export PATH=${PATH}:/flutter的存儲地址/flutter/bin:$PATH
        export PATH="$PATH:/xxxflutter的存儲地址xxx/bin"
        
        # 最后一行舉例:
        # export PATH=${PATH}:/Users/xxx/Documents/code/flutter/bin:$PATH
        # export PATH="$PATH:/Users/xxx/Documents/code/flutter/bin"
        
        # Flutter配置
        #export PATH="$PATH:/Users/andy/Documents/code/flutter/bin"
        #export PATH=/Users/用戶名/Documents/flutter/flutter/bin:$PATH
        #export ANDROID_HOME="/Users/用戶名/Documents/android_sdk" //android sdk目錄蚤认,替換為你自己的即可
        #export PATH=${PATH}:${ANDROID_HOME}/tools
        #export PATH=${PATH}:${ANDROID_HOME}/platform-tools
        #export PUB_HOSTED_URL=https://pub.flutter-io.cn
        
      4. 保存并退出編輯::wq雕旨;

      5. 重新保存一下配置:source ~/.zshrc藻雪,來刷新一下,讓我們的配置立即生效履植;

      6. 運行一下看是否配置好:flutter doctor良瞧;

  2. 下載:Android Studio陪汽;

    1. Android Studio安裝:Flutter插件;打開Android Studio褥蚯,打開路徑:Android Studio->Preferences->Plugins->Marketplace->搜索Flutter掩缓,下載Flutter
    2. 安裝:Dart插件遵岩;(下載Flutter插件你辣,會讓先下載Dart插件)
    3. 重啟Android Studio讓插件生效;
    4. 配置Flutter SDK路徑(前提是要先打開一個Flutter項目尘执,才能在Languages & Frameworks下面看到FlutterDart配置入口)舍哄,就是下載的Flutter SDK的存放路徑:打開路徑:Android Studio->Preferences->Languages & Frameworks->Flutter->Flutter SDK path,選擇下載的Flutter SDK的存放路徑誊锭;
    5. 配置Dart路徑:一般配置好Flutter SDK路徑表悬,Dart路徑會自動配置,可在路徑:Android Studio->Preferences->Languages & Frameworks->Dart->Dart SDK path丧靡,查看是否配置成功蟆沫。
  3. 下載:Xcode籽暇;

  4. 打開Android Studio的命令行,執(zhí)行:flutter doctor饭庞,使用Flutter的語法進(jìn)行檢測戒悠;

Flutter 語法

  1. 命令行

    // 配置檢測:首次執(zhí)行Flutter命令的時候,會自動下載依賴項并自行編譯舟山。如果有問題绸狐,按照提示,依次解決累盗。
    flutter doctor
    
    // 打包apk
    flutter build apk
    
    // 清空緩存
    flutter clean
    
    // 更新依賴
    flutter pub upgrade
    
    
  2. 解決ListView嵌套ListView不顯示和滑動沖突:

    1. 解決方法如下:

      shrinkWrap: true, //為true可以解決子控件必須設(shè)置高度的問題
      physics: NeverScrollableScrollPhysics(), //禁用滑動事件
      
    2. 示例代碼如下:

      @override
      Widget build(BuildContext context) {
          return Container(
              child: ListView(
                  children: <Widget>[
                      _topSearchView(),
                      _listView(),
                  ],
              ),
          );
      }
      
      Widget _topSearchView(){
          return Container(
              width: ScreenUtil().setWidth(750),
              height: ScreenUtil().setHeight(80),
              padding: EdgeInsets.all(10),
              margin: EdgeInsets.fromLTRB(10, 5, 5, 10),
              decoration: BoxDecoration(
                  color:Colors.white,
                  borderRadius: BorderRadius.circular((10.0)),
                  border: Border.all(
                      width:0.5,color:Colors.black12,
                  )
              ),
              child: Row(
                  children: <Widget>[
                      Icon(Icons.search),
                      Text('搜索')
                  ],
              )
          );
      }
      
      Widget _listView(){
          return Container(
              child: ListView.builder(
                  shrinkWrap: true, //為true可以解決子控件必須設(shè)置高度的問題
                  physics:NeverScrollableScrollPhysics(),//禁用滑動事件
                  itemCount: 10,
                  itemBuilder: (context,index){
                      return _item(context,index);
                  },
              ),
          );
      }
      

常見錯誤

  1. iPhone真機(jī)運行寒矿,報錯:無法打開“iproxy”,因為無法驗證開發(fā)者若债,這個問題可能是因為權(quán)限不夠符相,執(zhí)行這句命令就可以搞定:

    sudo xattr -d com.apple.quarantine /Users/zions/development/flutter/bin/cache/artifacts/usbmuxd/iproxy
    
  2. 執(zhí)行flutter語法報錯:command not found: flutter:應(yīng)該是環(huán)境變量配置有問題,重新走一下上面的配置環(huán)境變量的步驟蠢琳。

  3. Android Studio的終端執(zhí)行flutter doctor報錯:

    1. 錯誤一:

      cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
      

      然后執(zhí)行:path/to/sdkmanager --install "cmdline-tools;latest"后報錯:

      zsh: no such file or directory: path/to/sdkmanager
      

      解決方法:參考錯誤二主巍;

    2. 錯誤二:

      Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.`
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
      

      然后執(zhí)行:flutter doctor --android-licenses后報錯:

      Android sdkmanager not found. Update to the latest Android SDK and ensure that the cmdline-tools are installed to resolve this.
      

      解決方法:
      1. 打開SDK Manager -> Appearance & Behavior -> System Setting -> Android SDK -> SDK Tools
      2. 選中Android SDK Command-line Tools (latest)挪凑;
      3. 點擊下方Apply孕索;
      4. 進(jìn)行下載操作;
      5. 下載完成后躏碳,點擊finish關(guān)閉下載頁搞旭,然后點擊Appley應(yīng)用即可;

    3. 錯誤三:執(zhí)行Run報錯:

      Error running pod install
      Error launching application on iPhone 13 Pro.
      

      解決方法:
      1. 菇绵;

    4. 錯誤四:執(zhí)行Run報錯:

          ――― TEMPLATE END ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
      
          [!] Oh no, an error occurred.
      
          Search for existing GitHub issues similar to yours:
          https://github.com/CocoaPods/CocoaPods/search?q=dlopen%28%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.15.4%2Flib%2Fffi_c.bundle%2C+0x0009%29%3A+tried%3A+%27%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.15.4%2Flib%2Fffi_c.bundle%27+%28mach-o+file%2C+but+is+an+incompatible+architecture+%28have+%27arm64%27%2C+need+%27x86_64%27%29%29%2C+%27%2Fusr%2Flib%2Fffi_c.bundle%27+%28no+such+file%29+-+%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.15.4%2Flib%2Fffi_c.bundle&type=Issues
      
          If none exists, create a ticket, with the template displayed above, on:
          https://github.com/CocoaPods/CocoaPods/issues/new
      
          Be sure to first read the contributing guide for details on how to properly submit a ticket:
          https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md
      
          Don't forget to anonymize any private data!
      
          Looking for related issues on cocoapods/cocoapods...
      
      Error output from CocoaPods:
      ?
          Searching for inspections failed: undefined method `map' for nil:NilClass
      
      Error running pod install
      Error launching application on iPhone 13 Pro.
      

      解決方案:可能是因為 M1 芯片的原因:

      1. 執(zhí)行:sudo arch -x86_64 gem install ffi肄渗;
      2. 執(zhí)行:arch -x86_64 pod install; // M1 芯片在 Cocoapods 執(zhí)行 pod install 下載第三方庫前面都需要添加arch -x86_64咬最;
    5. 錯誤五:報錯:

      Could not build the application for the simulator.
      Error launching application on iPhone 13 Pro.
      

      解決方案:

      1. 執(zhí)行:flutter clean翎嫡,重新運行項目,如果不行試試下一步永乌;

      2. 執(zhí)行:flutter channel惑申,查看您當(dāng)前使用的flutter的分支;

        執(zhí)行結(jié)果:

        // 查看當(dāng)前我的flutter處于stable(穩(wěn)定)分支
        Flutter channels:
          master
          dev
          beta
        * stable
        
        

        官網(wǎng)上有一句話:我們強(qiáng)烈建議跟蹤flutter的stable分支翅雏,這是Flutter穩(wěn)定分支。 如果你需要查看最新的變化望几,你可以跟蹤master分支,但注意這是開發(fā)分支靴迫,所以穩(wěn)定性要低得多惕味。

      3. 執(zhí)行:flutter channel masterflutter channel beta,切換到官方master主分支或beta分支開發(fā)即可玉锌;

    6. 錯誤六:更新Flutter版本后報錯:

      /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_math_fork-0.3.3/lib/src/widgets/selectable.dart:407:7: Error: The non-abstract class 'InternalSelectableMathState' is missing implementations for these members:
      
      TextSelectionDelegate.copySelection
      TextSelectionDelegate.cutSelection
      TextSelectionDelegate.pasteText
      TextSelectionDelegate.selectAll Try to either
      provide an implementation,
      inherit an implementation from a superclass or mixin,
      mark the class as abstract, or
      provide a 'noSuchMethod' implementation.
      class InternalSelectableMathState extends State ^^^^^^^^^^^^^^^^^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/services/text_input.dart:985:8: Context: 'TextSelectionDelegate.copySelection' is defined here. void copySelection(SelectionChangedCause cause); ^^^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/services/text_input.dart:965:8: Context: 'TextSelectionDelegate.cutSelection' is defined here. void cutSelection(SelectionChangedCause cause); ^^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/services/text_input.dart:973:16: Context: 'TextSelectionDelegate.pasteText' is defined here. Future pasteText(SelectionChangedCause cause); ^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/services/text_input.dart:979:8: Context: 'TextSelectionDelegate.selectAll' is defined here. void selectAll(SelectionChangedCause cause); ^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_datetime_picker-1.5.1/lib/flutter_datetime_picker.dart:311:32: Warning: Operand of null-aware operation '??' has type 'Color' which excludes null.
      
      'Color' is from 'dart:ui'. color: theme.backgroundColor ?? Colors.white, ^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_neumorphic-3.1.0/lib/src/widget/button.dart:200:14: Error: 'AnimatedScale' is imported from both 'package:flutter/src/widgets/implicit_animations.dart' and 'package:flutter_neumorphic/src/widget/animation/animated_scale.dart'. child: AnimatedScale( ^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_neumorphic-3.1.0/lib/src/widget/switch.dart:167:20: Error: 'AnimatedScale' is imported from both 'package:flutter/src/widgets/implicit_animations.dart' and 'package:flutter_neumorphic/src/widget/animation/animated_scale.dart'. child: AnimatedScale( ^^^^^^^^^^^^^
      
      FAILURE: Build failed with an exception.
      
      * Where:
      Script '/Users/hsh/Documents/code/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1102
      
      * What went wrong:
      Execution failed for task ':app:compileFlutterBuildDebug'.
      > Process 'command '/Users/hsh/Documents/code/flutter/bin/flutter'' finished with non-zero exit value 1
      
      * Try:
      Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
      
      * Get more help at https://help.gradle.org
      
      BUILD FAILED in 29s
      Exception: Gradle task assembleDebug failed with exit code 1
      
      1. 解決方案一:(親測有效-Andy)

        You need to upgrade your dependencies to fix this issue, so run:
        
        flutter pub upgrade
        
      2. 解決方案二:

        Solution: just add flutter_math_fork: ^0.5.0 to your dependencies in pubspec.yaml to force Flutter to use the newer version of the package.
        
    7. 錯誤七:定位問題:Android定位沒有問題芬沉;iOS定位失敗,獲取不到位置信息:

      解決辦法:

      NSLocationUsageDescription
      用于定位使用
      NSLocationAlwaysUsageDescription
      用于始終定位你的當(dāng)前位置
      NSLocationWhenInUseUsageDescription
      用于定位您的當(dāng)前位置
      
      最好還要加上-這個必須要加上阁猜,不然定位還是會失敗
      NSLocationAlwaysAndWhenInUseUsageDescription
      用于定位您的當(dāng)前位置
      
    8. 錯誤八:更新flutter丸逸,運行報錯;

      /Users/kris/Documents/WorkSpace/flutter/.pub-cache/hosted/pub.flutter-io.cn/camera-0.8.1+7/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java:135: 警告: [deprecation] CamcorderProfile中的get(int,int)已過時 return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_HIGH); ^ /Users/kris/Documents/WorkSpace/flutter/.pub-cache/hosted/pub.flutter-io.cn/camera-0.8.1+7/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java:139: 警告: [deprecation] CamcorderProfile中的get(int,int)已過時 return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_2160P); ^ /Users/kris/Documents/WorkSpace/flutter/.pub-cache/hosted/pub.flutter-io.cn/camera-0.8.1+7/android/src/main/java/io/flutter/plugins/camera/features/resolution/ResolutionFeature.java:143: 警告: [deprecation] CamcorderProfile中的get(int,int)已過時 return CamcorderProfile.get(cameraId, CamcorderProfile.QUALITY_1080P); ^ /Users/kris/Documents/WorkSpace/flutter/.pub-cache/hosted/pub.flutter-io.cn/camera-
      

      解決辦法:

      1. 更新第三方庫camera的版本號剃袍,在pubspec.yaml里面配置;
      2. 執(zhí)行flutter pub upgrade更新版本庫憔维;
    9. 錯誤九:更新Flutter報錯:CamcorderProfile deprecated in Android API level 31畏邢;

      解決辦法:

      1. 更新compileSdkVersiontargetSdkVersion版本號,路徑在android/app/build.gradle
      
      android {
      
      // 重點是要更新這個
      compileSdkVersion 31
      
      sourceSets {
          main.java.srcDirs += 'src/main/kotlin'
      }
      ...
      ...
      ...
      
      
      defaultConfig {
          // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
          applicationId "com.yphsh.nrp.koc"
          minSdkVersion 21
          targetSdkVersion 31
          versionCode flutterVersionCode.toInteger()
          versionName flutterVersionName
          ndk {
              abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'
          }
      
      
    10. 錯誤十:模擬器運行報錯:

      Uld: symbol(s) not found for architecture x86_64
      clang: error: linker command failed with exit code 1 (use -v to see invocation)
      note: Using new build system
      note: Planning
      note: Build preparation complete
      note: Building targets in dependency order
      

      解決辦法一:

      可能是該靜態(tài)庫不支持在模擬器下編譯,可使用真機(jī)或Generic iOS Device,一般就不會出現(xiàn)這個錯誤了;
      

      解決辦法二:

      在Build Phases-->Compile Sources(items)中,添加報錯的.m文件,點左下角的"+",在彈出框中找到報錯的.m文件,選中,add
      

      解決辦法三:

      在自制的MYPayBucket.framework中舒萎,TARGET--》BuildSetting--》Valid Architectures中添加x86_64;如下圖所示。
      具體原因章鲤,真機(jī)arm格式咆贬,模擬器x87格式败徊,所以MYPayBucket.framework不支持掏缎。添加x86_64格式就行。
      
11. 錯誤十一: `Android Studio`升級后根欧,執(zhí)行`flutter doctor`報錯:

```
Doctor summary (to see all details, run flutter doctor -v):
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
[?] Flutter (Channel stable, 2.10.2, on macOS 13.2.1 22D68 darwin-arm, locale zh-Hans-MY)
[!] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    ? Could not determine java version
[?] Xcode - develop for iOS and macOS (Xcode 14.2)
[?] Chrome - develop for the web
[!] Android Studio (version 2022.1)
    ? Unable to find bundled Java version.
[?] IntelliJ IDEA Ultimate Edition (version 2022.2.2)
[?] VS Code (version 1.75.1)
[?] Connected device (1 available)
[!] HTTP Host Availability
    ? HTTP host https://maven.google.com/ is not reachable. Reason: An error occurred while checking the HTTP host: Operation timed out

! Doctor found issues in 3 categories.

```

解決辦法一:

1. 在`應(yīng)用程序`中找到`Android Studio`端蛆;
2. 右鍵,選擇`顯示包內(nèi)容`;
3. 打開`Contents`柔袁;
4. 新建`jre`文件夾异逐;
5. 復(fù)制`jar`文件夾下的`Contents`文件夾到新建的`jre`文件夾捶索;


解決方法二:建一個軟鏈

1. 打開終端;
2. 執(zhí)行:`ln -s /Applications/Android\ Studio.app/Contents/jbr /Applications/Android\ Studio.app/Contents/jre`
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灰瞻,一起剝皮案震驚了整個濱河市腥例,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酝润,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件构回,死亡現(xiàn)場離奇詭異疏咐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)浑塞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門酌壕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仅孩,你說我怎么就攤上這事【┬龋” “怎么了溅蛉?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欠气。 經(jīng)常有香客問我镜撩,道長预柒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任憔古,我火速辦了婚禮淋袖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焰情。我一直安慰自己剥懒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布蕊肥。 她就那樣靜靜地躺著蛤肌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪展东。 梳的紋絲不亂的頭發(fā)上炒俱,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音砸王,去河邊找鬼。 笑死谦铃,一個胖子當(dāng)著我的面吹牛榔昔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撒会,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诵肛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起壁顶,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤溜歪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝴猪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嚎莉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年沛豌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叫确。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芍锦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出次乓,到底是詐尸還是另有隱情,我是刑警寧澤票腰,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布女气,位于F島的核電站,受9級特大地震影響逃默,放射性物質(zhì)發(fā)生泄漏簇搅。R本人自食惡果不足惜完域,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一吟税、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肠仪,春花似錦、人聲如沸异旧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽潮针。三九已至,卻和暖如春每篷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背子库。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工吨灭, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留刑巧,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓啊楚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拯辙。 傳聞我的和親對象是個殘疾皇子颜价,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容