3、Flutter Multiplatform - desktop;

Flutter for Desktop

  Flutter for Desktop最初是为了开发FlutterWindowsmacOSLinux嵌入而创建的项目,这项工作后来成为Flutter的一部分。而此项目现在只是在当前状态下使用这些库构建Flutter应用程序的示例和测试环境,它还包括一些实验性的早期桌面插件。

  Flutter for Desktop仍处于早期阶段。 此项目的代码并不稳定,并且也不适合生产使用

桌面shell

  Flutter team正在开展以扩展Flutter支持桌面应该作为目标的工作,允许开发人员使用Flutter创建macOSWindowsLinux应用程序。

  从长远来看,将创建一个完全集成的解决方案,用于桌面平台的Flutter创建,Flutter运行和Flutter构建工作,但目前此项目仍在进行中。

当前的状态

Flutter桌面API仍处于开发的早期阶段,如有更改,恕不另行通知。 也不会提供APIABI的向后兼容性。 在任何Flutter更新之后,使用这些库的任何代码都需要更新和重新编译。

macOS

  这是最成熟的桌面平台(出于各种原因,包括它与已经支持的iOS非常接近)。

  以Flutter开头的类与iOS共享,应该基本稳定。以FLE开头的类仍处于早期阶段。

Windows

  当前的Windows shellGLFW占位符,以便进行早期实验。它将在未来被Win32UWP shell替换,允许在应用程序中嵌入Flutter视图。最终shellAPI与当前实现将完全不同。

Linux

  当前的Linux shellGLFW占位符,以便进行早期实验。Flutter team计划创建一个库,让你可以嵌入Flutter,无论是使用GTK +QtwxWidgetsMotif还是其他任意用于应用程序的其他部分的工具包,但还没有确定一个好的方案。 所以,目前的计划是支持GTK +,其中添加对其他工具包的支持将非常简单。最终shellAPI与当前实现将完全不同。

Plugins

  所有平台都支持编写插件,但是,目前很少有插件实际上具有桌面支持(例如flutter-desktop-embedding项目中的这些插件)。

Tooling

  在Flutter工具中支持桌面是一项正在进行的工作。要使用任何支持(例如flutter设备列出的主机),目前必须要求:

  • 不能在稳定的Flutter channel上。这是为了表明桌面支持尚未被认为是稳定的。
    • 应该始终及时更新此库和Flutter,因为桌面的重大更改经常发生。
  • 必须将ENABLE_FLUTTER_DESKTOP环境变量设置为true。这是为了避免在制定长期解决方案时干扰现有的移动开发工作流程。
    • macOS/Linux: export ENABLE_FLUTTER_DESKTOP=true
    • Windows: $env:ENABLE_FLUTTER_DESKTOP="true" (PowerShell) 或者 set NABLE_FLUTTER_DESKTOP=true (CMD).
预构建的Shell库

  默认情况下,桌面库不会被下载,但可以通过运行带有--linux- macos--windows标志的Flutter预缓存下载到Flutter的引擎工件缓存中,具体取决于开发平台。目前只有debug库可用。

C++ Wrapper

  WindowsLinux库提供了C API。 为了更容易使用它们,可以使用C ++ Wrapper,可以将其构建到应用程序中以提供更高级别的APIprecache命令会将此Wrapper的源代码下载到库旁边的cpp_client_wrapper文件夹中。

使用Shells

  由于flutter create还不支持桌面,因此需要一个runner应用程序。 flutter-desktop-embedding项目为每个桌面平台提供了简单的运行程序,可以使用flutter工具进行这些桌面支持。

  或者,如果熟悉在平台上进行原生开发,则可以使用shell编写自己的应用程序。 有关使用它们的信息,可以参阅适用于平台的库附带的标头。将来会有更多文件; 现在,查看flutter-desktop-embedding示例以查看它是如何使用它们的。 除了链接Flutter库之外,应用程序还需要捆绑您的Flutter assets。 在WindowsLinux上,还需要来自Flutter引擎的ICU数据(在Flutter文件夹bin/cache/ artifacts/engine目录下查找icudtl.dat)。

Plugins
macOS

  在设置FLEViewController之前,在调用launchEngine之前...,在每个要使用的插件上调用-registerWithRegistrar: 例如:

[XYZMyAwesomePlugin registerWithRegistrar:
      [myFlutterViewController registrarForPlugin:"XYZMyAwesomePlugin"]];
复制代码
Windows/Linux

  创建Flutter窗口控制器后,请调用插件的注册功能。 例如:

 MyAwesomePluginRegisterWithRegistrar(
      flutter_controller.GetRegistrarForPlugin("MyAwesomePlugin"));
复制代码
Flutter的应用要求

  由于Flutter框架尚未完全支持桌面平台,因此现有的Flutter应用程序可能需要稍加修改才能运行。

目标平台

  大多数应用程序需要将应用程序的目标平台覆盖到其中一个支持的,以避免“未知平台”异常。可以对单个目标进行编码:

import 'package:flutter/foundation.dart'
    show debugDefaultTargetPlatformOverride;
[...]

void main() {
  debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
  [...]
}
复制代码

  如果代码需要在移动设备和桌面上运行,或者您希望在不同的桌面平台上运行不同的代码,则可以使用Platform进行区别。 例如,上面main()中的行可以替换为:

/// If the current platform is desktop, override the default platform to
/// a supported platform (iOS for macOS, Android for Linux and Windows).
/// Otherwise, do nothing.
void _setTargetPlatformForDesktop() {
  TargetPlatform targetPlatform;
  if (Platform.isMacOS) {
    targetPlatform = TargetPlatform.iOS;
  } else if (Platform.isLinux || Platform.isWindows) {
    targetPlatform = TargetPlatform.android;
  }
  if (targetPlatform != null) {
    debugDefaultTargetPlatformOverride = targetPlatform;
  }
}
复制代码

注意,使用的目标平台不仅会影响窗口小部件的行为和外观,还会影响Flutter对平台上的可用内容,例如字体;

Fonts

  Flutter应用程序可能默认为目标平台标准的字体,但在桌面上不可用。例如,如果目标平台是TargetPlatform.iOS,那么Material库将默认为San Francisco,它可以在macOS上使用,但不能在LinuxWindows上使用。

  大多数应用程序需要基于主机平台设置字体(例如,通过ThemeData),或者设置与应用程序捆绑在一起的特定字体。如果没有额外的字体规范(例如,DEBUG横幅的文本),其他不使用ThemeData的小部件可能无法显示。

Tools

  运行flutter doctor,并确保没有报告与平台相关的部分的问题。

  doctorWindowsLinux的支持即将推出; 要求是:

  • Linux:Make,以及最新版本的clang
  • Windows:Visual Studio 20172019,包括Desktop development with C++

运行git仓库的项目

Example

  设置好所有内容后只需在示例目录中运行桌面Flutter应用程序;

注意:目前只有调试模式可用。 使用--release运行会成功,但结果仍然是使用调试Flutter配置:asserts将触发等等。

IDEs

  如果要使用IDE在桌面上运行Flutter项目,则需要为IDE设置ENABLE_FLUTTER_DESKTOP

  • VS Code: 在VS Code settings.json中添加dart.env:
    "dart.env": {
      "ENABLE_FLUTTER_DESKTOP": true,
    }
    复制代码
  • IntelliJ / Android Studio:需要使用操作系统的常规过程为应用程序设置环境变量。 如果设备菜单将开发机器列为设备,该变量就已正确设置。
Flutter中的TextField是一个常用的输入控件,它允许用户在应用程序中输入文本。 TextField通常用于表单中,可以接收用户输入的文本,比如用户名、密码、电子邮件地址等。 以下是一个基本的TextField示例: ```dart TextField( decoration: InputDecoration( hintText: '请输入文本', ), ); ``` 在上面的示例中,我们使用了decoration属性来设置TextField的外观,其中hintText属性用于设置提示文本。 TextField还有许多其他的属性可以设置,比如maxLength(允许输入的最大长度)、keyboardType(键盘类型)、obscureText(是否隐藏输入内容)等等。 下面是一个更完整的TextField示例: ```dart class MyTextField extends StatefulWidget { @override _MyTextFieldState createState() => _MyTextFieldState(); } class _MyTextFieldState extends State<MyTextField> { final TextEditingController _controller = TextEditingController(); @override Widget build(BuildContext context) { return TextField( controller: _controller, maxLength: 10, keyboardType: TextInputType.text, obscureText: true, decoration: InputDecoration( hintText: '请输入文本', labelText: '文本框', prefixIcon: Icon(Icons.text_fields), suffixIcon: IconButton( icon: Icon(Icons.clear), onPressed: () { setState(() { _controller.clear(); }); }, ), border: OutlineInputBorder(), ), onChanged: (value) { print('输入的文本为:$value'); }, ); } } ``` 在上面的示例中,我们使用了TextEditingController来控制TextField的文本内容,maxLength属性限制了用户输入的最大长度为10,keyboardType属性指定了键盘类型为文本类型,obscureText属性设置为true表示隐藏输入内容。 此外,我们还设置了decoration属性来自定义TextField的外观,包括了输入提示文本、标签文本、前缀图标、后缀图标和边框样式等。 最后,我们通过onChanged回调函数来监听用户输入的文本,并打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值