Flutter 顯示百度地圖 Native 組件

Flutter 相對(duì)還是很新的一門(mén)技術(shù),目前來(lái)看市場(chǎng)上好像阿里對(duì) Flutter 的關(guān)注度最高芽淡,相關(guān)的技術(shù)討論也是最多的。今天看了篇 Flutter 與 Native 混合棧開(kāi)發(fā)的文章谤饭,覺(jué)得 Flutter 好牛逼播歼,當(dāng)然這只是個(gè) Flutter 新手的錯(cuò)覺(jué)~

文章寫(xiě)的很好,簡(jiǎn)單易懂蚓炬,先放出處:在Flutter中嵌入Native組件的正確姿勢(shì)是...松逊,看了文章想親自動(dòng)手實(shí)踐一下。

前提

  1. 已經(jīng)有了 Flutter 開(kāi)發(fā)環(huán)境
  2. 已經(jīng)注冊(cè)了百度地圖的開(kāi)發(fā)者密鑰肯夏,并按 教程 導(dǎo)入 SDK
  3. 創(chuàng)建一個(gè) Flutter Application 工程

開(kāi)始

Flutter 顯示 Native 組件最關(guān)鍵的一個(gè)類是 AndroidView经宏,它可以嵌入到 Widget 視圖里,不過(guò)這種操作代價(jià)比較大驯击, Flutter 官方文檔描述提到盡可能使用 Flutter 的實(shí)現(xiàn)方式來(lái)避免使用它烛恤。

Native 端

初始化百度地圖

首先注意下 AndroidManifest.xml 文件 Application 的 name 參數(shù)為 io.flutter.app.FlutterApplication,所以如果想在 Application 初始化百度地圖 SDK 的話余耽,應(yīng)當(dāng)繼承它來(lái)重寫(xiě) onCreate 方法

新建一個(gè)名為 MainApplication.java 的文件

public class MainApplication extends FlutterApplication {

    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化百度地圖 SDK
        SDKInitializer.initialize(this);
        SDKInitializer.setCoordType(CoordType.BD09LL);
    }
}

然后將 AndroidManifest.xml 的 application name 參數(shù)改為 .MainApplication

添加 PlatformViewFactory

寫(xiě)一個(gè) PlatformViewFactoryPlatformViewFactory 的主要任務(wù)是苹熏,在 create() 方法中創(chuàng)建一個(gè) View 并把它傳給 Flutter

public class BMapViewFactory extends PlatformViewFactory {

    private MapView mapView;

    public BMapViewFactory(MessageCodec<Object> createArgsCodec, MapView mapView) {
        super(createArgsCodec);
        this.mapView = mapView;
    }

    @Override
    public PlatformView create(final Context context, int i, Object o) {
        return new PlatformView() {
            @Override
            public View getView() {
                return mapView;
            }

            @Override
            public void dispose() {

            }
        };
    }
}

添加 ViewRegistrant

添加 ViewRegistrant 類將該插件注冊(cè)到 APP碟贾,ViewTypeMapView。參數(shù)中新增實(shí)例化的百度地圖 MapView轨域。

public final class ViewRegistrant {
    public static void registerWith(PluginRegistry registry, MapView mapView) {
        final String key = ViewRegistrant.class.getCanonicalName();

        if (registry.hasPlugin(key)) return;

        PluginRegistry.Registrar registrar = registry.registrarFor(key);
        registrar.platformViewRegistry().registerViewFactory("MapView", new BMapViewFactory(new StandardMessageCodec(), mapView));
    }
}

注冊(cè) PlatformViewFactory

MainActivity 中實(shí)例化地圖并且注冊(cè)以上添加的 ViewRegistrant 類袱耽。

public class MainActivity extends FlutterActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MapView mapView = new MapView(this);
    ViewRegistrant.registerWith(this, mapView);
  }
}

Flutter 端

簡(jiǎn)單實(shí)現(xiàn)一個(gè)只有地圖的界面,實(shí)例化 AndroidView干发,viewType 設(shè)置為剛剛創(chuàng)建的 MapView朱巨,將百度地圖顯示。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new Scaffold(
        appBar: AppBar(title: Text("Map"),),
        body: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(child: new AndroidView(viewType: 'MapView'))
          ],
        ),
      ),
    );
  }
}

編譯

如此枉长,地圖正常顯示了冀续。

Screenshot_1542520655.png

項(xiàng)目源碼

應(yīng)一些朋友的要求琼讽,放一下項(xiàng)目源碼,歡迎 star
FlutterWithMap

我的博客:時(shí)空路由器
文章原地:Flutter 顯示百度地圖 Native 組件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洪唐,一起剝皮案震驚了整個(gè)濱河市钻蹬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凭需,老刑警劉巖问欠,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粒蜈,居然都是意外死亡顺献,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)枯怖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)注整,“玉大人,你說(shuō)我怎么就攤上這事嫁怀∩杈瑁” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵塘淑,是天一觀的道長(zhǎng)萝招。 經(jīng)常有香客問(wèn)我,道長(zhǎng)存捺,這世上最難降的妖魔是什么槐沼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮捌治,結(jié)果婚禮上岗钩,老公的妹妹穿的比我還像新娘。我一直安慰自己肖油,他們只是感情好兼吓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著森枪,像睡著了一般视搏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上县袱,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天浑娜,我揣著相機(jī)與錄音,去河邊找鬼式散。 笑死筋遭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漓滔,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼编饺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了次和?” 一聲冷哼從身側(cè)響起反肋,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踏施,沒(méi)想到半個(gè)月后石蔗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畅形,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年养距,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片日熬。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棍厌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竖席,到底是詐尸還是另有隱情耘纱,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布毕荐,位于F島的核電站束析,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏憎亚。R本人自食惡果不足惜员寇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望第美。 院中可真熱鬧蝶锋,春花似錦、人聲如沸什往。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)别威。三九已至第献,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兔港,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工仔拟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衫樊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像科侈,于是被迫代替她去往敵國(guó)和親载佳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容