Flutter 升级到 1.12.13 后,嵌入Android原生组件的问题
2020-02-10 21:49 浏览(2268

Flutter 升级到 1.12 后,使用原生Android组件有些变化,需要更新Android代码

关于 Flutter 如何嵌入Android组件请自行百度。

这里我是修改百度地图。

import com.baidu.mapapi.map.MapView;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.StandardMessageCodec;

public final class MapRegistrant {
    public static void registerWith(PluginRegistry registry, MapView mapView) {
        final String key = MapRegistrant.class.getCanonicalName();
        if (registry.hasPlugin(key)) return;
        PluginRegistry.Registrar registrar = registry.registrarFor(key);
        registrar.platformViewRegistry().registerViewFactory("BDMap", new MapViewFactory(new StandardMessageCodec(), mapView));
    }
}

Flutter 升级到 1.12 后,修改如下

import com.baidu.mapapi.map.MapView;

import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.StandardMessageCodec;

public final class MapRegistrant {
    public static void registerWith(FlutterEngine flutterEngine, MapView mapView) {
        final String key = MapRegistrant.class.getCanonicalName();
        ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
        if (shimPluginRegistry.hasPlugin(key)) return;
        PluginRegistry.Registrar registrar = shimPluginRegistry.registrarFor(key);
        registrar.platformViewRegistry().registerViewFactory("BDMap", new MapViewFactory(new StandardMessageCodec(), mapView));
    }
}

registry 改为 flutterEngine,然后使用 ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine); 


Flutter 1.12 中 MainActivity 使用了 configureFlutterEngine 方法,不再使用  onCreate 方法

在 configureFlutterEngine 方法中使用 如下方式调用 

public class MainActivity extends FlutterActivity {

    @Override
    public void configureFlutterEngine(FlutterEngine flutterEngine){
        GeneratedPluginRegistrant.registerWith(flutterEngine);

        MapView mapView = new MapView(this);
        MapRegistrant.registerWith(flutterEngine, mapView);
    }

}


关于 Flutter 1.12 和 Android 通信的其它问题,参考 这篇文章


评论(3)

Kiwi2021

Flutter 的起源
Flutter 的诞生其实比较有意思,Flutter 诞生于 Chrome 团队的一场内部实验, 谷歌的前端团队在把前端一些“乱七八糟“的规范去掉后,发现在基准测试里性能居然提高了 20 倍,机缘巧合下 Flutter 就这么被立项。英国乐透8

所以 Flutter 是基于前端诞生,同时基于它的诞生缘由,可以看到 Flutter 本身就不会有特别多的语法糖,作为框架它比较“保守”,选择的 Dart 语言也是保守型的语言。而它的编程模式,语法都带有浓厚的前端色彩,可是它却最先运用在移动客户端的开发。

2021-12-22 12:18 0 回复
发布评论
回复X
聊天室(0