Flutter desarrolla aplicaciones de escritorio, ¡y Google se ha preparado durante tres años! ¡Listo!

Han pasado tres años

El proyecto Desktop Embedding for Flutter ha pasado tres años desde que se envió el "compromiso inicial" (15 de febrero de 2018) hasta ahora.

El documento oficial de hace un año todavía advierte a los usuarios, "no destinado a la producción"

Finalmente listo para la producción

En la actualidad, el documento se ha modificado por el siguiente:

Hay dos puntos principales:

  1. Desde un proyecto independiente hasta estar integrado en Flutter, se puede decir que un ahijado se ha convertido en un pro-hijo.
  2. Se eliminaron las sugerencias que no son aplicables al entorno de producción:
- The code and examples here, and the desktop Flutter libraries they use, are in early stages, and not intended for production use.
- 这里的代码和示例,以及它们使用的桌面Flutter库处于早期阶段,不打算用于生产。

El nuevo documento se encuentra actualmente en: Desktop-shells

A partir de la historia del documento, podemos ver este proceso de desarrollo:

5 de diciembre de 2019: macos compatibles

8 de julio de 2020: la plataforma Linux ha entrado en la etapa alfa

24 de septiembre de 2020: la plataforma Windows entra en la etapa alfa

En septiembre de 2020, el estado de la plataforma Windows en el documento ha cambiado de "vista previa técnica inicial" a "alfa". Hasta ahora, el estado de las tres plataformas principales ha entrado en alfa.

Se puede decir que el uso de Flutter para desarrollar aplicaciones de escritorio está listo para funcionar.
El 25 de febrero de 2021, el documento ha sufrido un cambio pero solo se cambia el formato del texto ¿Se debe preparar antes del lanzamiento?

Hoy tengo tiempo y no puedo evitar experimentar el desarrollo de la aplicación macos. Comparte el proceso:

Experiencia inicial en el desarrollo de aplicaciones de escritorio Flutter

Dado que actualmente se encuentra en la etapa alfa, debemos cambiar el canal Flutter a dev.

Cambiar de canal

Ingrese "flutter channel dev" y el resultado es el siguiente:

$ 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'

Actualizar flutter

De acuerdo con el mensaje del paso anterior, siga las instrucciones para ejecutar la "actualización de flutter" para actualizar

$ 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)

verificación

Ver si se puede encontrar nuestro dispositivo de escritorio

$ 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

Agregar plataforma

En el pasado, los proyectos que creamos eran todas plataformas sin macos.

Podemos agregar una plataforma a un proyecto existente a través del siguiente comando:
"flutter create --platforms = macos". Después de
ejecutar este comando, podemos encontrar un directorio macos en el directorio raíz del proyecto.

El siguiente es el emocionante momento de la carrera de aleteo.
Sin embargo, lo que es diferente al pasado es que ahora debemos elegir el equipo.
Incluso si no está conectado a un teléfono móvil, ya tiene dos dispositivos:

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

Así que necesitamos pasar la identificación del dispositivo.
Ahora podemos iniciar nuestra aplicación de escritorio macos con este comando.

Ejecuta la aplicación de escritorio

flutter run -d macos

Una característica de las aplicaciones de escritorio es que cuando el mouse se mueve sobre un control, puede darle al usuario un mensaje.

En el ejemplo predeterminado, la información sobre herramientas de floatingActionButton se usa para configurar la copia de la solicitud.

Cuando movemos el mouse hacia el botón flotante en la esquina inferior derecha, veremos este mensaje.

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

Si aún queremos desarrollar aplicaciones en teléfonos móviles, necesitamos especificar el dispositivo

Listar dispositivos:

Si conectamos los teléfonos Android e ios al mismo tiempo, el resultado será así

$ 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

Ejecutar según el equipo

En este punto, si queremos depurar con un teléfono Android, debemos ingresar:

flutter run -d c7e616ee

Si desea utilizar el teléfono ios para depurar, ingrese:

flutter run -d 1cbcdf88d261301317e2d83b07fcfbb48501e47d

Después de lanzar la palabra hola no es suficiente, y saqué el proyecto anterior para experimentar.

Resolver problemas de redes

Sin embargo, ocurrió un accidente.

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

Al principio pensé ingenuamente que esto era una consecuencia de la desactivación de http de Apple,
y luego agregué 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>

Esta fue la última vez que resolví con éxito el problema de no poder mostrar imágenes en el iPhone,
pero esta vez no funcionó.

Posteriormente, después de la exploración, se descubrió que macos tiene su control de permisos único.
Referencia:
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.

Hablar de personas es:

Necesita agregar el permiso com.apple.security.network.client en el archivo macos / Runner / DebugProfile.entitlements.

<?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>

Si desea publicar, debe
agregar "com.apple.security.network.server" y "com.apple.security.network.client" en macos / Runner / Release.entitlements

Ejecute la aplicación de escritorio nuevamente:

Era un poco feo y luego lo adaptó:

Los estudiantes interesados ​​pueden consultar el código fuente:
https://github.com/ovotop/flutterame






⭐️ ⭐️⭐️⭐️ ⭐️
⭐️ Reenviar por favor mantenga el artículo intacto ⭐️
⭐️ Indique la fuente de reenvío: https://blog.csdn.net/windcao/article/details/112341856 ⭐️
⭐️ El autor de este artículo espera sus gustos. ⭐️

Supongo que te gusta

Origin blog.csdn.net/windcao/article/details/114247547
Recomendado
Clasificación