flutter 获取大文件md5码

flutter 获取大文件md5码,第1张

一般app端都会用到获取文件的md5,那对于大文件的MD5用什么方法最快呢?

搜索了很多资料,一般有以下几种方法(以283M的文件来测试):

这是在安卓的机子上测试的,苹果没测试过。

看这结果可以知道,在安卓机子上,使用第三方库 Md5FileChecksum 会比官方的快 10倍以上 !!

就是不知道ios上能不能用。。。

知道的可以留言说下,谢谢~

当在flutter中做一个全局的Toast,loading,Alert的时候,会使用到OverlayEntry,只要通过OverlayStateinsert()就能展示在界面上。如此好用那OverlayState又是从哪来的呢?

首先,获取OverlayState可以直接调用OverlayState overlayState = Overlayof(context);直接就拿context去找了:OverlayState result = contextfindAncestorStateOfType<OverlayState>(); 

能找到?怎么就找到了呢

那看下Overlay的注释:

尽管您可以直接创建一个[Overlay],但最常见的是使用[WidgetsApp]或[MaterialApp]中的[Navigator]创建的。导航器使用其overlay来管理路由的视觉外观。

其中很关键的点在Navigator,那去找Navigator,顺便还找到了Route。

Navigator中一层结构就是Overlay。那看下Flutter中导航到底是怎么做的。

许多应用程序在其小部件层次结构的顶部附近都有一个导航器,以便使用[Overlay]来显示它们的逻辑历史,其中最近访问的页面可视化地位于较旧页面的顶部。通过使用此模式,导航器可以通过在覆盖图中移动小部件从一个页面可视地过渡到另一个页面。

既然Overlay从导航而来,那App中怎么就有导航呢?

Flutter创建的的时候,main里面的入口runApp(),在视图的最底层会写一个MaterialApp()

找到MaterialApp。

那就找在哪创建了Navigator。没找到,但是在return时用的是WidgetsApp,看下介绍。

WidgetsApp定义了基本的应用程序元素,但不依赖于Material库,也就是MaterialApp是对WidgetsApp的上层封装,为我们集成了Material元素。继续找WidgetsApp。

在build里面创建了Navigator。

那么流程就是:MaterialApp ——> WidgetsApp ——> Navigator。

Overlayof(context)拿到了Navigator里面的OverlayState

在原生开发中, Android 使用 Gradle 来管理依赖, iOS 用 Cocoapods 来管理依赖,Node 中通过 npm来管理依赖。 Flutter 使用配置文件 pubspecyaml (位于项目根目录)来管理第三方依赖包。

Pub 是Google官方的Dart Packages仓库,类似于node中的npm仓库,android中的jcenter,我们可以在上面查找我们需要的包和插件,也可以向pub发布我们的包和插件。

Pub工具 包含管理Package、部署Package和部署命令行应用的命令。

如果使用的是Flutter SDK,不要直接使用pub命令。而是使用flutter pub命令,如下:

命令pub get/upgrade/outdated 属于管理Package的依赖关系

用于检索当前 Package 所依赖的其它 Package。如果 pubspeclock 文件已经存在,则根据该文件中保存的依赖项版本获取对应的依赖项。如有必要,将会创建或更新该文件。

更新 package 依赖

当你添加一个 package 后首次运行 flutter pub get, Flutter 将会保存在 pubspeclock lockfile 中找到的具体 package 版本。这将确保当你或者团队中其他开发者运行 flutter pub get 后能得到相同版本的 package。

如果你想升级到 package 的最新版本,比如使用 package 的最新特性,请运行 flutter pub upgrade 。这将检索你在 pubspecyaml 文件中指定的版本约束所允许的最高可用版本。

案例

在flutter项目中导入hive包,在pubspecyaml文件中添加配置:

执行flutter pub get,可以在 pubspeclock 中看到 hive 版本是210,这是因为目前hive的最新版本是210,配置“^”表示向最新版本兼容,具体可查看Package版本管理( >

path_provider是flutter提供的一个获取应用存储路径的插件,它封装了统一的api来获取Android和ios两个平台的应用存储路径,提供的api如下:

getTemporaryDirectory():获取应用临时文件夹,该文件夹用来保存应用的缓存,可以随时删除用于清缓存,对应于Android的getCacheDir()和ios的NSTemporaryDirectory();

getApplicationDocumentsDirectory():获取应用安装路径,在应用被卸载的时候删除,对应Android的AppDate目录和iOS的NSDocumentDirectory目录;

getExternalStorageDirectory():获取存储卡目录,仅支持Android;

我们通过File和Directory来创建文件和文件夹时首先要获取到应用的相关路径,不然会报错;

File对象和Directory对象封装在dart:io中,使用时需要先引入该库:

Directory对象提供listSync()方法获取文件夹里的内容,该方法返回一个数组;

文件和文件夹都通过delete删除,delete异步,deleteSync同步;如果一个文件夹是非空的删除会报错,删除非空文件夹需要先清空该文件夹:

flutter对json序列化需要引入 dart:convert 库:

通过jsonEncode/jsonDecode来转换json对象:

// 将test目录下的infojson复制到test2目录下的info2json中

引入包archive包:

压缩:

压缩前使用ZipFileEncoder先声明处理压缩的对象,调用该对象的zipDirectory方法压缩文件,该方法接受两个参数,第一个是要压缩文件/文件夹的路径,第二个是压缩包的保存路径;

解压:

以上就是关于flutter 获取大文件md5码全部的内容,包括:flutter 获取大文件md5码、Flutter获取的OverlayState来自哪里、Flutter开发--Pub包管理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9271885.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存