Flutter1.12 升级后的问题

栏目: IT技术 · 发布时间: 5年前

内容简介:作者:Thelastgame链接:https://www.jianshu.com/p/579d94f4ddf5

code小生 一个专注大前端领域的技术平台 公众号回复 Android 加入安卓技术群

作者:Thelastgame

链接:https://www.jianshu.com/p/579d94f4ddf5

声明:本文已获 Thelastgame 授权发表,转发等请联系原作者授权

相信看过官方更新日志的小伙伴都知道新版本的flutter和Android原生交互有一些改变,主要在以下部分

1.自定义的Plugin类需要实现FlutterPlugin的接口,并实现以下两个方法

@Override
    public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { //注册,等同于原来的registerWith
    final MethodChannel channel = new  MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "flutter_wx");
    channel.setMethodCallHandler(new FlutterWxPlugin());
}

     @Override
      public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
}

2.获取Flutter传递过来的数据(方法名)需要实现MethodCallHandler(和之前版本的一样)

@Override
      public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
      Log.d(TAG, "onMethodCall:" + activity);
      Toast.makeText(activity, "TestActivity", Toast.LENGTH_SHORT).show();
      if (call.method.equals("getPlatformVersion")) {
        result.success("Android " + android.os.Build.VERSION.RELEASE);
      } else {
        result.notImplemented();
      }
  }

3.现在有一个需求就是需要在onMethodCall方法中获取activity对象,新版本给我们提供了新的接口让我更好的来处理Plugin和Activity的一些交互,所以我们实现ActivityAware这个接口,重写下面的方法,在onAttachedToActivity中我们可以通过binding.getActivity()获取当前的activity对象,然后赋给我们定义的全局变量,这个时候问题来了,我们在onMethodCall方法中得到的activity的值始终为null

@Override
public void onAttachedToActivity(ActivityPluginBinding binding) {
    Log.d(TAG, "onAttachedToActivity");
    this.activity = binding.getActivity();
}

@Override
public void onDetachedFromActivityForConfigChanges() {

}

@Override
public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {

}

@Override
public void onDetachedFromActivity() {

}

4.解决方法,修改 onAttachedToEngine方法中的channel.setMethodCallHandler(new FlutterWxPlugin())为 channel.setMethodCallHandler(this);

@Override
    public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { //注册,等同于原来的registerWith
    final MethodChannel channel = new  MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "flutter_wx");
    channel.setMethodCallHandler(this);//修改此处为this
}

5.总结,具体问题的原因还没有细研究,当Plugin初始化的时候复写的方法会执行两次。期待官方的解决办法。

参考 https://www.gitmemory.com/issue/flutter/flutter/48802/575876559


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人工智能时代

人工智能时代

[ 美]杰瑞•卡普兰(Jerry Kaplan) / 李盼 / 浙江人民出版社 / 2016-4-1 / CNY 59.90

 当机器人霸占了你的工作,你该怎么办?机器人犯罪,谁才该负责?人工智能时代,人类价值如何重新定义?  在《人工智能时代》一书中,智能时代领军人、硅谷连续创业者杰瑞·卡普兰指出:智能时代的到来,给人类社会带来了两大灾难性冲击:持续性失业与不断加剧的贫富差距。机器正在很大程度上替代人类的工作,不管你是蓝领还是白领。而针对未来社会将要发生的这些问题,卡普兰在《人工智能时代》一书中从企业、税收和......一起来看看 《人工智能时代》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码