flutter和Android原生頁面交互

一:原生頁面---->跳轉(zhuǎn)flutter頁面(方式1)

參考:點擊跳轉(zhuǎn)

1. AndroidManifest.[xml]注冊 FlutterActivity

<activity
    android:name="io.flutter.embedding.android.FlutterActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:theme="@style/Theme.AppCompat"
    android:windowSoftInputMode="adjustResize" /> 

2.startActivity(new Intent(MainActivity.this, FlutterActivity.class));(FlutterActivity指向的是flutter系統(tǒng)main.dart頁面)

這種方式原生傳參flutter參照:https://zhuanlan.zhihu.com/p/66081592

二Android跳轉(zhuǎn)到指定的Flutter頁面半缦纭(方式2)

通過路由來跳轉(zhuǎn)峭咒,需要先聲明路由逼泣。MeterialApp中聲明路由:

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
 //這種方式不能傳遞參數(shù)赎婚,主要是方便原生調(diào)用
      routes: <String, WidgetBuilder>{
        "login": (context) => FromPage(),
       
      },
      home: MyHomePage(title: "Flutter Demo"),
    );
  }
}
Android部分通過指定路由跳轉(zhuǎn):

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn2:
                startActivity(FlutterActivity
                        .withNewEngine()
                        .initialRoute("login")
//                        .initialRoute("old_password")
//                        .initialRoute("code_password")
                        .build(MainActivity.this));
                break;
        }
    }

class FromPage extends StatelessWidget{
  String title;

//dart:
  FromPage({this.title='默認(rèn)From'});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(this.title),  //在此處页屠,將傳遞的數(shù)據(jù)進(jìn)行引用
      ),
      body: ListView(
        children: <Widget>[
          ListTile(
            title: Text('我是表單'),
          ),
          ListTile(
            title: Text('我是表單'),
          ),
       
          ListTile(
            title: Text('我是表單'),
          ),

        ],
      ),
    );
  }

},

方式三:使用緩存的FlutterEngine跳轉(zhuǎn)到指定的Flutter頁面(解決跳轉(zhuǎn)Flutter頁面的卡頓)

在Application中設(shè)置好要緩存的頁面

public class App extends Application {
    FlutterEngine flutterEngine;// 使用緩存的FlutterEngine
    @Override
    public void onCreate() {
        super.onCreate();
        // 實例化FlutterEngine
        flutterEngine = new FlutterEngine(this);
        // 設(shè)置要緩存的頁面
        flutterEngine.getNavigationChannel().setInitialRoute("login");//這里login和Dart保持一致
        // 開始執(zhí)行Dart代碼以預(yù)熱FlutterEngine
        flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());
        // 緩存FlutterActivity要使用的FlutterEngine
        FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine);
    }

    @Override
    public void onTerminate() {
        //銷毀flutter引擎
        flutterEngine.destroy();
        super.onTerminate();
    }

}
原生頁面跳轉(zhuǎn)
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn3:
                startActivity(FlutterActivity
                        .withCachedEngine("my_engine_id")
                        .build(MainActivity.this));
                break;
        }
    }

**Dart頁面**
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_module/user_login_page.dart';
import 'package:flutter_module/user_update_password_page_for_code.dart';
import 'package:flutter_module/user_update_password_page_for_old.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      routes: <String, WidgetBuilder>{
        "login": (context) => UserLoginPage()這里login和上面Application 保持一致
      },
      // home: MyHomePage(title: "Flutter Demo"),
      home: _widgetForRoute(window.defaultRouteName),//根據(jù)傳過來的值打開相應(yīng)頁面
    );
  }
}

Widget _widgetForRoute(String route) {
  switch (route) {
    case 'login':
      return Center(
        child: UserLoginPage(),
      );
    case 'old_password':
      return  Center(
          UserUpdatePasswordForOldPage()
      );
    case 'code_password':
      return Center(
          UserUpdatePasswordForCodePage()
      );
    default:
      return Center(
        child: MyHomePage(title: "123456"),
      );
  }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末济榨,一起剝皮案震驚了整個濱河市征绎,隨后出現(xiàn)的幾起案子穷当,更是在濱河造成了極大的恐慌获洲,老刑警劉巖阱表,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡最爬,警方通過查閱死者的電腦和手機涉馁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爱致,“玉大人烤送,你說我怎么就攤上這事】访酰” “怎么了帮坚?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長互艾。 經(jīng)常有香客問我试和,道長,這世上最難降的妖魔是什么纫普? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任阅悍,我火速辦了婚禮,結(jié)果婚禮上昨稼,老公的妹妹穿的比我還像新娘节视。我一直安慰自己,他們只是感情好悦昵,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布肴茄。 她就那樣靜靜地躺著,像睡著了一般但指。 火紅的嫁衣襯著肌膚如雪寡痰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天棋凳,我揣著相機與錄音拦坠,去河邊找鬼。 笑死剩岳,一個胖子當(dāng)著我的面吹牛贞滨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拍棕,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼晓铆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绰播?” 一聲冷哼從身側(cè)響起骄噪,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蠢箩,沒想到半個月后链蕊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體事甜,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年滔韵,在試婚紗的時候發(fā)現(xiàn)自己被綠了逻谦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡陪蜻,死狀恐怖邦马,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情囱皿,我是刑警寧澤勇婴,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站嘱腥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拘悦。R本人自食惡果不足惜齿兔,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望础米。 院中可真熱鬧分苇,春花似錦、人聲如沸屁桑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蘑斧。三九已至靖秩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竖瘾,已是汗流浹背沟突。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捕传,地道東北人惠拭。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像庸论,于是被迫代替她去往敵國和親职辅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

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