Flutter开发桌面应用,Google准备了三年!蓄势待发!

3 篇文章 0 订阅
1 篇文章 0 订阅

已经三年了

Desktop Embedding for Flutter项目,从提交“Initial commit”(2018年2月15日)到现在,已经三年了。

一年前的官方文档仍然警告用户,“不打算用于生产”

终于可以用于生产了

目前该文档已经改成如下:

有两个要点:

  1. 从一个独立的项目到嵌入到flutter,可以说由干儿子变成了亲儿子了
  2. 去掉了不适用于生产环境的提示:
- The code and examples here, and the desktop Flutter libraries they use, are in early stages, and not intended for production use.
- 这里的代码和示例,以及它们使用的桌面Flutter库处于早期阶段,不打算用于生产。

目前新的文档在:Desktop-shells

从文档的历史记录我们可以看到这个发展过程:

2019年12月5日:支持了macos

2020年7月8日:linux平台就已经进入了alpha阶段

2020年9月24日:windows平台进入alpha阶段

截止2020年9月文档中windows平台的状态由“early technical preview”改成了“alpha”,至此三大平台的状态都进入了alpha。

用Flutter开发桌面应用,可以说是蓄势待发了。
2021年2月25日文档有进行了一次变更但仅仅是文本格式变更,难道是在做发布前的准备?

今天有时间,忍不住体验了一下macos端app的开发。分享一下过程:

Flutter桌面应用开发初体验

由于目前处于目前尚处于alpha阶段,因此我们必须将Flutter的channel切换到dev才行。

切换channel

输入“flutter channel dev”结果如下:

$ flutter channel dev
Switching to flutter channel 'dev'...

....

flutter upgrade
git: Switched to a new branch 'dev'
git: Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Successfully switched to flutter channel 'dev'.
To ensure that you're on the latest build from this channel, run 'flutter
upgrade'

更新flutter

上一步的提示,按照提示我们执行“flutter upgrade”进行更新

$ flutter upgrade
Downloading Dart SDK from Flutter engine 6993cb229b99e6771c6c6c2b884ae006d8160a0f...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  199M  100  199M    0     0  10.5M      0  0:00:18  0:00:18 --:--:-- 10.7M
Building flutter tool...
Flutter is already up to date on channel dev
Flutter 1.27.0-8.0.pre • channel dev • https://github.com/flutter/flutter.git
Framework • revision b7d4806243 (7 days ago) • 2021-02-19 09:22:45 -0800
Engine • revision 6993cb229b
Tools • Dart 2.13.0 (build 2.13.0-30.0.dev)

验证

看一下我们的桌面设备是否能找到了

$ flutter devices
Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure
you trust this source!
Downloading Material fonts...                                      457ms
Downloading Gradle Wrapper...                                       33ms
Downloading package sky_engine...                                  158ms
Downloading flutter_patched_sdk tools...                         1,111ms
Downloading flutter_patched_sdk_product tools...                 1,094ms
Downloading darwin-x64 tools...                                     3.3s
Downloading darwin-x64/font-subset tools...                        543ms
2 connected devices:

macOS (desktop) • macos  • darwin-x64     • Mac OS X 10.15.7 19H524 darwin-x64
Chrome (web)    • chrome • web-javascript • Google Chrome 88.0.4324.192

添加platform

以往我们创建的项目都是不带macos的平台的。

我们可以通过下面这条命令,向已有项目添加platform:
“flutter create --platforms=macos .”
执行完这条命令我们可以在项目根目录下发现一个macos目录。

接下来就是激动人心的flutter run 时刻了。
然而和以往不同的是,现在需要我们选择设备了。
即便你没有连接手机,你也已经有两个设备了:

macOS (desktop)        • macos                                    • darwin-x64     • Mac OS X 10.15.7 19H524 darwin-x64
Chrome (web)           • chrome                                   • web-javascript • Google Chrome 88.0.4324.192

这样我们就需要传递设备id了
现在我们通过这条命令就可以启动我们的macos桌面app了。

运行桌面app

flutter run -d macos

桌面应用的一个特点是鼠标移动到一个控件上的时候,可以给用户一个提示。

默认的例子中floatingActionButton的tooltip就是用来设置提示文案的。

当我们将鼠标移动到右下角的悬浮按钮上的时候,就会见到这个提示了。

import 'package:flutter/material.dart';

// ...
class _MyHomePageState extends State<MyHomePage> {
    
  // ...

  @override
  Widget build(BuildContext context) {
    
    return Scaffold(
      // ...
      body: Center(
        // ...
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

如果我们还想在手机上开发应用需要指定设备

列出设备:

如果我们同时连接了安卓和ios手机结果会是这样

$ flutter devices
4 connected devices:

Redmi K30 Pro (mobile) • c7e616ee                                 • android-arm64  • Android 10 (API 29)
xxx的iPhone (mobile)    • 1cbcdf88d261301317e2d83b07fcfbb48501e47d • ios            • iOS 13.6.1
macOS (desktop)        • macos                                    • darwin-x64     • Mac OS X 10.15.7 19H524 darwin-x64
Chrome (web)           • chrome                                   • web-javascript • Google Chrome 88.0.4324.192

按照设备运行

此时如果我们想用安卓手机调试则需要输入:

flutter run -d c7e616ee

如果想要用ios手机调试则输入:

flutter run -d 1cbcdf88d261301317e2d83b07fcfbb48501e47d

折腾完hello word并不过瘾,又将以前的项目拿出来实验。

解决联网问题

然而意外发生了。

SocketException: Connection failed (OS Error: Operation not permitted, errno = 1)

开始我天真的以为这是苹果禁用http的后果,
然后添加了NSAllowsArbitraryLoads:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>
    <!--- ... --->
</dict>
</plist>

上次就是这样成功的解决了iPhone上无法显示图片的问题,
然而这次并不管用。

随后经过探索发现macos还有其独特的权限控制。
参考:
https://github.com/flutter/flutter/issues/47606
https://flutter.dev/desktop#entitlements-and-the-app-sandbox


Important: The com.apple.security.network.server entitlement, which allows incoming network connections, is enabled by default only for debug and profile builds to enable communications between Flutter tools and a running app. If you need to allow incoming network requests in your application, you must add the com.apple.security.network.server entitlement to Runner-Release.entitlements as well, otherwise your app will work correctly for debug or profile testing, but will fail with release builds.

说人话就是:

需要在macos/Runner/DebugProfile.entitlements文件中添加com.apple.security.network.client权限。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.security.app-sandbox</key>
	<true/>
	<key>com.apple.security.cs.allow-jit</key>
	<true/>
	<key>com.apple.security.network.server</key>
	<true/>
	<key>com.apple.security.network.client</key>
	<true/>
</dict>
</plist>

如果你想发布还需要在
macos/Runner/Release.entitlements添加“com.apple.security.network.server”和“com.apple.security.network.client"

再次运行桌面应用:

有点太丑了,随后适配了一下:

感兴趣的同学可以看一下源码:
https://github.com/ovotop/flutterame






⭐️⭐️⭐️⭐️⭐️
⭐️转发请保持文章完整⭐️
⭐️转发请注明出处:https://blog.csdn.net/windcao/article/details/112341856⭐️
⭐️本文作者正眼巴巴盼着你点赞⭐️
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Flutter开发Windows应用是一种跨平台的开发方式,可以让开发者在Windows平台上开发出高质量的应用程序。Flutter提供了一套完整的UI框架和工具,可以帮助开发者快速构建出美观、高效的应用程序。同时,Flutter还支持热重载、动态UI、响应式编程等特性,可以大大提高开发效率和用户体验。如果你想开发Windows应用Flutter是一个不错的选择。 ### 回答2: Flutter是一个崭新的移动应用程序开发框架,它基于Dart开发,并具有独特的自定义窗口渲染引擎,提供了深受开发者喜爱的快速开发能力。目前,Flutter在移动应用开发方面取得了巨大的成功,不过人们也越来越关注Flutter在其他方面的应用场景。 近年来,随着Windows操作系统在不断改进,人们开始注重构建用于Windows平台的高质量应用程序。Flutter社区也已开始把Flutter应用于Windows应用程序开发领域。 Flutter应用于Windows应用程序开发,不仅可以构建高性能的UI,还可以利用Dart语言以及其他特性,构建兼容WINDOWS的高质量应用程序。另外,Flutter提供的快速开发能力显著减少了开发时间和劳动力成本,使得Flutter成为Windows应用程序开发的必备工具。 对于Windows应用程序开发者而言,Flutter开发环境的搭建非常简单。Flutter提供了一套完整的工具包和API,可通过在Windows操作系统上安装Flutter SDK完成设置。 Flutter开发Windows应用程序的不同之处在于,需要考虑不同平台的兼容性问题,并优化应用程序的UI设计和性能。Flutter提供了许多组件和插件,使开发人员能够轻松地构建不同风格和大小的应用程序。同时,Flutter还提供了组件库和文档,可供开发者使用和参考,以提高开发效率。 总之,Flutter已成为开发人员的首选框架之一,以其高性能、高质量和丰富的UI组件而受到开发者的欢迎。使用Flutter开发Windows应用程序,将是一个高效、优质、灵活和具有前瞻性的选择。 ### 回答3: Flutter是一种跨平台的开源框架,用于构建高性能的移动应用桌面应用和Web应用,具有快速开发、高度可定制化和优秀的用户体验。Flutter的跨平台性使得它成为了同类开源框架中的佼佼者,而且它还提供了很多工具和插件来简化开发过程。 谈到Flutter开发Windows应用,我们可以先从桌面应用的角度出发,Flutter目前支持Windows、Linux和macOS三个桌面平台,并且已经发布了稳定版,可以让开发开发高性能的桌面应用Flutter开发桌面应用有以下几个好处: 1. Flutter桌面应用采用相同的代码结构和语言,不需要额外的代码重构或额外学习一门语言。 2. Flutter桌面应用的UI控件库相当强大,支持自定义和扩展,可以构建自定义的UI控件。 3. Flutter桌面应用具有良好的跨平台性,开发者可以一份代码适配多个平台,节省开发成本和时间。 4. Flutter桌面应用具有快速的热重载和调试工具,使开发速度更快,效率更高。 在开发Flutter桌面应用之前,我们需要安装Flutter SDK、 Visual Studio Code或Android Studio等开发工具。然后根据官方文档进行环境配置和项目创建,最后就可以使用Flutter的丰富控件来构建Windows应用了。开发者也可以使用第三方库来增强应用的功能和体验,例如窗体管理和应用更新等。 总的来说,Flutter桌面应用是一种快速、高性能、跨平台的开发方式,有着很好的可定制性和用户体验。通过Flutter开发Windows应用,可以为用户带来更好的应用体验,同时为开发者节省了时间和精力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值