Flutterはデスクトップアプリケーションを開発しており、Googleは3年間準備を進めています。準備ができました!

3年になります

「Flutterプロジェクトのデスクトップ埋め込み」は、「初期コミット」(2018年2月15日)を提出してから現在まで3年になります。

1年前の公式文書は、依然としてユーザーに「本番用ではない」と警告しています。

ついに生産の準備ができました

現在、ドキュメントは次のように変更されています。

2つの主要なポイントがあります:

  1. 独立したプロジェクトからフラッターに埋め込まれるまで、ゴッドソンはプロソンになっていると言えます
  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プラットフォームがアルファ段階に入った

2020年9月24日:Windowsプラットフォームがアルファ段階に入る

2020年9月の時点で、ドキュメント内のWindowsプラットフォームのステータスが「初期テクニカルプレビュー」から「アルファ」に変更されました。これまでのところ、3つの主要なプラットフォームのステータスはアルファに入っています。

Flutterを使用してデスクトップアプリケーションを開発することは、準備ができていると言えます。
2021年2月25日、ドキュメントが変更されましたが、テキスト形式のみが変更されています。リリース前に準備する必要がありますか?

今日は時間があり、macosアプリの開発を体験せずにはいられません。プロセスを共有する:

Flutterデスクトップアプリケーション開発の最初の経験

現在アルファ段階にあるため、Flutterチャネルをdevに切り替える必要があります。

チャンネルを切り替える

「flutterchanneldev」と入力すると、結果は次のようになります。

$ 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

前の手順のプロンプトに従って、プロンプトに従って「flutterupgrade」を実行して更新します

$ 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

プラットフォームを追加する

以前、私たちが作成したプロジェクトはすべて、macosのないプラットフォームでした。

次のコマンドを使用して、既存のプロジェクトにプラットフォームを追加できます:
"flutter create --platforms = macos。"
このコマンドを実行すると、プロジェクトのルートディレクトリの下にmacosディレクトリが見つかります。

次はエキサイティングなフラッターランの瞬間です。
しかし、これまでと違うのは、機器を選ぶ必要があるということです。
携帯電話に接続していない場合でも、すでに2つのデバイスがあります。

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デスクトップアプリを起動できます。

デスクトップアプリを実行する

flutter run -d macos

デスクトップアプリケーションの機能は、マウスがコントロール上を移動すると、ユーザーにプロンプ​​トを表示できることです。

デフォルトの例では、floatingActionButtonのツールチップを使用してプロンプトコピーを設定します。

マウスを右下隅のフローティングボタンに移動すると、このプロンプトが表示されます。

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.
    );
  }
}

それでも携帯電話でアプリケーションを開発したい場合は、デバイスを指定する必要があります

デバイスの一覧表示:

Androidと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

機器に応じて実行

この時点で、Androidスマートフォンでデバッグする場合は、次のように入力する必要があります。

flutter run -d c7e616ee

iOS電話を使用してデバッグする場合は、次のように入力します。

flutter run -d 1cbcdf88d261301317e2d83b07fcfbb48501e47d

こんにちは言葉を投げた後は十分ではありません、そして私は実験のために前のプロジェクトを取り出しました。

ネットワークの問題を解決する

しかし、事故が起こりました。

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

最初は、これはAppleが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 ⭐️
⭐️ この記事の著者はあなたのいいねを楽しみにしています ⭐️

おすすめ

転載: blog.csdn.net/windcao/article/details/114247547