十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
官方文檔
成都創(chuàng)新互聯(lián)長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為科爾沁企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,科爾沁網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
將 Flutter module 集成到 iOS 項(xiàng)目
(1)這時(shí)候還沒有App.framework , podspec文件是有了
(2)有engine,F(xiàn)lutter.framework。
(3)有插件列表 podspec FlutterPluginRegistrant.podspec,這時(shí)沒有symlinks/plugins目錄軟鏈接
(4)導(dǎo)出當(dāng)前的環(huán)境變量 flutter_export_environment.sh
flutter-plugins-dependencies
執(zhí)行 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
執(zhí)行 xcode_backend.sh
做3件事情:
AppFrameworkInfo.plist
assets_path 這個(gè)后面也沒有人用啊!
放到.ios下面
.ios/Flutter/engine/Flutter.xcframework
編譯前, 把這個(gè)下面添加一個(gè)空文件, engine被覆蓋了,那么那個(gè)空文件就沒了?
對(duì)比了一下大小。 release
debug 版本的Flutter.xcframework 255M
ios-release 1.03 GB
一開始是1.03G, run之后, 變成了255M
說明確實(shí)拷貝到這里了
.ios下面App.framework 沒有變
App.framework 61Mb
Flutter.framework 35Mb
"${PODS_ROOT}/Target Support Files/Pods-HouseCommercialCube/Pods-HouseCommercialCube-frameworks.sh"
在原生開發(fā)中, Android 使用 Gradle 來管理依賴, iOS 用 Cocoapods 來管理依賴,Node 中通過 npm來管理依賴。 Flutter 使用配置文件 pubspec.yaml (位于項(xiàng)目根目錄)來管理第三方依賴包。
Pub 是Google官方的Dart Packages倉庫,類似于node中的npm倉庫,android中的jcenter,我們可以在上面查找我們需要的包和插件,也可以向pub發(fā)布我們的包和插件。
Pub工具 包含管理Package、部署Package和部署命令行應(yīng)用的命令。
如果使用的是Flutter SDK,不要直接使用pub命令。而是使用flutter pub命令,如下:
命令pub get/upgrade/outdated 屬于管理Package的依賴關(guān)系
用于檢索當(dāng)前 Package 所依賴的其它 Package。如果 pubspec.lock 文件已經(jīng)存在,則根據(jù)該文件中保存的依賴項(xiàng)版本獲取對(duì)應(yīng)的依賴項(xiàng)。如有必要,將會(huì)創(chuàng)建或更新該文件。
更新 package 依賴
當(dāng)你添加一個(gè) package 后首次運(yùn)行 flutter pub get, Flutter 將會(huì)保存在 pubspec.lock lockfile 中找到的具體 package 版本。這將確保當(dāng)你或者團(tuán)隊(duì)中其他開發(fā)者運(yùn)行 flutter pub get 后能得到相同版本的 package。
如果你想升級(jí)到 package 的最新版本,比如使用 package 的最新特性,請(qǐng)運(yùn)行 flutter pub upgrade 。這將檢索你在 pubspec.yaml 文件中指定的版本約束所允許的最高可用版本。
案例
在flutter項(xiàng)目中導(dǎo)入hive包,在pubspec.yaml文件中添加配置:
執(zhí)行flutter pub get,可以在 pubspec.lock 中看到 hive 版本是2.1.0,這是因?yàn)槟壳癶ive的最新版本是2.1.0,配置“^”表示向最新版本兼容,具體可查看Package版本管理( ),所以再執(zhí)行flutter pub upgrade 可以看到版本還是2.1.0,這個(gè)時(shí)候會(huì)發(fā)現(xiàn)pub get和 pub upgrade 效果一樣。
但是未來如果 hive 發(fā)布了2.2.0版本,這個(gè)時(shí)候使用flutter pub get在pubspec.lock中看到hive版本依舊是2.1.0,而執(zhí)行flutter pub upgrade 后在pubspec.lock中看到hive版本就是2.2.0。
現(xiàn)在先在flutter 項(xiàng)目的pubspec.yaml文件添加配置,指定hive版本是2.0.5,如下:
這個(gè)時(shí)候執(zhí)行flutter pub get后,可以在pubspec.lock的文件中看到hive版本是2.0.5,如果這個(gè)時(shí)候更改配置為 hive: ^2.0.5,再執(zhí)行flutter pub get就會(huì)發(fā)現(xiàn)在pubspec.lock的文件中看到hive版本還是2.0.5,這個(gè)時(shí)候可以執(zhí)行flutter pub outdated查看依賴的每個(gè) package,如下圖,
可以看到,Upgrable項(xiàng)hive版本號(hào)為2.1.0,執(zhí)行flutter pub upgrade 后可以看到在pubspec.lock的文件中看到hive版本是2.1.0
在pubspec.yaml文件添加配置:
lxx_package_demo信息如下圖:
執(zhí)行flutter pub get后在pubspec.lock中看到flutter_log版本是0.0.1
現(xiàn)在修改lxx_package_demo版本號(hào)為0.0.2,再執(zhí)行flutter pub get
會(huì)發(fā)現(xiàn)版本會(huì)及時(shí)更新為0.0.2,這個(gè)時(shí)候執(zhí)行flutter pub get/upgrade效果一樣
參考文檔:
Dart的 IO 庫包含了文件讀寫的相關(guān)類,它屬于 Dart 語法標(biāo)準(zhǔn)的一部分,所以通過 Dart IO 庫,無論是 Dart VM 下的腳本還是 Flutter,都是通過 Dart IO 庫來操作文件的,不過和 Dart VM 相比,F(xiàn)lutter 有一個(gè)重要差異是文件系統(tǒng)路徑不同,這是因?yàn)镈art VM 是運(yùn)行在 PC 或服務(wù)器操作系統(tǒng)下,而 Flutter 是運(yùn)行在移動(dòng)操作系統(tǒng)中,他們的文件系統(tǒng)會(huì)有一些差異。
Android 和 iOS 的應(yīng)用存儲(chǔ)目錄不同, PathProvider 插件提供了一種平臺(tái)透明的方式來訪問設(shè)備文件系統(tǒng)上的常用位置。該類當(dāng)前支持訪問兩個(gè)文件系統(tǒng)位置:
File代表一個(gè)整體的文件,他有三個(gè)構(gòu)造函數(shù),分別是:
文件讀取本身有兩種形式,一種是文本,一種是二進(jìn)制。
2.2.1 讀取文本內(nèi)容
如果是文本文件,F(xiàn)ile提供了readAsString、readAsLines、readAsStringSync、readAsLinesSync方法,讀取文本內(nèi)容
readAsString 一次性讀取所有文本
readAsLines 一行行的讀取文本
結(jié)果返回的是一個(gè)List,list中表示文件每行的內(nèi)容
readAsStringSync、readAsLinesSync同步讀取文本
2.2.2 讀取二進(jìn)制內(nèi)容
如果文件是二進(jìn)制,那么可以使用readAsBytes或者同步的方法readAsBytesSync:
dart中表示二進(jìn)制有一個(gè)專門的類型叫做Uint8List,他實(shí)際上表示的是一個(gè)int的List。
上面提到的讀取方式,都是一次性讀取整個(gè)文件,缺點(diǎn)就是如果文件太大的話,可能造成內(nèi)存空間的壓力。
所以File為我們提供了另外一種讀取文件的方法,流的形式來讀取文件.
示例
dart提供了open和openSync兩個(gè)方法來進(jìn)行隨機(jī)文件讀寫:
寫入和文件讀取一樣,可以一次性寫入或者獲得一個(gè)寫入句柄,然后再寫入。
一次性寫入的方法有四種,分別對(duì)應(yīng)字符串和二進(jìn)制
句柄形式可以調(diào)用openWrite方法,返回一個(gè)IOSink對(duì)象,然后通過這個(gè)對(duì)象進(jìn)行寫入:
默認(rèn)情況下寫入是會(huì)覆蓋整個(gè)文件的,但是可以通過下面的方式來更改寫入模式:
雖然dart中所有的異常都是運(yùn)行時(shí)異常,但是和java一樣,要想手動(dòng)處理文件讀寫中的異常,則可以使用try,catch:
我們還是以計(jì)數(shù)器為例,實(shí)現(xiàn)在應(yīng)用退出重啟后可以恢復(fù)點(diǎn)擊次數(shù)。 這里,我們使用文件來保存數(shù)據(jù):
1.引入PathProvider插件;在pubspec.yaml文件中添加如下聲明:
執(zhí)行 flutter pub get
2.實(shí)現(xiàn)如下
參考:
#彈窗
oktoast : ^3.1.5
#路由
get : ^4.5.1
#百度地圖定位
flutter_bmflocation : ^2.0.0-nullsafety.1
#百度地圖-基礎(chǔ)地圖
flutter_baidu_mapapi_map : ^3.0.0+2
#百度地圖-檢索
flutter_baidu_mapapi_search : ^3.0.0
#百度地圖-計(jì)算工具
flutter_baidu_mapapi_utils : ^3.0.0
#屏幕自動(dòng)適應(yīng)
flutter_screenutil : ^5.2.0
#Banner圖切換
flutter_swiper_plus : ^2.0.4
#網(wǎng)絡(luò)請(qǐng)求
dio : ^4.0.4
dio_cache_interceptor : ^3.2.2
pretty_dio_logger : ^1.2.0-beta-1
#城市選擇器
azlistview : ^2.0.0
#本地存儲(chǔ)
get_storage : ^2.0.3
#權(quán)限
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
#驗(yàn)證碼輸入框
pin_input_text_field : ^4.1.1
# 漢字轉(zhuǎn)拼音
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
#行為驗(yàn)證碼
steel_crypt : ^3.0.0+1
encrypt : ^5.0.0
#二維碼識(shí)別
flutter_qr_reader : ^1.0.5
#右上角小圖標(biāo)
badges : ^2.0.2
#喚醒系統(tǒng)應(yīng)用
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
#個(gè)推
getuiflut : ^0.2.11
#極光推送
# jpush_flutter:
# path: plugin/jpush_flutter-2.2.2
#極光魔鏈
jmlink_flutter_plugin :
path : plugin/jmlink_flutter_plugin-2.1.2
#極光認(rèn)證
jverify :
path : plugin/jverify-2.2.4
#極光統(tǒng)計(jì)
janalytics :
path : plugin/janalytics-2.1.5
#倒計(jì)時(shí)
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
#時(shí)間軸
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
#時(shí)間模糊插件
timeago :
path : plugin/timeago-3.1.0
#屏幕截圖
screenshot : ^1.2.3
#圖片壓縮
flutter_image_compress : ^1.1.0
#List左滑右滑
flutter_slidable : ^1.2.0
#底部伸縮抽屜-針對(duì)地圖
sliding_up_panel : ^2.0.0+1
#鍵盤高度
flutter_keyboard_size : ^1.0.0+4
#JSON動(dòng)圖
lottie : ^1.2.2
#城市選擇器
city_pickers :
path : plugin/city_pickers-1.0.1
#調(diào)試工具
path_provider : ^2.0.7
#打開HTML
webview_flutter : ^2.3.1
#表情
emoji_picker_flutter : ^1.0.8
#扇形進(jìn)度
ai_progress : ^2.0.0
#喜歡按鈕
tiktok_favorite_gesture : ^1.0.0
#獲取手機(jī)信息
device_info : ^2.0.3
#包信息
package_info : ^2.0.2
device_apps : ^2.1.1
#倒計(jì)時(shí)
stop_watch_timer : ^1.3.1
#發(fā)現(xiàn)Android和iOS上的網(wǎng)絡(luò)(WiFi和移動(dòng)/蜂窩)連接狀態(tài)
connectivity_plus : ^2.2.0
#從應(yīng)用程序打開iOS和Android手機(jī)設(shè)置。
app_settings : ^4.1.1
#日志上報(bào)
sentry_flutter : ^6.1.2
#后退攔截
back_button_interceptor : ^5.0.2
#視頻播放器
better_player : ^0.0.81
#APP啟動(dòng)圖
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
需求描述:
增加項(xiàng)目里面的微信分享功能
1.首先分析一下都有什么方式可以完成分享的功能,
1.1. 要有更多的分享的話建議使用第三方的如mob
1.2. 公司對(duì)著塊要求不高,我選擇簡單的方式使用 fluwx: ^2.4.0(因?yàn)楹罄m(xù)需要支付,所以直接配置了帶有支付的插件)
2.項(xiàng)目中微信配置
2.2. 調(diào)用分享(以下是沒有進(jìn)行封裝的版本,后續(xù)會(huì)進(jìn)行優(yōu)化)
3.分享過程中遇到的問題
3.1. iOS分享因?yàn)橛卸螘r(shí)間沒用了。配置中增加了Universal Links:
3.2. 就是本人不熟悉android簽名和包名量費(fèi)了些時(shí)間!
4.Universal Links:的配置
5.1. android的問題主要在包名和簽名我不太清楚
5.2. 包名
歡迎大家進(jìn)行交流, itlingmao@163.com
程序員里面快樂的一只貓