快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

ios开发微信小视频,ios微信小窗口视频

Flutter与原生通信的Channel有哪几种?

Flutter定义了三种不同类型的Channel,它们分别是:

创新互联专注于阿克陶企业网站建设,响应式网站开发,成都商城网站开发。阿克陶网站建设公司,为阿克陶等地区提供建站服务。全流程定制网站开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

BasicMessageChannel:用于传递字符串和半结构化的信息。

MethodChannel:用于传递方法调用(method invocation)。

EventChannel:用于数据流(event streams)的通信。

Flutter之Dart数据类型及数据之间的转换

1、数值型-Number

2、布尔型-Boolean

3、字符串-String

4、列表-List

5、键值对-Map

1、int: 整数,数值

2、double: 浮点型数值,带有小数点

运算符:+,-,*,/,~/(取整),%;

字符串操作

运算符:+,*,==,[]

插值表达式:${expression}

常用属性:length,isEmpty(是否为空)

Map 对象

flutter Set集合妙用

Set是不能重复的集合,所以可以用Set去重;

String、int、double类型示例,如下:

String类型:

int类型:

double类型:

可以看到, Set集合可直接对String、int、double类型去重 ;

Map、List、bool类型和String、int、double类型对比示例,如下:

可以看到,当自定义对象实例化为同一个对象时,Set会过滤掉同一个实例化的对象;当自定义对象实例化为不同对象时,Set不会去重,即使对象数据内容一样,这不符合我们的业务;

可以看到,重写自定义对象==方法,Set还是不能去重;

上面重写自定义对象hashCode和==方法,以title不同区分不同对象;

可以看到,重写自定义对象hashCode和==方法,Set集合对自定义对象去重才有效;并且Set集合里有相同对象时(相同对象为上面自定义对象title值相同的对象),后面相同的对象就不会被加入Set集合里了( 如上面title一样,boolValue不一样,这样被认为相同的对象,因为重写自定义对象hashCode和==方法,以title不同区分不同对象;Set集合里最开始加入的TestModel('a', boolValue: false),数据不会被相同对象TestModel('a', boolValue: true)覆盖 )。

网上介绍flutter Set集合时一般会介绍Set没有顺序,这点不太理解,可能是不能通过索引来获取对应的值吧,像Java语言的Set集合确实是无序的,但flutter的Set集合保持着子元素的有序性。 如下:

可以看到,将Set通过toList()方法转为List后,List里子元素的顺序和子元素插入Set集合的顺序是一致;对于自定义对象亦是如此,可自行验证。

为什么Set集合会保持子元素插入顺序呢

我们看下Set源码,如下:

从源码我们可知,Set()是一个工厂构造方法,根据工厂构造方法的特点,Set是由LinkedHashSet实例化的。

从上面注释可知,HashSet是无序的,LinkedHashSet保持着子元素插入的顺序。而Set是由LinkedHashSet实例化的,所以Set保持着子元素插入的顺序。

如想要深入分析LinkedHashSet,LinkedHashSet源码中有很多external声明的方法,可参考 如何找到flutter external声明方法的实现

demo传送门

Flutter 之 文件操作(二十九)

Dart的 IO 库包含了文件读写的相关类,它属于 Dart 语法标准的一部分,所以通过 Dart IO 库,无论是 Dart VM 下的脚本还是 Flutter,都是通过 Dart IO 库来操作文件的,不过和 Dart VM 相比,Flutter 有一个重要差异是文件系统路径不同,这是因为Dart VM 是运行在 PC 或服务器操作系统下,而 Flutter 是运行在移动操作系统中,他们的文件系统会有一些差异。

Android 和 iOS 的应用存储目录不同, PathProvider 插件提供了一种平台透明的方式来访问设备文件系统上的常用位置。该类当前支持访问两个文件系统位置:

File代表一个整体的文件,他有三个构造函数,分别是:

文件读取本身有两种形式,一种是文本,一种是二进制。

2.2.1 读取文本内容

如果是文本文件,File提供了readAsString、readAsLines、readAsStringSync、readAsLinesSync方法,读取文本内容

readAsString 一次性读取所有文本

readAsLines 一行行的读取文本

结果返回的是一个List,list中表示文件每行的内容

readAsStringSync、readAsLinesSync同步读取文本

2.2.2 读取二进制内容

如果文件是二进制,那么可以使用readAsBytes或者同步的方法readAsBytesSync:

dart中表示二进制有一个专门的类型叫做Uint8List,他实际上表示的是一个int的List。

上面提到的读取方式,都是一次性读取整个文件,缺点就是如果文件太大的话,可能造成内存空间的压力。

所以File为我们提供了另外一种读取文件的方法,流的形式来读取文件.

示例

dart提供了open和openSync两个方法来进行随机文件读写:

写入和文件读取一样,可以一次性写入或者获得一个写入句柄,然后再写入。

一次性写入的方法有四种,分别对应字符串和二进制

句柄形式可以调用openWrite方法,返回一个IOSink对象,然后通过这个对象进行写入:

默认情况下写入是会覆盖整个文件的,但是可以通过下面的方式来更改写入模式:

虽然dart中所有的异常都是运行时异常,但是和java一样,要想手动处理文件读写中的异常,则可以使用try,catch:

我们还是以计数器为例,实现在应用退出重启后可以恢复点击次数。 这里,我们使用文件来保存数据:

1.引入PathProvider插件;在pubspec.yaml文件中添加如下声明:

执行 flutter pub get

2.实现如下

参考:

Flutter 四种工程类型及Flutter项目类型切换

标准的Flutter App工程,包含标准的Dart层与Native平台层

Flutter平台插件工程,包含Dart层与Native平台层的实现

Flutter纯Dart插件工程,仅包含Dart层的实现,往往定义一些公共Widget

参考资料:


当前题目:ios开发微信小视频,ios微信小窗口视频
网站路径:http://6mz.cn/article/phsijp.html

其他资讯