区块链技术博客
www.b2bchain.cn

一份 Flutter 适配问题的 EHS 表单(持续更新)求职学习资料

本文介绍了一份 Flutter 适配问题的 EHS 表单(持续更新)求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

Flutter 的一个特性就是跨平台,这是一个优势的同时又带了很多适配的问题。这篇文章列举在 Flutter 开发时可能需要考虑到的适配问题,可以把其当作一份 EHS 表单,在开发时,一条一条去思考适配是否完善。这里先列出了最常见的适配问题,后续还会持续更新,分享各种适配问题比较成熟的解决方案。

设计风格的适配

由于不同平台操作体验有很大差异,比如 Android 和 iOS 平台的页面导航方式、转场动画、滚动效果、排版、图标、触摸反馈、文本编辑、手势效果

一份 Flutter 适配问题的 EHS 表单(持续更新) 一份 Flutter 适配问题的 EHS 表单(持续更新)

( iOS 和 Android 不同的导航动画 )

当在设计风格上需要更接近原生平台时,为了适配就需要在不同平台使用不同的组件,所以 Flutter 官方分别为 iOS 和 Android 设计了各自风格的组件,可以参考《 不同平台操作体验的差异和适配 》。

针对硬件功能的适配

由于 Flutter 跨平台的功能可以包含移动设备、嵌入式设备、桌面、Web。不同的设备所包含的硬件功能都有非常大的区别。所以开发功能时需要考虑到是否有硬件支持,通常需要使用 Flutter 的插件去获取硬件是否支持。例如,查询设备是否支持 NFC、是否打开网络等。以下是某查询设备 NFC 能力的 Flutter 插件源码:

 // 通过定义插件的方式,查询设备相关能力 // Android Code private fun handleNfcIsAvailable(call: MethodCall, result: Result) { result.success(adapter?.isEnabled == true) }  // iOS Code @available(iOS 13.0, *) private func handleNfcIsAvailable(_ arguments: Any?, result: @escaping FlutterResult) { result(NFCTagReaderSession.readingAvailable) }  // Dart Code bool isAvailable = await NfcManager.instance.isAvailable();  

系统功能的适配

当 Flutter 在不同系统中运行时,比如 iOS、Android,其底层有区别的,有时在 Dart 层需要做不同的处理。比如,在使用 WebView 时,使用官方的插件 webview_flutter,在iOS上,WebView 小部件是由 WKWebView 支持的,而在 Android 上,WebView 小部件是由 WebView 支持的。iOS 只支持 Flutter 的 混合集成模式 (Hybrid composition),而 Android 默认的是 虚拟显示模式 (Virtual displays) 。所以,如果 Android 需要使用混合集成模式还需要单独对其配置。



import 'dart:io';

import 'package:webview_flutter/webview_flutter.dart';

class WebViewExample extends StatefulWidget {
@override
WebViewExampleState createState() => WebViewExampleState();
}

class WebViewExampleState extends State {
@override
void initState() {
super.initState();
// 启用混合模式.
if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();

Flutter 的一个特性就是跨平台,这是一个优势的同时又带了很多适配的问题。这篇文章列举在 Flutter 开发时可能需要考虑到的适配问题,可以把其当作一份 EHS 表单,在开发时,一条一条去思考适配是否完善。这里先列出了最常见的适配问题,后续还会持续更新,分享各种适配问题比较成熟的解决方案。

设计风格的适配

由于不同平台操作体验有很大差异,比如 Android 和 iOS 平台的页面导航方式、转场动画、滚动效果、排版、图标、触摸反馈、文本编辑、手势效果

一份 Flutter 适配问题的 EHS 表单(持续更新) 一份 Flutter 适配问题的 EHS 表单(持续更新)

( iOS 和 Android 不同的导航动画 )

当在设计风格上需要更接近原生平台时,为了适配就需要在不同平台使用不同的组件,所以 Flutter 官方分别为 iOS 和 Android 设计了各自风格的组件,可以参考《 不同平台操作体验的差异和适配 》。

针对硬件功能的适配

由于 Flutter 跨平台的功能可以包含移动设备、嵌入式设备、桌面、Web。不同的设备所包含的硬件功能都有非常大的区别。所以开发功能时需要考虑到是否有硬件支持,通常需要使用 Flutter 的插件去获取硬件是否支持。例如,查询设备是否支持 NFC、是否打开网络等。以下是某查询设备 NFC 能力的 Flutter 插件源码:

 // 通过定义插件的方式,查询设备相关能力 // Android Code private fun handleNfcIsAvailable(call: MethodCall, result: Result) { result.success(adapter?.isEnabled == true) }  // iOS Code @available(iOS 13.0, *) private func handleNfcIsAvailable(_ arguments: Any?, result: @escaping FlutterResult) { result(NFCTagReaderSession.readingAvailable) }  // Dart Code bool isAvailable = await NfcManager.instance.isAvailable();  

系统功能的适配

当 Flutter 在不同系统中运行时,比如 iOS、Android,其底层有区别的,有时在 Dart 层需要做不同的处理。比如,在使用 WebView 时,使用官方的插件 webview_flutter,在iOS上,WebView 小部件是由 WKWebView 支持的,而在 Android 上,WebView 小部件是由 WebView 支持的。iOS 只支持 Flutter 的 混合集成模式 (Hybrid composition),而 Android 默认的是 虚拟显示模式 (Virtual displays) 。所以,如果 Android 需要使用混合集成模式还需要单独对其配置。



import 'dart:io';

import 'package:webview_flutter/webview_flutter.dart';

class WebViewExample extends StatefulWidget {
@override
WebViewExampleState createState() => WebViewExampleState();
}

class WebViewExampleState extends State {
@override
void initState() {
super.initState();
// 启用混合模式.
if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();

Flutter 的一个特性就是跨平台,这是一个优势的同时又带了很多适配的问题。这篇文章列举在 Flutter 开发时可能需要考虑到的适配问题,可以把其当作一份 EHS 表单,在开发时,一条一条去思考适配是否完善。这里先列出了最常见的适配问题,后续还会持续更新,分享各种适配问题比较成熟的解决方案。

设计风格的适配

由于不同平台操作体验有很大差异,比如 Android 和 iOS 平台的页面导航方式、转场动画、滚动效果、排版、图标、触摸反馈、文本编辑、手势效果

一份 Flutter 适配问题的 EHS 表单(持续更新) 一份 Flutter 适配问题的 EHS 表单(持续更新)

( iOS 和 Android 不同的导航动画 )

当在设计风格上需要更接近原生平台时,为了适配就需要在不同平台使用不同的组件,所以 Flutter 官方分别为 iOS 和 Android 设计了各自风格的组件,可以参考《 不同平台操作体验的差异和适配 》。

针对硬件功能的适配

由于 Flutter 跨平台的功能可以包含移动设备、嵌入式设备、桌面、Web。不同的设备所包含的硬件功能都有非常大的区别。所以开发功能时需要考虑到是否有硬件支持,通常需要使用 Flutter 的插件去获取硬件是否支持。例如,查询设备是否支持 NFC、是否打开网络等。以下是某查询设备 NFC 能力的 Flutter 插件源码:

 // 通过定义插件的方式,查询设备相关能力 // Android Code private fun handleNfcIsAvailable(call: MethodCall, result: Result) { result.success(adapter?.isEnabled == true) }  // iOS Code @available(iOS 13.0, *) private func handleNfcIsAvailable(_ arguments: Any?, result: @escaping FlutterResult) { result(NFCTagReaderSession.readingAvailable) }  // Dart Code bool isAvailable = await NfcManager.instance.isAvailable();  

系统功能的适配

当 Flutter 在不同系统中运行时,比如 iOS、Android,其底层有区别的,有时在 Dart 层需要做不同的处理。比如,在使用 WebView 时,使用官方的插件 webview_flutter,在iOS上,WebView 小部件是由 WKWebView 支持的,而在 Android 上,WebView 小部件是由 WebView 支持的。iOS 只支持 Flutter 的 混合集成模式 (Hybrid composition),而 Android 默认的是 虚拟显示模式 (Virtual displays) 。所以,如果 Android 需要使用混合集成模式还需要单独对其配置。



import 'dart:io';

import 'package:webview_flutter/webview_flutter.dart';

class WebViewExample extends StatefulWidget {
@override
WebViewExampleState createState() => WebViewExampleState();
}

class WebViewExampleState extends State {
@override
void initState() {
super.initState();
// 启用混合模式.
if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 一份 Flutter 适配问题的 EHS 表单(持续更新)求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们