从2.10之后的版本,flutter已经正式支持构建Windows应用。不过距离实现全平台构建,还需要考虑很多问题,flutter构建的应用更加适合移动端的使用习惯,如果需要构建Windows应用,我的建议是使用一些适合桌面端的widget。
具体方法如下:
条件
- 需要安装Visual Studio 2019或者Visual Studio 2022,简言之,需要安装Windows 10 SDK。
- 2.10之前的版本是默认关闭的。Linux和Mac是默认关闭的,可以手动进行打开。
方法
1. 打开Windows的平台支持
PowerShell输入如下指令(如下命令可以使用flutter config
查看,2.10以上的版本默认开启)
flutter config --enable-windows-desktop # 其他平台 flutter config --[no-]enable-macos-desktop flutter config --[no-]enable-linux-desktop
可以使用flutter doctor
查看情况
如果报错:
$ flutter doctor Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source! Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, 3.0.1, on Microsoft Windows [版本 10.0.22000.708], locale zh-CN) [√] Android toolchain - develop for Android devices (Android SDK version 32.0.0) [√] Chrome - develop for the web [☠] Visual Studio - develop for Windows (the doctor check crashed) X Due to an error, the doctor check did not complete. If the error message below is not helpful, please let us know about this issue at https://github.com/flutter/flutter/issues. X Exception: Bad UTF-8 encoding (U+FFFD; REPLACEMENT CHARACTER) found while decoding string: [ { "instanceId": "5cb9d9e1", "installDate": "2022-06-12T07:42:21Z", "installationName": "VisualStudio/17.2.3+32526.322", "installationPath": "D:\\Program Files\\Microsoft Visual Studio\\2022\\Community", "installationVersion": "17.2.32526.322", "productId": "Microsoft.VisualStudio.Product.Community", "productPath": "D:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\devenv.exe", "state": 4294967295, "isComplete": true, "isLaunchable": true, "isPrerelease": false, "isRebootRequired": false, "displayName": "Visual Studio Community 2022", "description": "����ǿ��� IDE����ѧ��������Դ��������ߺ������ʹ��", "channelId": "VisualStudio.17.Release", "channelUri": "https://aka.ms/vs/17/release/channel", "enginePath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\resources\\app\\ServiceHub\\Services\\Microsoft.VisualStudio.Setup.Service", "installedChannelUri": "https://aka.ms/vs/17/release/channel", "releaseNotes": "https://docs.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.2#17.2.3", "thirdPartyNotices": "https://go.microsoft.com/fwlink/?LinkId=661288", "updateDate": "2022-06-12T07:42:21.8130931Z", "catalog": { "buildBranch": "d17.2", "buildVersion": "17.2.32526.322", "id": "VisualStudio/17.2.3+32526.322", "localBuild": "build-lab", "manifestName": "VisualStudio", "manifestType": "installer", "productDisplayVersion": "17.2.3", "productLine": "Dev17", "productLineVersion": "2022", "productMilestone": "RTW", "productMilestoneIsPreRelease": "False", "productName": "Visual Studio", "productPatchVersion": "3", "productPreReleaseMilestoneSuffix": "1.0", "productSemanticVersion": "17.2.3+32526.322", "requiredEngineVersion": "3.2.2148.26540" }, "properties": { "campaignId": "2030:fe40db45-8e98-49e0-82b4-afb6aade85b4", "channelManifestId": "VisualStudio.17.Release/17.2.3+32526.322", "nickname": "", "setupEngineFilePath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\setup.exe" } } ] . The Flutter team would greatly appreciate if you could file a bug explaining exactly what you were doing when this happened: https://github.com/flutter/flutter/issues/new/choose The source bytes were: [91, 13, 10, 32, 32, 123, 13, 10, 32, 32, 32, 32, 34, 105, 110, 115, 116, 97, 110, 99, 101, 73, 100, 34, 58, 32, 34, 53, 99, 98, 57, 100, 57, 101, 49, 34, 44, 13, 10, 32, 32, 32, 32, 34, 105, 110, 115, 116, 97, 108, 108, 68, 97, 116, 101, 34, 58, 32, 34, 50, 48, 50, 50, 45, 48, 54, 45, 49, 50, 84, 48, 55, 58, 52, 50, 58, 50, 49, 90, 34, 44, 13, 10, 32, 32, 32, 32, 34, 105, 110, 115, 116, 97, 108, 108, 97, 116, 105, 111, 110, 78, 97, 109, 101, 34, 58, 32, 34, 86, 105, 115, 117, 97, 108, 83, 116, 117, 100, 105, 111, 47, 49, 55, 46, 50, 46, 51, 43, 51, 50, 53, 50, 54, 46, 51, 50, 50, 34, 44, 13, 10, 32, 32, 32, 32, 34, 105, 110, 115, 116, 97, 108, 108, 97, 116, 105, 111, 110, 80, 97, 116, 104, 34, 58, 32, 34, 68, 58, 92, 92, 80, 114, 111, 103, 114, 97, 109, 32, 70, 105, 108, 101, 115, 92, 92, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 86, 105, 115, 117, 97, 108, 32, 83, 116, 117, 100, 105, 111, 92, 92, 50, 48, 50, 50, 92, 92, 67, 111, 109, 109, 117, 110, 105, 116, 121, 34, 44, 13, 10, 32, 32, 32, 32, 34, 105, 110, 115, 116, 97, 108, 108, 97, 116, 105, 111, 110, 86, 101, 114, 115, 105, 111, 110, 34, 58, 32, 34, 49, 55, 46, 50, 46, 51, 50, 53, 50, 54, 46, 51, 50, 50, 34, 44, 13, 10, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 73, 100, 34, 58, 32, 34, 77, 105, 99, 114, 111, 115, 111, 102, 116, 46, 86, 105, 115, 117, 97, 108, 83, 116, 117, 100, 105, 111, 46, 80, 114, 111, 100, 117, 99, 116, 46, 67, 111, 109, 109, 117, 110, 105, 116, 121, 34, 44, 13, 10, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 80, 97, 116, 104, 34, 58, 32, 34, 68, 58, 92, 92, 80, 114, 111, 103, 114, 97, 109, 32, 70, 105, 108, 101, 115, 92, 92, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 86, 105, 115, 117, 97, 108, 32, 83, 116, 117, 100, 105, 111, 92, 92, 50, 48, 50, 50, 92, 92, 67, 111, 109, 109, 117, 110, 105, 116, 121, 92, 92, 67, 111, 109, 109, 111, 110, 55, 92, 92, 73, 68, 69, 92, 92, 100, 101, 118, 101, 110, 118, 46, 101, 120, 101, 34, 44, 13, 10, 32, 32, 32, 32, 34, 115, 116, 97, 116, 101, 34, 58, 32, 52, 50, 57, 52, 57, 54, 55, 50, 57, 53, 44, 13, 10, 32, 32, 32, 32, 34, 105, 115, 67, 111, 109, 112, 108, 101, 116, 101, 34, 58, 32, 116, 114, 117, 101, 44, 13, 10, 32, 32, 32, 32, 34, 105, 115, 76, 97, 117, 110, 99, 104, 97, 98, 108, 101, 34, 58, 32, 116, 114, 117, 101, 44, 13, 10, 32, 32, 32, 32, 34, 105, 115, 80, 114, 101, 114, 101, 108, 101, 97, 115, 101, 34, 58, 32, 102, 97, 108, 115, 101, 44, 13, 10, 32, 32, 32, 32, 34, 105, 115, 82, 101, 98, 111, 111, 116, 82, 101, 113, 117, 105, 114, 101, 100, 34, 58, 32, 102, 97, 108, 115, 101, 44, 13, 10, 32, 32, 32, 32, 34, 100, 105, 115, 112, 108, 97, 121, 78, 97, 109, 101, 34, 58, 32, 34, 86, 105, 115, 117, 97, 108, 32, 83, 116, 117, 100, 105, 111, 32, 67, 111, 109, 109, 117, 110, 105, 116, 121, 32, 50, 48, 50, 50, 34, 44, 13, 10, 32, 32, 32, 32, 34, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 34, 58, 32, 34, 185, 166, 196, 220, 199, 191, 180, 243, 181, 196, 32, 73, 68, 69, 163, 172, 185, 169, 209, 167, 201, 250, 161, 162, 191, 170, 183, 197, 212, 180, 180, 250, 194, 235, 178, 206, 211, 235, 213, 223, 186, 205, 184, 246, 200, 203, 195, 226, 183, 209, 202, 185, 211, 195, 34, 44, 13, 10, 32, 32, 32, 32, 34, 99, 104, 97, 110, 110, 101, 108, 73, 100, 34, 58, 32, 34, 86, 105, 115, 117, 97, 108, 83, 116, 117, 100, 105, 111, 46, 49, 55, 46, 82, 101, 108, 101, 97, 115, 101, 34, 44, 13, 10, 32, 32, 32, 32, 34, 99, 104, 97, 110, 110, 101, 108, 85, 114, 105, 34, 58, 32, 34, 104, 116, 116, 112, 115, 58, 47, 47, 97, 107, 97, 46, 109, 115, 47, 118, 115, 47, 49, 55, 47, 114, 101, 108, 101, 97, 115, 101, 47, 99, 104, 97, 110, 110, 101, 108, 34, 44, 13, 10, 32, 32, 32, 32, 34, 101, 110, 103, 105, 110, 101, 80, 97, 116, 104, 34, 58, 32, 34, 67, 58, 92, 92, 80, 114, 111, 103, 114, 97, 109, 32, 70, 105, 108, 101, 115, 32, 40, 120, 56, 54, 41, 92, 92, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 86, 105, 115, 117, 97, 108, 32, 83, 116, 117, 100, 105, 111, 92, 92, 73, 110, 115, 116, 97, 108, 108, 101, 114, 92, 92, 114, 101, 115, 111, 117, 114, 99, 101, 115, 92, 92, 97, 112, 112, 92, 92, 83, 101, 114, 118, 105, 99, 101, 72, 117, 98, 92, 92, 83, 101, 114, 118, 105, 99, 101, 115, 92, 92, 77, 105, 99, 114, 111, 115, 111, 102, 116, 46, 86, 105, 115, 117, 97, 108, 83, 116, 117, 100, 105, 111, 46, 83, 101, 116, 117, 112, 46, 83, 101, 114, 118, 105, 99, 101, 34, 44, 13, 10, 32, 32, 32, 32, 34, 105, 110, 115, 116, 97, 108, 108, 101, 100, 67, 104, 97, 110, 110, 101, 108, 85, 114, 105, 34, 58, 32, 34, 104, 116, 116, 112, 115, 58, 47, 47, 97, 107, 97, 46, 109, 115, 47, 118, 115, 47, 49, 55, 47, 114, 101, 108, 101, 97, 115, 101, 47, 99, 104, 97, 110, 110, 101, 108, 34, 44, 13, 10, 32, 32, 32, 32, 34, 114, 101, 108, 101, 97, 115, 101, 78, 111, 116, 101, 115, 34, 58, 32, 34, 104, 116, 116, 112, 115, 58, 47, 47, 100, 111, 99, 115, 46, 109, 105, 99, 114, 111, 115, 111, 102, 116, 46, 99, 111, 109, 47, 101, 110, 45, 117, 115, 47, 118, 105, 115, 117, 97, 108, 115, 116, 117, 100, 105, 111, 47, 114, 101, 108, 101, 97, 115, 101, 115, 47, 50, 48, 50, 50, 47, 114, 101, 108, 101, 97, 115, 101, 45, 110, 111, 116, 101, 115, 45, 118, 49, 55, 46, 50, 35, 49, 55, 46, 50, 46, 51, 34, 44, 13, 10, 32, 32, 32, 32, 34, 116, 104, 105, 114, 100, 80, 97, 114, 116, 121, 78, 111, 116, 105, 99, 101, 115, 34, 58, 32, 34, 104, 116, 116, 112, 115, 58, 47, 47, 103, 111, 46, 109, 105, 99, 114, 111, 115, 111, 102, 116, 46, 99, 111, 109, 47, 102, 119, 108, 105, 110, 107, 47, 63, 76, 105, 110, 107, 73, 100, 61, 54, 54, 49, 50, 56, 56, 34, 44, 13, 10, 32, 32, 32, 32, 34, 117, 112, 100, 97, 116, 101, 68, 97, 116, 101, 34, 58, 32, 34, 50, 48, 50, 50, 45, 48, 54, 45, 49, 50, 84, 48, 55, 58, 52, 50, 58, 50, 49, 46, 56, 49, 51, 48, 57, 51, 49, 90, 34, 44, 13, 10, 32, 32, 32, 32, 34, 99, 97, 116, 97, 108, 111, 103, 34, 58, 32, 123, 13, 10, 32, 32, 32, 32, 32, 32, 34, 98, 117, 105, 108, 100, 66, 114, 97, 110, 99, 104, 34, 58, 32, 34, 100, 49, 55, 46, 50, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 98, 117, 105, 108, 100, 86, 101, 114, 115, 105, 111, 110, 34, 58, 32, 34, 49, 55, 46, 50, 46, 51, 50, 53, 50, 54, 46, 51, 50, 50, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 105, 100, 34, 58, 32, 34, 86, 105, 115, 117, 97, 108, 83, 116, 117, 100, 105, 111, 47, 49, 55, 46, 50, 46, 51, 43, 51, 50, 53, 50, 54, 46, 51, 50, 50, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 108, 111, 99, 97, 108, 66, 117, 105, 108, 100, 34, 58, 32, 34, 98, 117, 105, 108, 100, 45, 108, 97, 98, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 109, 97, 110, 105, 102, 101, 115, 116, 78, 97, 109, 101, 34, 58, 32, 34, 86, 105, 115, 117, 97, 108, 83, 116, 117, 100, 105, 111, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 109, 97, 110, 105, 102, 101, 115, 116, 84, 121, 112, 101, 34, 58, 32, 34, 105, 110, 115, 116, 97, 108, 108, 101, 114, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 68, 105, 115, 112, 108, 97, 121, 86, 101, 114, 115, 105, 111, 110, 34, 58, 32, 34, 49, 55, 46, 50, 46, 51, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 76, 105, 110, 101, 34, 58, 32, 34, 68, 101, 118, 49, 55, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 76, 105, 110, 101, 86, 101, 114, 115, 105, 111, 110, 34, 58, 32, 34, 50, 48, 50, 50, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 77, 105, 108, 101, 115, 116, 111, 110, 101, 34, 58, 32, 34, 82, 84, 87, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 77, 105, 108, 101, 115, 116, 111, 110, 101, 73, 115, 80, 114, 101, 82, 101, 108, 101, 97, 115, 101, 34, 58, 32, 34, 70, 97, 108, 115, 101, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 78, 97, 109, 101, 34, 58, 32, 34, 86, 105, 115, 117, 97, 108, 32, 83, 116, 117, 100, 105, 111, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 80, 97, 116, 99, 104, 86, 101, 114, 115, 105, 111, 110, 34, 58, 32, 34, 51, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 80, 114, 101, 82, 101, 108, 101, 97, 115, 101, 77, 105, 108, 101, 115, 116, 111, 110, 101, 83, 117, 102, 102, 105, 120, 34, 58, 32, 34, 49, 46, 48, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 112, 114, 111, 100, 117, 99, 116, 83, 101, 109, 97, 110, 116, 105, 99, 86, 101, 114, 115, 105, 111, 110, 34, 58, 32, 34, 49, 55, 46, 50, 46, 51, 43, 51, 50, 53, 50, 54, 46, 51, 50, 50, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 114, 101, 113, 117, 105, 114, 101, 100, 69, 110, 103, 105, 110, 101, 86, 101, 114, 115, 105, 111, 110, 34, 58, 32, 34, 51, 46, 50, 46, 50, 49, 52, 56, 46, 50, 54, 53, 52, 48, 34, 13, 10, 32, 32, 32, 32, 125, 44, 13, 10, 32, 32, 32, 32, 34, 112, 114, 111, 112, 101, 114, 116, 105, 101, 115, 34, 58, 32, 123, 13, 10, 32, 32, 32, 32, 32, 32, 34, 99, 97, 109, 112, 97, 105, 103, 110, 73, 100, 34, 58, 32, 34, 50, 48, 51, 48, 58, 102, 101, 52, 48, 100, 98, 52, 53, 45, 56, 101, 57, 56, 45, 52, 57, 101, 48, 45, 56, 50, 98, 52, 45, 97, 102, 98, 54, 97, 97, 100, 101, 56, 53, 98, 52, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 99, 104, 97, 110, 110, 101, 108, 77, 97, 110, 105, 102, 101, 115, 116, 73, 100, 34, 58, 32, 34, 86, 105, 115, 117, 97, 108, 83, 116, 117, 100, 105, 111, 46, 49, 55, 46, 82, 101, 108, 101, 97, 115, 101, 47, 49, 55, 46, 50, 46, 51, 43, 51, 50, 53, 50, 54, 46, 51, 50, 50, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 110, 105, 99, 107, 110, 97, 109, 101, 34, 58, 32, 34, 34, 44, 13, 10, 32, 32, 32, 32, 32, 32, 34, 115, 101, 116, 117, 112, 69, 110, 103, 105, 110, 101, 70, 105, 108, 101, 80, 97, 116, 104, 34, 58, 32, 34, 67, 58, 92, 92, 80, 114, 111, 103, 114, 97, 109, 32, 70, 105, 108, 101, 115, 32, 40, 120, 56, 54, 41, 92, 92, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 86, 105, 115, 117, 97, 108, 32, 83, 116, 117, 100, 105, 111, 92, 92, 73, 110, 115, 116, 97, 108, 108, 101, 114, 92, 92, 115, 101, 116, 117, 112, 46, 101, 120, 101, 34, 13, 10, 32, 32, 32, 32, 125, 13, 10, 32, 32, 125, 13, 10, 93, 13, 10] [√] Android Studio (version 2021.2) [√] IntelliJ IDEA Ultimate Edition (version 2018.3) [√] Connected device (4 available) [√] HTTP Host Availability ! Doctor found issues in 1 category.
则需要更新Flutter SDK到3.0.2以上的版本即可,如下:
$ flutter upgrade
2. 在旧项目中添加Windows平台支持
在项目地址输入如下指令
flutter create --platforms=windows[,macos,linux] .
注意: 项目的名称必须是全小写,如果出现大小写则会报错
"TxxxFxxx" is not a valid Dart package name. See https://dart.dev/tools/pub/pubspec#name for more information.
3. 构建Windows项目exe
flutter build windows