第一章: 起步 1.3 搭建Flutter开发环境

跟随《Flutter实战·第二版》学习,建议直接看原书

由于Flutter会同时构建Android和IOS两个平台的发布包,所以Flutter同时依赖Android SDK和iOS SDK,在安装Flutter时也需要安装相应平台的构建工具和SDK

使用镜像

将如下环境变量加入到用户环境变量中

export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
  1. 首先检查默认shell
echo $SHELL
image.png
  1. 之前每个新用户的默认shell是/bin/bash,新版本的macOS Catalina开始,新用户的默认shell改为了zsh,对于zsh,使用.zshrc

终端中输入以下命令:

open .zshrc

回车会打开配置文件,将环境变量添加到文件中并保存:


image.png

生效
执行如下命令

source .zshrc

检查是否生效:

echo $PUB_HOSTED_URL
image.png

输出了设置的地址,代表成功


在macOS上搭建Flutter开发环境
获取Flutter SDK
  1. 去flutter官网下载其最新可用的安装包,官网地址:https://flutter.dev/sdk-archive/#macos
    Flutter官网下载.png

注意,Flutter的渠道版本会不停变动,请以Flutter官网为准。另外,在中国大陆地区,要想正常获取安装包列表或下载安装包,可能需要翻墙

  1. 解压安装包到你想安装的目录,如
cd ~/development
unzip ~/Downloads/flutter_macos_v0.5.1-beta.zip

或者直接从github下载

git clone https://github.com/flutter/flutter.git -b stable
image.png
  1. 添加Flutter相关工具到path中

更新环境变量
将Flutter添加到PATH中,可以在任何终端会话中运行flutter命令。对于所有终端会话永久修改此变量的步骤是和特定计算机系统相关的。通常,您会在打开新窗口时将设置环境变量的命令添加到执行的文件中。
在原先的.zshrc中添加flutter路径
xxx是你的电脑用户名

export PATH=${PATH}:/Users/xxx/flutter/bin:$PATH

仍要执行source .zshrc生效

运行flutter doctor命令

该命令检查你的环境并在命令行窗口中显示报告。
第一次运行flutter命令(如flutter doctor)时,它会下载它自己的依赖项并自行编译。以后再运行就会快得多。缺失的依赖需要安装一下,安装完成后再运行flutter doctor命令来验证是否安装成功。

xxx@xxxdeMacBook-Pro ~ % flutter doctor
Downloading Dart SDK from Flutter engine 890a5fca2e34db413be624fc83aeea8e61d42ce6...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  205M  100  205M    0     0  1631k      0  0:02:08  0:02:08 --:--:-- 2697k
Building flutter tool...

  ╔════════════════════════════════════════════════════════════════════════════╗
  ║                 Welcome to Flutter! - https://flutter.dev                  ║
  ║                                                                            ║
  ║ The Flutter tool uses Google Analytics to anonymously report feature usage ║
  ║ statistics and basic crash reports. This data is used to help improve      ║
  ║ Flutter tools over time.                                                   ║
  ║                                                                            ║
  ║ Flutter tool analytics are not sent on the very first run. To disable      ║
  ║ reporting, type 'flutter config --no-analytics'. To display the current    ║
  ║ setting, type 'flutter config'. If you opt out of analytics, an opt-out    ║
  ║ event will be sent, and then no further information will be sent by the    ║
  ║ Flutter tool.                                                              ║
  ║                                                                            ║
  ║ By downloading the Flutter SDK, you agree to the Google Terms of Service.  ║
  ║ Note: The Google Privacy Policy describes how data is handled in this      ║
  ║ service.                                                                   ║
  ║                                                                            ║
  ║ Moreover, Flutter includes the Dart SDK, which may send usage metrics and  ║
  ║ crash reports to Google.                                                   ║
  ║                                                                            ║
  ║ Read about data we send with crash reports:                                ║
  ║ https://flutter.dev/docs/reference/crash-reporting                         ║
  ║                                                                            ║
  ║ See Google's privacy policy:                                               ║
  ║ https://policies.google.com/privacy                                        ║
  ╚════════════════════════════════════════════════════════════════════════════╝


Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure
you trust this source!
Downloading Material fonts...                                    2,207ms
Downloading Gradle Wrapper...                                      123ms
Downloading package sky_engine...                                  794ms
Downloading flutter_patched_sdk tools...                         1,989ms
Downloading flutter_patched_sdk_product tools...                 1,750ms
Downloading darwin-x64 tools...                                    20.2s
Downloading libimobiledevice...                                    357ms
Downloading usbmuxd...                                             244ms
Downloading libplist...                                            103ms
Downloading openssl...                                           1,496ms
Downloading ios-deploy...                                          194ms
Downloading darwin-x64/font-subset tools...                      1,414ms
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.8.1, on macOS 12.0.1 21A559 darwin-x64, locale
    zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ 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.
[✓] Xcode - develop for iOS and macOS (Xcode 13.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 3.6)
[✓] IntelliJ IDEA Ultimate Edition (version 2018.2)
[✓] VS Code (version 1.59.0)
[✓] Connected device (2 available)

! Doctor found issues in 1 category.

可以看到有issues

[!] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ 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.

对于cmdline-tools component is missing可以参考这个cmdline-tools component is missing

再次运行flutter doctor


image.png

根据提示
运行如下,根据终端中提示一路y

flutter doctor --android-licenses

再次执行flutter doctor


image.png
升级Flutter
Flutter SDK分支

Flutter SDK有多个分支,如beta、dev、master、stable,其中stable分支为稳定分支(日后有新的稳定版本发布后可能也会有新的稳定分支,如1.0.0),dev和master为开发分支,安装flutter后,你可以运行flutter channel查看所有分支

image.png

带"*"号的分支即你本地的Flutter SDK 跟踪的分支,要切换分支,可以使用flutter channel beta 或 flutter channel master,Flutter官方建议跟踪稳定分支,但你也可以跟踪master分支,这样可以查看最新的变化,但这样稳定性要低的多

升级Flutter SDK和依赖包

要升级flutter sdk,只需一句命令:

flutter upgrade

该命令会同时更新Flutter SDK和你的flutter项目依赖包。如果你只想更新项目依赖包(不包括Flutter SDK),可以使用如下命令:

  • flutter packages get获取项目所有的依赖包。
  • flutter packages upgrade 获取项目所有依赖包的最新版本。
IDE配置与使用

Flutter官方建议使用Android Studio和VS Code之一以获得更好的开发体验。Flutter官方提供了这两款编辑器插件,通过IDE和插件可获得代码补全、语法高亮、widget编辑辅助、运行和调试支持等功能,可以帮助我们极大的提高开发效率

安装Flutter和Dart插件

需要安装两个插件:

  • Flutter插件: 支持Flutter开发工作流 (运行、调试、热重载等)。
  • Dart插件: 提供代码分析 (输入代码时进行验证、代码补全等)

安装步骤:

  1. 启动Android Studio
  2. 打开插件首选项(macOS: Configure->Preferences-> Plugins;windows: File->Settings->Plugins)
  3. Marketplace,搜索flutter并点击install


    image.png
  4. 重启Android Studio后插件生效
使用Android Studio创建一个Flutter项目
image.png
  1. Start a new Flutter project
  2. 选择Flutter Application作为project类型,点击Next
  3. 输入项目名,然后Next
  4. 点击Finish
  5. 等待Android Studio安装SDK并创建项目

在项目目录中,应用程序的代码位于lib/main.dart

运行应用程序
  1. 定位到工具栏


    image.png
  2. 选择一个设备

  3. 点击Run

  4. 如果一切正常,会在模拟器或者自己的设备上看到启动的应用程序

Simulator Screen Shot - iPhone 13 - 2021-12-28 at 14.02.13.png
体验热重载

Flutter 可以通过 热重载(hot reload) 实现快速的开发周期,热重载就是无需重启应用程序就能实时加载修改后的代码,并且不会丢失状态。简单的对代码进行更改,然后告诉IDE或命令行工具你需要重新加载(点击reload按钮),你就会在你的设备或模拟器上看到更改

  1. 打开lib/main.dart文件
  2. 将字符串 'You have pushed the button this many times:' 更改为 'You have clicked the button this many times:'
  3. 不要按“停止”按钮; 让您的应用继续运行.
  4. 要查更改,请调用 Save (cmd-s / ctrl-s),或者点击 热重载按钮 (带有闪电⚡️图标的按钮)。会立即在运行的应用程序中看到更新的字符串。
连接iOS真机设备

要将Flutter应用安装到iOS真机设备,需要一些额外的工具和一个Apple帐户,还需要在Xcode中进行一些设置。

  1. 安装homebrew
  2. 打开终端并运行如下这些命令:
brew update
brew install --HEAD libimobiledevice
brew install ideviceinstaller ios-deploy cocoapods
pod setup

如果这些命令中的任何一个失败并出现错误,请运行brew doctor并按照说明解决问题

  1. 遵循Xcode签名流程来配置您的项目:
  • 在你Flutter项目目录中通过 open ios/Runner.xcworkspace 打开默认的Xcode workspace.
  • 在Xcode中,选择导航面板左侧中的Runner项目。
  • 在Runner target设置页面中,确保在 General > Signing > Team 下选择了你的开发团队。当你选择一个团队时,Xcode会创建并下载开发证书,向你的设备注册你的帐户,并创建和下载配置文件(如果需要)。
  • 要开始您的第一个iOS开发项目,您可能需要使用您的Apple ID登录Xcode

任何Apple ID都支持开发和测试,但若想将应用分发到App Store,就必须注册Apple开发者计划

  1. 当您第一次attach真机设备进行iOS开发时,需要同时信任你的Mac和该设备上的开发证书。首次将iOS设备连接到Mac时,请在对话框中选择 Trust
  2. 如果Xcode中的自动签名失败,请验证项目的 General > Identity > Bundle Identifier 值是否唯一
  3. 运行 flutter run启动flutter应用程序
Hot Reload 热重载失效问题

在给 Terminal 之类的终端模拟器设置代理之后,会导致“Hot Reload”重载失效,此时调用 Save (cmd-s / ctrl-s)将不会进行热重载,热重载按钮 (带有闪电⚡️图标的按钮)也不会显示,将代理移除即可解决

另外,有些情况下热重载是不生效的,比如修改了main函数、修改了全局静态方法等,读者可以认为“Hot Reload”只会重新构建整个widget树,如果变动不在构建widget树的过程中,“Hot Reload”就不会起作用,这时直接重启 App 就行

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容