flutter2教程,flutter20

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开发--如何布局?

相对于iOS开发,Flutter的布局更具有灵活性,每个页面设计都不一样,相同页面可选择的布局方式也不一样,如果单纯的说应该如何去布局,我觉得不现实,大家可以参考下 Flutter官方的布局教程 。接下来,笔者,通过项目中的一个页面,来一步一步的拆解布局的流程。整个过程,基本上按照拆解、组件封装、具体布局这三步来的。

根据设计图,可以看出整体可以分成两部分,上面一部分是系统介绍模块,下面一部分是真正的登录内容,因为涉及到叠加,因此考虑用Stack;

系统介绍模块部分:整体也是涉及到叠加,考虑用Stack,分为四部分。最底部渐变色背景用一个contanier,无须指定位置,全视图扩展;载放logo图标在上一层,用Image。最后两个Text同级放在最上层。Image,Text各用Positioned包裹去指定位置。

登录内容模块是最外层是一个Contanier容器,去控制背景色和圆角。然后是一个Column元素,逐行排列。

第一行为Image,

第二行为Text,

第三行可以看成一个小Column,分两块进行布局

第四行可以看成一个小Column,分两块进行布局

第五行可以看作一个TextButton,

第六行可以看作一个Row,分三块进行布局

通过上面这样一步一步的分析后,基本上对大致的布局有了一个了解,最外层的控件大致选对(只要能实现的话,就是复杂度以及效率的问题),然后一步一步的拆解每一行的元素,如果有重复的或者觉得可以封装出来的部分,则进行下一步。

每一行的拆解,大致也是按照这个思路来进行,因此笔者在这里就不做讲解了。

在做到第三第四行的时候,发现这两个很相似,而且设计到一些交互逻辑,笔者就想对第三第四行的这种展示进行封装,觉得今后的布局可能会用到,因此在这一步,可以先把这一块儿抽离出一个控件。利用TextField来实现这种输入操作,具体的实现笔者不再详细的描述了。

经过这一步,整体的规划设计图已经有了,各个组件也都有了,接下来的工作就是组装了。

具体布局设计到一些细节的地方,例如整体Column的居中对齐(crossAxisAlignment)、间隔(Padding或Container包裹,笔者更喜欢用SizedBox占位)、居左居右居中(Align)、点击事件(GestureDetector)以及圆角(BorderRadius)等一些特殊情况。

像第六行row是放在底部的,就可以在第六行前面增加一个Spacer()去填充空白区域。

对文字颜色大小等,可以用TextStyle直接设置。

对于输入框的删除按钮,可以用Offstage这种Flutter特有的控制显示隐藏的控件。

flutter项目升级2.0过程填坑记录

在此之前先推荐看大佬的: 填坑指导

iOS需要注意:

1、flutter2.0要求cocoapods 升级到1.9.0

详情看这篇博客

2、原来flutter项目中的podfile文件是旧版本的ccocoapods了,删除podfile和对应的.lock,然后flutter项目重新运行使用它自动生成的podfile文件

3、安装CocoaPods

卸载cocoapods:sudo gem uninstall cocoapods

查看cocoapods版本:pod --version

指定版本安装:

sudo gem install -n /usr/local/bin cocoapods -v 1.9.3(新MacOS系统升级)

不指定版本安装

sudo gem install -n /usr/local/bin cocoapods

说明 :老项目sdk1.17.0===升级到2.0.1,当前所有操作基于win平台

到此为止环境已经准备妥当,正式进入项目修改。

所有的插件都要适配到空安全,插件是否支持均会有对应说明Null safety,适配过程不确定版本的话,可以使用dio: any,适配完事后再在pubspec.lock文件中查看具体的版本修改过来,实在有部分插件没有支持的,参考下面

部分插件在适配空安全的版本放弃维护了,得自行更新或寻找替代,如: flutter_swiper 变为 flutter_swiper_null_safety ,插件更新后要注意项目中的用法是否需要更新

2.1.1: 以前采用的是 provide 插件共享全局数据,现在变化为 provider ,用法改变, 点击参考 ,以防文章丢失,我重复一遍:

比如:

2.1.2: dio版本升级到4.0.0最新版后,部分用法改变

2.2.1

2.2.2

解决方案:

2.2.3

解决方案:

2.2.4

解决方案:

2.2.5

解决方案:

2.2.6

解决方案:

2.2.7

解决方案:

2.2.8

解决方案: child 换为sliver

2.2.8.1

解决方案: 项目目录下: android--app-build.gradle --minSdkVersion改为:18 或者19

2.2.8.2

解决方案: 在pubspec.yarm管理里面添加:publish_to

2.2.8.3

解决方案: video_player升级后字段发生了变化,initialized字段更换为:isInitialized(_controller.value.isInitialized)

2.2.8.4

解决方案:

2.2.8.5

解决方案:

2.2.8.6

解决方案: 方案一:删除ios目录下的Podfile.lock 文件然后重新运行 pod install命令

方案二:删除ios目录下的Podfile.lock与Podfile文件 重新运行flutter run或flutter build ios

方案三:删除ios目录,重新运行 flutter create . 命令,注意有"."这个符号不要忘记

2.2.8.7

这个报错一般对应的就是下面的报错,注意看后面的报错信息,看是哪个插件报错。

解决方案: 把Podfile的版本注释打开,改为platform :ios, '9.0' 或者是更高的版本

全局替换

1.将new List() 替换为[];

2.TextField的inputFormatters:[WhitelistingTextInputFormatter.digitsOnly] 替换为[FilteringTextInputFormatter.digitsOnly]

3.TextField的inputFormatters:[WhitelistingTextInputFormatter(RegExp("[a-z|A-Z|0-9]"))]替换为FilteringTextInputFormatter.allow(RegExp("[a-z|A-Z|0-9]"))

4.Stack组件中overflow: Overflow.visible改为 clipBehavior: Clip.none;overflow: Overflow.clip改为clipBehavior:Clip.hardEdge

5.ListWheelScrollView组件中clipToSize = false改为clipBehavior: Clip.none,clipToSize = true改为 Clip.hardEdge

6.TextField中maxLengthEnforced: true改为maxLengthEnforcement:MaxLengthEnforcement.enforced

7.FlatButton、RaisedButton、OutlineButton的变化: 官方参考

颜色的属性发生了变化,由原来的Color 变为了MaterialStatePropertyColor, 这是未了解决不同状态(pressed、hovered、focused、disabled)下按钮颜色的变化

例如

8.出现如下警告

9.showSnackBar报错误

解决方案: Scaffold换为ScaffoldMessenger

10.textSelectionColor弃用

解决方案:

11.charts_flutter升级后属性报错

解决方案:

12.flutter 真机调试无法访问网络,dio报错

解决方案:

android:

ios:

问题12完整参考

Flutter 零基础入门实战视频教程(28 个视频)

Flutter 零基础入门实战视频教程 #01 环境搭建 「14:03」

Flutter 零基础入门实战视频教程 #02 Dart 语言 「17:49」

Flutter 零基础入门实战视频教程 #03 建立 Android studio 虚拟设备 「04:12」

Flutter 零基础入门实战视频教程 #04 建立第一个项目 「08:23」

Flutter 零基础入门实战视频教程 #05 安装配置过程中可能遇到的问题(没遇到者可以跳过) 「05:07」

Flutter 零基础入门实战视频教程 #06 运行 iOS 模拟器 「04:07」

Flutter 零基础入门实战视频教程 #07 Flutter 概述 「06:15」

Flutter 零基础入门实战视频教程 #08 Scaffold AppBar 「Pro」「06:50」

Flutter 零基础入门实战视频教程 #09 文档和快捷键 「Pro」「02:36」

Flutter 零基础入门实战视频教程 #10 颜色 Colors 「Pro」「05:47」

Flutter 零基础入门实战视频教程 #11 自定义字体 fonts 「Pro」「05:09」

Flutter 零基础入门实战视频教程 #12 hot reload StatelessWidget 「Pro」「04:56」

Flutter 零基础入门实战视频教程 #13 使用图片 「Pro」「04:59」

Flutter 零基础入门实战视频教程 #14 使用图标 - Icon 「Pro」「01:27」

Flutter 零基础入门实战视频教程 #15 Button 按钮使用指南 「Pro」「04:35」

Flutter 零基础入门实战视频教程 #16 Container 和 Padding 「Pro」「04: 52」

Flutter 零基础入门实战视频教程 #17 Row 「Pro」「05:24」

Flutter 零基础入门实战视频教程 #18 Column 「Pro」「05:36」

Flutter 零基础入门实战视频教程 #19 Flutter Outline Shortcuts 「Pro」「03:18」

Flutter 零基础入门实战视频教程 #20 Expanded Widgets 「Pro」「06:06」

Flutter 零基础入门实战视频教程 #21 实战开始 「Pro」「11:42」

Flutter 零基础入门实战视频教程 #22 换个编辑器 - Visual Studio Code 「Pro」「04:50」

Flutter 零基础入门实战视频教程 #23 Stateful vs Stateless Widget 「Pro」「09:45」

Flutter 零基础入门实战视频教程 #24 列表处理 「Pro」「04:54」

Flutter 零基础入门实战视频教程 #25 自定义 class 「Pro」「05:37」

Flutter 零基础入门实战视频教程 #26 card widget 「Pro」「04:26」

Flutter 零基础入门实战视频教程 #27 Extracting Widgets 「Pro」「06:59」

Flutter 零基础入门实战视频教程 #28 删除 - Functions as Parameters - 完结 - 进入实战课 「Pro」「04:35」

求flutter的教学视频!!!!

Flutter教程全套 (全网独家)百度网盘免费资源在线学习  

链接:

提取码: m9z8  

Flutter教程全套 (全网独家)

第一套:Flutter 携程17章全-整理好

第五套:Flutter高仿谷歌翻译项目课程

第四套:两小时掌握Flutter移动App开发视频

第三套:flutter入门到精通全套

第七套:Flutter小实战20个

第六套:仿直聘boss的flutter完整教程

第九套:Flutter跨平台开发

第二套:flutter移动电商实战-技术胖

第八套:Flutter基础教程(基础不好的优先看)

24Flutter的打包.mp4

23静态资源和项目图片的处理.mp4

22页面跳转并返回数据_.mp4

21导航的参数传递和接受-2_.mp4

20导航的参数传递和接受-1.mp4

新建一个flutter项目,可以在ios上运行,四步搞定!

1. 建立一个flutter项目的命令

2. 在ios文件夹下,生成pods文件夹

3. Xcode环境签名设置;

把错误的版本删除再添加,可解决签名错误问题;必须先删除再添加,直接修改可能不起作用。团队开发,必须使用团队的签名。

4.运行创建的flutter项目;

选择真机、模拟机,点击运行按钮,或使用命令运行:

下面两步是赠送的:

5.新加一款插件,所涉及的命令;

ios 端所涉及的命令

6. 刚更新的插件和已有的插件有冲突怎么办?

可以试一试以下步骤:


分享文章:flutter2教程,flutter20
本文网址:http://ybzwz.com/article/dssiece.html