Flutter 与原生最简单的数据交互的方法

序言

这次开发的App跟BLE Beacon相关,原生负责搜索附近的Beacon数据并上报到服务器,Flutter端作为信息展示。本来两边是泾渭分明的,但是原生这边需要获取到Flutter端请求的Token作为服务器身份验证。于是有了这篇最简单的数据交互方法。

1.SharedPreferences

本来打算按部就班的按照 Flutter与原生(Android)的交互 实现交互方法的。跟前端小伙伴简单沟通了下,发现Flutter端是使用名为SharedPreferences的插件保存Token的。作为Android 开发者,对这个名字应该相当熟悉了。如果它的机制跟Android 原生的SharedPreferences一样保存为本地Xml,那我岂不是连交互方法都不用写就能获取到他的Token了。

2.分析源码

这里是SharedPreferences的源码地址

image.png
从目录可以看到其实这个Flutter插件本质也只是一个Flutter项目,android 与 ios 文件夹分别对应不同的实现。我们进到android目录下看看到底是怎么实现的。

image.png
这个插件的实现还是比较简单的,SharedPreferencesPlugin就是核心类

image.png

这个类实现了MethodCallHandler,通过android.content.SharedPreferences给Flutter端暴露相关get put 方法,可以看到SP的文件名即是FlutterSharedPreferences

向前端小伙伴要了key,在原生这边尝试读取这个token

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

正当自信满满的以为能成功读取发现拿到的String居然为null,这不合理呀。
不过没关系,SharedPreferences是保存在data 里面 shared_prefs 文件夹内
打开手机目录data/data/com…/shared_prefs 看到确实存在FlutterSharedPreferences.xml文件

image.png

image.png

原来默认在前面加了一个flutter.前缀,只扫了两眼源码粗心忽略了…补上一个前缀就可以正常读取了

附上IOS端的实现,也比较简单只是使用了NSUserDefaults
image.png

3.尾语

这个方法虽然简单,局限性也很大。不过很适合我这种场景,我始终认为方法千千万,没必要一定按照常规做法,适合自己的才是好方法。

点击这里发现更多你需要的知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值