实际上一年前我接触flutter的时候弄过一次,具体的实现放到上家公司的conflunce了。过了一年重新开始弄flutter,再次记录一下。
目前,咸鱼商业使用flutter是比较成功的,开发是使用的咸鱼的Fish_Redux框架,咸鱼也有调原生的框架Flutter Boost,不过这次先不讲,后面有机会在写一写。
其实Flutter调原生还算简单,先给出flutter实战的教程地址。
https://book.flutterchina.club/chapter12/platform-channel.html
一、创建一个新的应用程序项目
在终端中运行:flutter create batterylevel
默认情况下,模板支持使用Java编写Android代码,或使用Objective-C编写iOS代码。要使用Kotlin或Swift,请使用-i和/或-a标志:
在终端中运行:flutter create -i swift -a kotlin batterylevel
二、先在需要调用的State中定义一个通道
///定义一个通道
static const platform = const MethodChannel('com.hikvision.bettery');
需要注意的是通道的名字要唯一,可以在前面加上包名之类的。
三、写一个方法来调取原生的方法
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(() {});
}
很简单就是要调用原生的getBetteryLevel这个方法。
四、写一个按钮来调上面的方法
RaisedButton(onPressed:() async{
await getBetteryLevel();
} )
这个地方需要注意是getBetteryLevel是异步的,一定要加上async 和await。
到这里flutter端的代码已经完成。是不是很简单!
接下来就开始原生的代码了,写getBetteryLevel这个方法给flutter这调一下。
五、在Android Studio中打开您的Flutter应用的Android部分:
启动 Android Studio
选择 File > Open…
定位到您 Flutter app目录, 然后选择里面的 android文件夹,点击 OK
在java目录下打开 MainActivity.java
为什么要单独打开,因为可以单独运行,调试。
六、
class MainActivity: FlutterActivity() {
//这个跟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 ->
//这里是判断是不是调getBetteryLevel方法,因为所有的方法都走这里
if(call.method == "getBetteryLevel"){
result.success(1);
showDialog()
}else{
result.notImplemented()
}
}
}
fun showDialog(){
AlertDialog.Builder(this).setMessage("你好 flutter")
.setTitle("flutter 调取原生")
.setPositiveButton("一级棒",DialogInterface.OnClickListener{
dialogInterface,i ->
Toast.makeText(this@MainActivity,"实验很成功",Toast.LENGTH_SHORT).show()
Log.d("azy","toast show()")
})
.setNegativeButton("取消",null)
.create()
.show();
}
}
代码很少,关键的两个点也注释了。flutter实战的写法我这有点不一样,它那个比较旧了。
![](https://img.haomeiwen.com/i4163152/2b812e15a667fc26.jpeg)
网友评论