重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
官方文档
成都创新互联长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为科尔沁企业提供专业的网站设计制作、做网站,科尔沁网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。
将 Flutter module 集成到 iOS 项目
(1)这时候还没有App.framework , podspec文件是有了
(2)有engine,Flutter.framework。
(3)有插件列表 podspec FlutterPluginRegistrant.podspec,这时没有symlinks/plugins目录软链接
(4)导出当前的环境变量 flutter_export_environment.sh
flutter-plugins-dependencies
执行 podHelper.rb 脚本
做2件事情:
/Volumes/huc/opt/fvm/versions/2.2.0/packages/flutter_tools/bin/xcode_backend.sh build
多了.symlinks 和App.framework,重新拷贝了Flutter.xcframework
Pods-HouseCommercialCube-frameworks.sh
执行 xcode_backend.sh
做3件事情:
AppFrameworkInfo.plist
assets_path 这个后面也没有人用啊!
放到.ios下面
.ios/Flutter/engine/Flutter.xcframework
编译前, 把这个下面添加一个空文件, engine被覆盖了,那么那个空文件就没了?
对比了一下大小。 release
debug 版本的Flutter.xcframework 255M
ios-release 1.03 GB
一开始是1.03G, run之后, 变成了255M
说明确实拷贝到这里了
.ios下面App.framework 没有变
App.framework 61Mb
Flutter.framework 35Mb
"${PODS_ROOT}/Target Support Files/Pods-HouseCommercialCube/Pods-HouseCommercialCube-frameworks.sh"
在原生开发中, Android 使用 Gradle 来管理依赖, iOS 用 Cocoapods 来管理依赖,Node 中通过 npm来管理依赖。 Flutter 使用配置文件 pubspec.yaml (位于项目根目录)来管理第三方依赖包。
Pub 是Google官方的Dart Packages仓库,类似于node中的npm仓库,android中的jcenter,我们可以在上面查找我们需要的包和插件,也可以向pub发布我们的包和插件。
Pub工具 包含管理Package、部署Package和部署命令行应用的命令。
如果使用的是Flutter SDK,不要直接使用pub命令。而是使用flutter pub命令,如下:
命令pub get/upgrade/outdated 属于管理Package的依赖关系
用于检索当前 Package 所依赖的其它 Package。如果 pubspec.lock 文件已经存在,则根据该文件中保存的依赖项版本获取对应的依赖项。如有必要,将会创建或更新该文件。
更新 package 依赖
当你添加一个 package 后首次运行 flutter pub get, Flutter 将会保存在 pubspec.lock lockfile 中找到的具体 package 版本。这将确保当你或者团队中其他开发者运行 flutter pub get 后能得到相同版本的 package。
如果你想升级到 package 的最新版本,比如使用 package 的最新特性,请运行 flutter pub upgrade 。这将检索你在 pubspec.yaml 文件中指定的版本约束所允许的最高可用版本。
案例
在flutter项目中导入hive包,在pubspec.yaml文件中添加配置:
执行flutter pub get,可以在 pubspec.lock 中看到 hive 版本是2.1.0,这是因为目前hive的最新版本是2.1.0,配置“^”表示向最新版本兼容,具体可查看Package版本管理( ),所以再执行flutter pub upgrade 可以看到版本还是2.1.0,这个时候会发现pub get和 pub upgrade 效果一样。
但是未来如果 hive 发布了2.2.0版本,这个时候使用flutter pub get在pubspec.lock中看到hive版本依旧是2.1.0,而执行flutter pub upgrade 后在pubspec.lock中看到hive版本就是2.2.0。
现在先在flutter 项目的pubspec.yaml文件添加配置,指定hive版本是2.0.5,如下:
这个时候执行flutter pub get后,可以在pubspec.lock的文件中看到hive版本是2.0.5,如果这个时候更改配置为 hive: ^2.0.5,再执行flutter pub get就会发现在pubspec.lock的文件中看到hive版本还是2.0.5,这个时候可以执行flutter pub outdated查看依赖的每个 package,如下图,
可以看到,Upgrable项hive版本号为2.1.0,执行flutter pub upgrade 后可以看到在pubspec.lock的文件中看到hive版本是2.1.0
在pubspec.yaml文件添加配置:
lxx_package_demo信息如下图:
执行flutter pub get后在pubspec.lock中看到flutter_log版本是0.0.1
现在修改lxx_package_demo版本号为0.0.2,再执行flutter pub get
会发现版本会及时更新为0.0.2,这个时候执行flutter pub get/upgrade效果一样
参考文档:
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.实现如下
参考:
#弹窗
oktoast : ^3.1.5
#路由
get : ^4.5.1
#百度地图定位
flutter_bmflocation : ^2.0.0-nullsafety.1
#百度地图-基础地图
flutter_baidu_mapapi_map : ^3.0.0+2
#百度地图-检索
flutter_baidu_mapapi_search : ^3.0.0
#百度地图-计算工具
flutter_baidu_mapapi_utils : ^3.0.0
#屏幕自动适应
flutter_screenutil : ^5.2.0
#Banner图切换
flutter_swiper_plus : ^2.0.4
#网络请求
dio : ^4.0.4
dio_cache_interceptor : ^3.2.2
pretty_dio_logger : ^1.2.0-beta-1
#城市选择器
azlistview : ^2.0.0
#本地存储
get_storage : ^2.0.3
#权限
permission_handler : ^8.3.0
#保存图片
image_gallery_saver : ^1.7.1
# image_save: ^5.0.0
#常用工具类
common_utils :
path : plugin/common_utils-2.0.2
#选择器
flutter_picker : ^2.0.2
#生成二维码
qr_flutter : ^4.0.0
#验证码输入框
pin_input_text_field : ^4.1.1
# 汉字转拼音
lpinyin : ^2.0.3
#多张图片上传
wechat_assets_picker : ^6.3.1
wechat_camera_picker : ^2.6.3
#裁剪图片
image_cropper : ^1.5.0
#图片压缩
flutter_luban : ^0.1.13
#家谱树
graphview : ^1.1.1
vector_math : ^2.1.0
#行为验证码
steel_crypt : ^3.0.0+1
encrypt : ^5.0.0
#二维码识别
flutter_qr_reader : ^1.0.5
#右上角小图标
badges : ^2.0.2
#唤醒系统应用
url_launcher : ^6.0.17
flutter_sms : ^2.3.2
#QQ分享
tencent_kit : ^2.1.0
flutter_cache_manager : ^3.3.0
#微信SDK
fluwx : ^3.6.1+4
#支付宝SDK
tobias :
path : plugin/tobias-2.2.0
#个推
getuiflut : ^0.2.11
#极光推送
# jpush_flutter:
# path: plugin/jpush_flutter-2.2.2
#极光魔链
jmlink_flutter_plugin :
path : plugin/jmlink_flutter_plugin-2.1.2
#极光认证
jverify :
path : plugin/jverify-2.2.4
#极光统计
janalytics :
path : plugin/janalytics-2.1.5
#倒计时
circular_countdown_timer : ^0.2.0
#加载中效果
flutter_spinkit : ^5.1.0
#APP更新
r_upgrade :
path : plugin/r_upgrade-0.3.7+2
#刷新-加载更多
flutter_easyrefresh : ^2.2.1
#右上角弹出式菜单
custom_pop_up_menu : ^1.2.2
#时间轴
timeline_tile : ^2.0.0
#虚线边框
dotted_border : ^2.0.0
like_button : ^2.0.4
#图片
extended_image : ^6.0.1
#图片九宫格
nine_grid_view : ^2.0.0
#时间模糊插件
timeago :
path : plugin/timeago-3.1.0
#屏幕截图
screenshot : ^1.2.3
#图片压缩
flutter_image_compress : ^1.1.0
#List左滑右滑
flutter_slidable : ^1.2.0
#底部伸缩抽屉-针对地图
sliding_up_panel : ^2.0.0+1
#键盘高度
flutter_keyboard_size : ^1.0.0+4
#JSON动图
lottie : ^1.2.2
#城市选择器
city_pickers :
path : plugin/city_pickers-1.0.1
#调试工具
path_provider : ^2.0.7
#打开HTML
webview_flutter : ^2.3.1
#表情
emoji_picker_flutter : ^1.0.8
#扇形进度
ai_progress : ^2.0.0
#喜欢按钮
tiktok_favorite_gesture : ^1.0.0
#获取手机信息
device_info : ^2.0.3
#包信息
package_info : ^2.0.2
device_apps : ^2.1.1
#倒计时
stop_watch_timer : ^1.3.1
#发现Android和iOS上的网络(WiFi和移动/蜂窝)连接状态
connectivity_plus : ^2.2.0
#从应用程序打开iOS和Android手机设置。
app_settings : ^4.1.1
#日志上报
sentry_flutter : ^6.1.2
#后退拦截
back_button_interceptor : ^5.0.2
#视频播放器
better_player : ^0.0.81
#APP启动图
flutter_native_splash : ^2.0.4
#JSON-TO-MAPPER
dart_json_mapper : ^2.1.17
#HTML展示
flutter_html : ^3.0.0-alpha.2
#XD to Flutter
adobe_xd : ^2.0.1
flutter_svg : ^1.0.3
#APPBAR背景色渐变
new_gradient_app_bar : ^0.2.0
#音频播放
flame_audio : ^1.0.0
#入门介绍页
intro_slider : ^3.0.3
#键盘
keyboard_actions : ^3.4.5
emoji_keyboard_flutter : ^1.2.7
#单选选择框
flutter_pickers : ^2.1.9
需求描述:
增加项目里面的微信分享功能
1.首先分析一下都有什么方式可以完成分享的功能,
1.1. 要有更多的分享的话建议使用第三方的如mob
1.2. 公司对着块要求不高,我选择简单的方式使用 fluwx: ^2.4.0(因为后续需要支付,所以直接配置了带有支付的插件)
2.项目中微信配置
2.2. 调用分享(以下是没有进行封装的版本,后续会进行优化)
3.分享过程中遇到的问题
3.1. iOS分享因为有段时间没用了。配置中增加了Universal Links:
3.2. 就是本人不熟悉android签名和包名量费了些时间!
4.Universal Links:的配置
5.1. android的问题主要在包名和签名我不太清楚
5.2. 包名
欢迎大家进行交流, itlingmao@163.com
程序员里面快乐的一只猫