一、前言

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、西吉網(wǎng)絡(luò)推廣、微信小程序定制開發(fā)、西吉網(wǎng)絡(luò)營銷、西吉企業(yè)策劃、西吉品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供西吉建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:chinadenli.net
Flutter開發(fā),就需要對(duì)各種狀態(tài)的管理,就是在請(qǐng)求數(shù)據(jù)的時(shí)候需要實(shí)時(shí)變化,各種交互變化等,在沒有使用GetX之前使用Provider,用Provider的時(shí)候覺得真香,挺方便的,需要刷新的時(shí)候直接 notifyListeners(); 用了GetX之后覺得Provider太繁瑣了。這邊介紹下GetX的使用以及常用的方法。
二、 GetX
GetX 是 Flutter 上的一個(gè)輕量且強(qiáng)大的解決方案:高性能的狀態(tài)管理、智能的依賴注入和便捷的路由管理。
1、相關(guān)優(yōu)勢:
三、使用
1、第一步 引入get
2、第二步
修改入口、配置路由
3、路由
Routes類
Pages類
4、狀態(tài)管理
我一般一個(gè)page對(duì)應(yīng)一個(gè)controller, controller來處理邏輯,控制page.
簡單使用
5、依賴注入
依賴注入也是我喜歡的,可以減少很多工作。
第一步
第二步
6、跨頁面交互
7、黑暗模式
可以參考前期寫的博客。 黑暗模式的適配
如果我們目前的項(xiàng)目是Android的,但是接下來我們希望部分頁面可以使用Flutter進(jìn)行開發(fā),甚至我們希望在Native頁面中嵌入FlutterUI組件,那么我們?cè)撊绾螌?shí)現(xiàn)呢?
假設(shè)你現(xiàn)在Android項(xiàng)目的目錄的結(jié)構(gòu)是這樣的
這時(shí)候如果你想創(chuàng)建一個(gè)Flutter模塊,使得Android模塊和Flutter模塊之間可以進(jìn)行交互,我們可以通過Android Studio新建一個(gè)Flutter Module,具體過程是:File — New — New Module ,之后選擇Flutter Module,指定Project Location的路徑為
也就是說,最終你的項(xiàng)目結(jié)構(gòu)會(huì)是這樣的
接下來在Android Module的 build.gradle 文件中添加flutter依賴
先創(chuàng)建一個(gè)Flutter頁面
這里比較重要的是 window.defaultRouteName 這個(gè)字段,這個(gè)字段可以接收從Native傳遞過來的參數(shù) (下文我們會(huì)介紹原生傳遞參數(shù)的方法),也就是說通過這個(gè)字段我們就可以進(jìn)行Flutter頁面的路由的分發(fā)
我們可以直接在Android的 MainActivity 中啟動(dòng)一個(gè) FlutterActivity ,這里的 initialRoute 方法中傳遞的參數(shù)就對(duì)應(yīng)Flutter層的 window.defaultRouteName
注意:需要在 AndroidManifest.xml 注冊(cè) FlutterActivity
自己創(chuàng)建一個(gè) FlutterAppActivity 繼承自 FlutterActivity
在 MainActivity 中啟動(dòng) FlutterAppActivity (另外別忘了在 AndroidManifest.xml 中注冊(cè) FlutterAppActivity )
兩種啟動(dòng)方式的區(qū)別
如果單純只是想打開一個(gè)Flutter頁面,兩種方式實(shí)際上基本沒有太大區(qū)別,第一種方式也許還會(huì)更簡單一點(diǎn)。但是,在Flutter開發(fā)中,我們往往還需要開發(fā)一些Native插件供Flutter調(diào)用,如果使用復(fù)寫 FlutterActivity 的方式更有利于我們?cè)?FlutterActivity 中注冊(cè)我們的Native插件,所以實(shí)際開發(fā)中一般推薦使用第二種方式
擴(kuò)展思考
initialRoute 從名稱上看起來是Flutter提供給我們進(jìn)行Native與Flutter交互的路由跳轉(zhuǎn)的,但是實(shí)際上他就是一個(gè)字符串,我們不僅僅可以傳遞一個(gè)路由名稱,有時(shí)候我們也可以通過這個(gè)參數(shù)傳遞一串JSON數(shù)據(jù),然后在Flutter端進(jìn)行解析,這樣我們就可以通過這個(gè)參數(shù)做更多的事情
activity_main.xml
FrameLayout 用于承載Flutter組件
MainActivity.java
使用 FragmentManager 將 FlutterFragment 添加到 FrameLayout 容器中
運(yùn)行結(jié)果
上半部分是原生的TextView,下半部分是Flutter的Text組件
本節(jié)主要介紹了Native和Flutter之間的頁面跳轉(zhuǎn),以及同一個(gè)頁面中Native與Flutter組件的組合。接下來會(huì)介紹如何編寫Android插件與Flutter進(jìn)行數(shù)據(jù)交互
國外地址:
國內(nèi)鏡像:
以 flutter_screenutil 為例
路由框架 annotation_route
狀態(tài)管理 provider
UI適配 flutter_screenutil
刷新控件 flutter_easyrefresh
網(wǎng)絡(luò)請(qǐng)求 dio
toast控件 fluttertoast
圖表庫 charts_flutter
網(wǎng)絡(luò)監(jiān)聽 connectivity
事件總線 event_bus
日歷組件 table_calendar
官方webview webview_flutter
第三方webview flutter_webview_plugin
該篇文章為常用依賴包總結(jié),用來記錄所需要的常用依賴包,后續(xù)會(huì)不斷擴(kuò)充內(nèi)容~
首先要在main.dart文件里創(chuàng)建全局路由監(jiān)聽對(duì)象
傳入MaterialApp的navigatorObservers屬性里
在需要的頁面里使用routeObserver加入監(jiān)聽:
1.在該頁面的State混入RouteAware
2.重寫didChangeDependencies方法加入監(jiān)聽
3.在頁面dispose時(shí)銷毀監(jiān)聽
4.重寫需要監(jiān)聽的事件方法
當(dāng)Push到該頁面時(shí):
當(dāng)Pop到該頁面時(shí):
當(dāng)該頁面Push到其他頁面時(shí):
當(dāng)該頁面被Pop時(shí):
2022.6.11:
注冊(cè)監(jiān)聽入?yún)㈩愋陀凶兓?/p>
1.動(dòng)畫原理:在一段時(shí)間內(nèi)快速的多次改變UI外觀,由于人眼會(huì)產(chǎn)生視覺暫留所以最終看到的就是一個(gè)連續(xù)的動(dòng)畫。
UI的一次改變稱為一個(gè)動(dòng)畫幀,對(duì)應(yīng)一次屏幕刷新。
FPS:幀率,每秒的動(dòng)畫幀數(shù)。
flutter動(dòng)畫分為兩類:
常見動(dòng)畫模式:
是一個(gè)抽象類,主要的功能是保存動(dòng)畫的值和狀態(tài)。常用的一個(gè)Animation類是Animation double ,是一個(gè)在一段時(shí)間內(nèi)依次生成一個(gè)區(qū)間之間的值的類,可以是線性或者曲線或者其他。
可以生成除double之外的其他類型值,如:Animation Color 或 Animation Size 。
是一個(gè)動(dòng)畫控制器,控制動(dòng)畫的播放狀態(tài),在屏幕刷新的每一幀,就會(huì)生成一個(gè)新的值。
包含動(dòng)畫的啟動(dòng)forward()、停止stop() 、反向播放 reverse()等方法,在給定的時(shí)間段內(nèi)線性的生成從0.0到1.0(默認(rèn)區(qū)間)的數(shù)字。
curve:描述動(dòng)畫的曲線過程。
curvedAnimation:指定動(dòng)畫的曲線。
常用Curve:
繼承自Animatable T ,表示的就是一個(gè) Animation 對(duì)象的取值范圍,只需要設(shè)置開始和結(jié)束的邊界值(值也支持泛型)。 它唯一的工作就是定義輸入范圍到輸出范圍的映射。
例如,Tween可能會(huì)生成從紅到藍(lán)之間的色值,或者從0到255。
Tween.animate:返回一個(gè)Animation。
映射過程:
1). Tween.animation通過傳入 aniamtionController 獲得一個(gè)_AnimatedEvaluation 類型的 animation 對(duì)象(基類為 Animation), 并且將 aniamtionController 和 Tween 對(duì)象傳入了 _AnimatedEvaluation 對(duì)象。
2). animation.value方法即是調(diào)用 _evaluatable.evaluate(parent)方法, 而 _evaluatable 和 parent 分別為 Tween 對(duì)象和 AnimationController 對(duì)象。
3). 這里的 animation 其實(shí)就是前面的 AnimationController 對(duì)象, transform 方法里面的 animation.value則就是 AnimationController 線性生成的 0.0~1.0 直接的值。 在 lerp 方法里面我們可以看到這個(gè) 0.0~1.0 的值被映射到了 begin 和 end 范圍內(nèi)了。
接收一個(gè)TickerProvider類型的對(duì)象,它的主要職責(zé)是創(chuàng)建Ticker。
防止屏幕外動(dòng)畫消耗資源。
[圖片上傳失敗...(image-115b94-1636441483468)]
過程:
回調(diào):
不使用addListener()和setState()來給widget添加動(dòng)畫。
使用AnimatedWidget,將widget分離出來,創(chuàng)建一個(gè)可重用動(dòng)畫的widget,AnimatedWidget中會(huì)自動(dòng)調(diào)用addListener()和setState()
AnimatedModalBarrier、DecoratedBoxTransition、FadeTransition、PositionedTransition、RelativePositionedTransition、RotationTransition、ScaleTransition、SizeTransition、SlideTransition
如何渲染過渡,把渲染過程也抽象出來:
AnimatedBuilder的示例包括: BottomSheet、 PopupMenu、ProgressIndicator、RefreshIndicator、Scaffold、SnackBar、TabBar。
MaterialPageRoute:平臺(tái)風(fēng)格一致的路由切換動(dòng)畫
CupertinoPageRoute:左右切換風(fēng)格
自定義:PageRouteBuilder
1.要?jiǎng)?chuàng)建交織動(dòng)畫,需要使用多個(gè)動(dòng)畫對(duì)象(Animation)。
2.一個(gè)AnimationController控制所有的動(dòng)畫對(duì)象。
3.給每一個(gè)動(dòng)畫對(duì)象指定時(shí)間間隔(Interval)
可以同時(shí)對(duì)其新、舊子元素添加顯示、隱藏動(dòng)畫.
當(dāng)AnimatedSwitcher的child發(fā)生變化時(shí)(類型或Key不同),舊child會(huì)執(zhí)行隱藏動(dòng)畫,新child會(huì)執(zhí)行執(zhí)行顯示動(dòng)畫。
希望大家支持一下,感謝
本文將簡單梳理一下 iOS 工程接入的 Flutter Boost 的流程,以作為前文的補(bǔ)充。
flutter_application_path = '../flutter_module'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
target 'FlutterHybridiOS' do
install_all_flutter_pods(flutter_application_path)
end
接著在工程根目錄下運(yùn)行 pod install ,即可集成上 Flutter Module。看到我們的 Pods 中多了以下幾個(gè)模塊,即說明集成成功。
接著在工程根目錄下運(yùn)行 pod install ,即可集成上 Flutter Module。看到我們的 Pods 中多了以下幾個(gè)模塊,即說明集成成功。
這一塊直接參照 Flutter Boost 官方提供的 example 就好了:
PlatformRouterImp.h:
PlatformRouterImp.m:
可以看到,F(xiàn)lutter Boost 支持常規(guī) push,也支持打開模態(tài)彈窗,也支持手動(dòng) pop。
AppDelegate.h:
AppDelegate.m:
同樣的,這里可在 Native 端用兩種不同的方式去打開我們?cè)?Flutter Module 中注冊(cè)好的路由名。
至此,我們成功在 iOS 工程中接入了 Flutter Boost,那就開啟我們的混編之旅吧~
標(biāo)題名稱:Flutter路由機(jī)制,flutter 路由管理
分享路徑:http://chinadenli.net/article25/dsicgci.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、小程序開發(fā)、營銷型網(wǎng)站建設(shè)、ChatGPT、企業(yè)建站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)