返回顶部
首页 > 资讯 > 精选 >Flutter多平台适配机制的示例分析
  • 698
分享到

Flutter多平台适配机制的示例分析

2023-06-04 22:06:38 698人浏览 薄情痞子
摘要

小编给大家分享一下Flutter多平台适配机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Flutter网络请求在开发Flutter的时候可以使用Ht

小编给大家分享一下Flutter多平台适配机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Flutter网络请求

开发Flutter的时候可以使用Http核心库。也可以使用社区的其他封装类库,比如dio。两者的底层实现都是http_parser

如果开发者不小心在flutter中直接使用了平台相关的类库,则会导致扩平台运行出错,比如使用io包下的http在浏览器下执行肯定会报错。

http核心库已经为我们做好了平台适配,下面看一下他是怎么做的适配:

import 'package:flutter/cupertino.dart';import 'package:http/http.dart' as http;void hello(){  print('a.dart => hello');  http.get('http://127.0.0.1:8080').then((response){    debugPrint('response => ${response.statusCode} ${response.body}');  });}

这段代码可以跑在移动设备,也可以跑在浏览器设备,得到一致的输出效果。

http核心库

现在我们以get请求为例,看一下他的内部逻辑:

Flutter多平台适配机制的示例分析

image

在http接口类中,最终会执行_withClient来选用Client的实现类,类似静态代理效果。

具体来说,在编译为WEB使用时,最终导包使用的是src/browser_client.dart, 其底层实现是,dart:html下的HttpRequest, 最终用的是前端ajax技术:XMLHttpRequests

/// Used from conditional imports, matches the definition in `client_stub.dart`.BaseClient createClient() => BrowserClient();/// A `dart:html`-based HTTP client that runs in the browser and is backed by/// XMLHttpRequests.////// This client inherits some of the limitations of XMLHttpRequest. It ignores/// the [BaseRequest.contentLength], [BaseRequest.persistentConnection],/// [BaseRequest.followRedirects], and [BaseRequest.maxRedirects] fields. It is/// also unable to stream requests or responses; a request will only be sent and/// a response will only be returned once all the data is available.class BrowserClient extends BaseClient

针对非浏览器使用的是io类库,src/io_client.dart, 其底层实现是dart:io下的HttpClient

/// Used from conditional imports, matches the definition in `client_stub.dart`.BaseClient createClient() => ioclient();/// A `dart:io`-based HTTP client.////// This is the default client when running on the command line.class IOClient extends BaseClient

条件导包

这里有个比较有意思的语法:

http核心库是如何做到的的平台差异?

通过观察src/client.dart的导包情况,可以看到如下代码:

// ignore: uri_does_not_existimport 'client_stub.dart'    // ignore: uri_does_not_exist    if (dart.library.html) 'browser_client.dart'    // ignore: uri_does_not_exist    if (dart.library.io) 'io_client.dart';

这里实际上使用的dart中的特殊语法:条件导包。 相关详情可以查阅dart文档。

简单来说就是利用有条件的import/export,在编译期间,差异化导包,从而可以实现平台适配。

使用条件导包的具体做法如下:

  • 首先定义一个接口,用于多端实现;

  • 接口类中利用import/export按需导入,导出对应的实现类库

export 'src/hw_none.dart' // Stub implementation    if (dart.library.io) 'src/hw_io.dart' // dart:io implementation    if (dart.library.html) 'src/hw_html.dart'; // dart:html implementation

运用场景

利用该机制可以方便的进行多平台适配。类似的dio也有一段导包差异逻辑src/dio.dart

import 'entry_stub.dart'// ignore: uri_does_not_exist    if (dart.library.html) 'entry/dio_for_browser.dart'// ignore: uri_does_not_exist    if (dart.library.io) 'entry/dio_for_native.dart';

顺便看下dio和http的依赖情况。dio是一个http上传的封装库,提供了较多便捷的api,当然相对的也带了学习成本,具体是否采用就看项目的实际需要。

|-- dio 3.0.7|   |-- http_parser 3.1.3|   |   |-- charcode...|   |   |-- collection...|   |   |-- source_span...|   |   |-- string_scanner...|   |   '-- typed_data...|   '-- path...|-- http 0.12.0+2|   |-- async...|   |-- http_parser...|   |-- path...|   '-- pedantic...

以上是“Flutter多平台适配机制的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Flutter多平台适配机制的示例分析

本文链接: https://lsjlt.com/news/240313.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Flutter多平台适配机制的示例分析
    小编给大家分享一下Flutter多平台适配机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Flutter网络请求在开发Flutter的时候可以使用ht...
    99+
    2023-06-04
  • python中内存分配机制的示例分析
    这篇文章主要介绍了python中内存分配机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Python主要用来做什么Python主要应用于:1、Web开发;2、数据...
    99+
    2023-06-14
  • Java知多少虚拟机JVM)以及跨平台原理的示例分析
    这期内容当中小编将会给大家带来有关Java知多少虚拟机JVM)以及跨平台原理的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,...
    99+
    2023-06-17
  • Html5中IphoneX适配的示例分析
    小编给大家分享一下Html5中IphoneX适配的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!IphoneX 的适配,...
    99+
    2024-04-02
  • 手机端用rem+scss做适配的示例分析
    这篇文章给大家分享的是有关手机端用rem+scss做适配的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。rem介绍rem(font size of the root el...
    99+
    2024-04-02
  • java适配器模式的示例分析
    这篇文章主要为大家展示了“java适配器模式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java适配器模式的示例分析”这篇文章吧。定义:将一个类的接口转换成客户希望的另外一个接口。适...
    99+
    2023-05-30
    java
  • ibatis源码与平台源码的示例分析
    这篇文章主要介绍了ibatis源码与平台源码的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 原生类加...
    99+
    2024-04-02
  • hadoop大数据处理平台的示例分析
    这篇文章给大家分享的是有关hadoop大数据处理平台的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。大数据能够在国内得到快速发展,甚至是国家层面的支持,最为重要的一点就是我们纯国产大数据处理技术的突破以及...
    99+
    2023-06-02
  • Java适配器模式示例分析
    本篇内容主要讲解“Java适配器模式示例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java适配器模式示例分析”吧!定义适配器模式,即将某个类的接口转换成客户端期望的另一个接口的表示,主要...
    99+
    2023-06-29
  • MySQL锁机制的示例分析
    这篇文章主要介绍了MySQL锁机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。锁在MySQL中是非常重要的一部分,锁对MySQL...
    99+
    2024-04-02
  • vue中移动端适配的示例分析
    小编给大家分享一下vue中移动端适配的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、方法一:rem 布局在主入口:i...
    99+
    2024-04-02
  • Java中适配器模式的示例分析
    小编给大家分享一下Java中适配器模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java程序设计模式系列之适配器模式理解适配器设计模式需要从生活中的...
    99+
    2023-06-03
  • 使用rem适配布局的示例分析
    这篇文章给大家分享的是有关使用rem适配布局的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当今手机种类繁多 且不说iphone系列,安卓手机的种类已经数不胜数了,所以不可能每一款手机都要写一套布局样式,...
    99+
    2023-06-09
  • 在安卓平台上使用Ubuntu的示例分析
    这期内容当中小编将会给大家带来有关在安卓平台上使用Ubuntu的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Ubuntu想将完整的Linux桌面放置在安卓手机上。这个方式可行,但你会接受并使用么...
    99+
    2023-06-16
  • 平台设计中脚本管理的示例分析
    这篇文章将为大家详细讲解有关平台设计中脚本管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。脚本管理是在元数据构建的基础上的,比如对MySQL/Redis DBA来说,操作的基本粒度是数据库实例...
    99+
    2023-06-04
  • mpvue的小程序markdown适配的示例分析
    这篇文章主要介绍了mpvue的小程序markdown适配的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 mpvue是一个...
    99+
    2024-04-02
  • oracle中SCN机制的示例分析
    小编给大家分享一下oracle中SCN机制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!SCN(System Chan...
    99+
    2024-04-02
  • CSS层叠机制的示例分析
    这篇文章主要为大家展示了“CSS层叠机制的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS层叠机制的示例分析”这篇文章吧。css中为什么要有层叠机制...
    99+
    2024-04-02
  • css溢出机制的示例分析
    这篇文章主要为大家展示了“css溢出机制的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css溢出机制的示例分析”这篇文章吧。为什么需要深入学习CSS溢...
    99+
    2024-04-02
  • Node.js中GC机制的示例分析
    这篇文章主要为大家展示了“Node.js中GC机制的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Node.js中GC机制的示例分析”这篇文章吧。V8 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作