實(shí)際上一年前我接觸flutter的時(shí)候弄過一次,具體的實(shí)現(xiàn)放到上家公司的conflunce了。過了一年重新開始弄flutter侮攀,再次記錄一下。
目前厢拭,咸魚商業(yè)使用flutter是比較成功的兰英,開發(fā)是使用的咸魚的Fish_Redux框架,咸魚也有調(diào)原生的框架Flutter Boost蚪腐,不過這次先不講箭昵,后面有機(jī)會(huì)在寫一寫。
其實(shí)Flutter調(diào)原生還算簡(jiǎn)單回季,先給出flutter實(shí)戰(zhàn)的教程地址家制。
https://book.flutterchina.club/chapter12/platform-channel.html
一正林、創(chuàng)建一個(gè)新的應(yīng)用程序項(xiàng)目
在終端中運(yùn)行:flutter create batterylevel
默認(rèn)情況下,模板支持使用Java編寫Android代碼颤殴,或使用Objective-C編寫iOS代碼觅廓。要使用Kotlin或Swift,請(qǐng)使用-i和/或-a標(biāo)志:
在終端中運(yùn)行:flutter create -i swift -a kotlin batterylevel
二涵但、先在需要調(diào)用的State中定義一個(gè)通道
///定義一個(gè)通道
static const platform = const MethodChannel('com.hikvision.bettery');
需要注意的是通道的名字要唯一杈绸,可以在前面加上包名之類的。
三矮瘟、寫一個(gè)方法來調(diào)取原生的方法
Future<Null> getBetteryLevel() async {
try {
final int result = await platform.invokeMethod('getBetteryLevel');
betteryText = "the bettery is $result";
} on PlatformException catch (e) {
betteryText = "the bettery get failed ${e.message}";
}
setState(() {});
}
很簡(jiǎn)單就是要調(diào)用原生的getBetteryLevel這個(gè)方法瞳脓。
四、寫一個(gè)按鈕來調(diào)上面的方法
RaisedButton(onPressed:() async{
await getBetteryLevel();
} )
這個(gè)地方需要注意是getBetteryLevel是異步的澈侠,一定要加上async 和await劫侧。
到這里flutter端的代碼已經(jīng)完成。是不是很簡(jiǎn)單哨啃!
接下來就開始原生的代碼了烧栋,寫getBetteryLevel這個(gè)方法給flutter這調(diào)一下。
五拳球、在Android Studio中打開您的Flutter應(yīng)用的Android部分:
啟動(dòng) Android Studio
選擇 File > Open…
定位到您 Flutter app目錄, 然后選擇里面的 android文件夾审姓,點(diǎn)擊 OK
在java目錄下打開 MainActivity.java
為什么要單獨(dú)打開,因?yàn)榭梢詥为?dú)運(yùn)行祝峻,調(diào)試魔吐。
六、
class MainActivity: FlutterActivity() {
//這個(gè)跟flutter的通道名稱保持一直
private val channel = "com.hikvision.bettery"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(flutterEngine!!);
MethodChannel(flutterEngine?.dartExecutor,channel).setMethodCallHandler { call, result ->
//這里是判斷是不是調(diào)getBetteryLevel方法莱找,因?yàn)樗械姆椒ǘ甲哌@里
if(call.method == "getBetteryLevel"){
result.success(1);
showDialog()
}else{
result.notImplemented()
}
}
}
fun showDialog(){
AlertDialog.Builder(this).setMessage("你好 flutter")
.setTitle("flutter 調(diào)取原生")
.setPositiveButton("一級(jí)棒",DialogInterface.OnClickListener{
dialogInterface,i ->
Toast.makeText(this@MainActivity,"實(shí)驗(yàn)很成功",Toast.LENGTH_SHORT).show()
Log.d("azy","toast show()")
})
.setNegativeButton("取消",null)
.create()
.show();
}
}
代碼很少画畅,關(guān)鍵的兩個(gè)點(diǎn)也注釋了。flutter實(shí)戰(zhàn)的寫法我這有點(diǎn)不一樣宋距,它那個(gè)比較舊了。