flutter 原生跳轉(zhuǎn)到裝有flutterView的原生activity

FlutterView 是用來裝載flutter widget的載體英染,可以在原生上面直接添加 揽惹,有人說會(huì)有黑屏,很奇怪四康,我這邊沒有碰到哦

首先項(xiàng)目是直接新建的flutter 項(xiàng)目搪搏,單獨(dú)打開android項(xiàng)目疯溺,項(xiàng)目視圖是這樣的


項(xiàng)目視圖.jpg

項(xiàng)目的build.gradle上面注意要引入flutter

implementation project(':flutter')
項(xiàng)目視圖2.jpg

這個(gè)時(shí)候原生項(xiàng)目就可以使用 flutterView了,就不會(huì)報(bào)警告了

項(xiàng)目就簡(jiǎn)單了建立了2個(gè)Activity,如下圖


項(xiàng)目視圖3.jpg

接下來就直接貼代碼了墨闲,很簡(jiǎn)單
MainActivity.class

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button open = findViewById(R.id.openBtn);
        open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, MyFlutterActivity.class);
                startActivity(intent);
            }
        });

    }
}

activity_main.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/openBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="打開flutter頁(yè)面" />


</RelativeLayout>

第二個(gè)Activity MyFlutterActivity.class

public class MyFlutterActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_flutter);

        final FlutterView flutterView = Flutter.createView(
                this,
                getLifecycle(),
                "route1"
        );


        final FrameLayout layout = findViewById(R.id.flutter_container);
        layout.addView(flutterView);

        final FlutterView.FirstFrameListener[] listeners = new FlutterView.FirstFrameListener[1];
        listeners[0] = new FlutterView.FirstFrameListener() {
            @Override
            public void onFirstFrame() {
                layout.setVisibility(View.VISIBLE);
            }
        };
        flutterView.addFirstFrameListener(listeners[0]);
    }
}

布局代碼activity_flutter.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              android:visibility="visible">

    <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="原生text"/>

    <FrameLayout android:id="@+id/flutter_container"
            android:layout_width="match_parent" android:layout_height="match_parent"></FrameLayout>

</LinearLayout>

記得要去manifest里面去注冊(cè)activity

接下來就是flutter了,先看一下項(xiàng)目結(jié)構(gòu)


flutter結(jié)構(gòu).jpg

然后就是代碼了 main.dart

import 'dart:ui';

import 'package:flutter/material.dart';

void main() => runApp(
    _widgetForRoute(window.defaultRouteName)
);

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

Widget _widgetForRoute(String route) {
return MyApp();
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

代碼就這樣結(jié)束了,最后跑起來看下效果圖


效果1.jpg

效果2.jpg

親測(cè)沒有黑屏琐脏,如果有問題日裙,請(qǐng)留言

native 和 flutter 的混合界面如下


原生和flutter view.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昂拂,一起剝皮案震驚了整個(gè)濱河市格侯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撑碴,老刑警劉巖朝墩,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件收苏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡排吴,警方通過查閱死者的電腦和手機(jī)杜跷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門葛闷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來双藕,“玉大人,你說我怎么就攤上這事扣泊∷惶” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵阱飘,是天一觀的道長(zhǎng)沥匈。 經(jīng)常有香客問我高帖,道長(zhǎng)畦粮,這世上最難降的妖魔是什么乖阵? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任义起,我火速辦了婚禮默终,結(jié)果婚禮上犁罩,老公的妹妹穿的比我還像新娘。我一直安慰自己含滴,他們只是感情好丐巫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布递胧。 她就那樣靜靜地躺著,像睡著了一般祝闻。 火紅的嫁衣襯著肌膚如雪遗菠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天豁遭,我揣著相機(jī)與錄音蓖谢,去河邊找鬼纵柿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沟使,可吹牛的內(nèi)容都是我干的渊跋。 我是一名探鬼主播着倾,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼卡者,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼客们!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恒傻,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盈厘,失蹤者是張志新(化名)和其女友劉穎官边,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體契吉,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栅隐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谨究。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畔塔,死狀恐怖澈吨,靈堂內(nèi)的尸體忽然破棺而出寄摆,到底是詐尸還是另有隱情,我是刑警寧澤婶恼,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站蚣录,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏荔泳。R本人自食惡果不足惜虐杯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一厦幅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧译荞,春花似錦、人聲如沸休弃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)糯俗。三九已至睦擂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顿仇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工鸿吆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惩淳,地道東北人市埋。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓恕刘,卻偏偏與公主長(zhǎng)得像褐着,于是被迫代替她去往敵國(guó)和親托呕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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