Flutter 與原生最簡單的數(shù)據(jù)交互的方法

image

序言

這次開發(fā)的App跟BLE Beacon相關(guān),原生負(fù)責(zé)搜索附近的Beacon數(shù)據(jù)并上報到服務(wù)器,F(xiàn)lutter端作為信息展示。本來兩邊是涇渭分明的,但是原生這邊需要獲取到Flutter端請求的Token作為服務(wù)器身份驗證。于是有了這篇最簡單的數(shù)據(jù)交互方法。

1.SharedPreferences

本來打算按部就班的按照 Flutter與原生(Android)的交互 實現(xiàn)交互方法的。跟前端小伙伴簡單溝通了下,發(fā)現(xiàn)Flutter端是使用名為SharedPreferences的插件保存Token的。作為Android 開發(fā)者,對這個名字應(yīng)該相當(dāng)熟悉了。如果它的機制跟Android 原生的SharedPreferences一樣保存為本地Xml,那我豈不是連交互方法都不用寫就能獲取到他的Token了。

2.分析源碼

這里是SharedPreferences的源碼地址

image.png

從目錄可以看到其實這個Flutter插件本質(zhì)也只是一個Flutter項目,android 與 ios 文件夾分別對應(yīng)不同的實現(xiàn)。我們進到android目錄下看看到底是怎么實現(xiàn)的。

image.png

這個插件的實現(xiàn)還是比較簡單的,SharedPreferencesPlugin就是核心類

image.png

這個類實現(xiàn)了MethodCallHandler,通過android.content.SharedPreferences給Flutter端暴露相關(guān)get put 方法,可以看到SP的文件名即是FlutterSharedPreferences

向前端小伙伴要了key,在原生這邊嘗試讀取這個token

sharedPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE)
val token = sharedPreferences.getString("accesstoken", "null")

正當(dāng)自信滿滿的以為能成功讀取發(fā)現(xiàn)拿到的String居然為null,這不合理呀。
不過沒關(guān)系,SharedPreferences是保存在data 里面 shared_prefs 文件夾內(nèi)
打開手機目錄data/data/com..../shared_prefs 看到確實存在FlutterSharedPreferences.xml文件

image.png
image.png

原來默認(rèn)在前面加了一個flutter.前綴,只掃了兩眼源碼粗心忽略了...補上一個前綴就可以正常讀取了

附上IOS端的實現(xiàn),也比較簡單只是使用了NSUserDefaults


image.png

3.尾語

這個方法雖然簡單,局限性也很大。不過很適合我這種場景,我始終認(rèn)為方法千千萬,沒必要一定按照常規(guī)做法,適合自己的才是好方法。

點擊這里發(fā)現(xiàn)更多你需要的知識

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容