FlutterFlutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FlutterFlutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )相关的知识,希望对你有一定的参考价值。

前言

在上一篇博客 【Flutter】Flutter 混合开发 ( 关联 Android 工程与 Flutter 工程 | 安卓页面中嵌入 Flutter 页面 | 安卓中启动 Flutter 页面 ) 中 , 创建 android 工程 , 并将两个工程进行关联 , 在 Android 的 Activity 界面中嵌入了 FlutterFragment , 在 Android 中启动了 FlutterActivity ;

本篇博客介绍如何从 Android 端向 Flutter 端传递数据 ;


Flutter 混合开发集成步骤 :

  • ① 在 Android Studio 中创建 Flutter Module ;
  • ② 为 Native 应用添加 Flutter Module 依赖 ;
  • ③ 在 Native 应用 ( Android / iOS 应用 ) 中 , 调用 Flutter Module 模块 ;
  • ④ 编写 Flutter Module 中的 Dart 代码 ;
  • ⑤ 运行 Flutter 混合应用 ;
  • ⑥ 项目的 热重启 / 重新加载 ;
  • ⑦ 调试 Dart 代码 ;
  • ⑧ 应用发布 ;




一、FlutterFragment 数据传递



调用 FlutterFragment.createDefault() 创建的 FlutterFragment , 没有传递任何数据 ;

调用 FlutterFragment.withNewEngine() 可以获取创建的 Flutter 引擎 , 通过该 Flutter 引擎 , 可以设置 initialRoute 参数 ;

设置代码如下 :

findViewById(R.id.flutter1).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        // 使用该方法创建的 Fragment 没有传递数据
        //FlutterFragment.createDefault()
        // 打开默认界面
        //fragmentTransaction.replace(R.id.frame, FlutterFragment.createDefault());
        // 创建 FlutterFragment
        fragmentTransaction.replace(R.id.frame,
                FlutterFragment.withNewEngine().initialRoute("Android 中嵌入 FlutterFragment").build());
        fragmentTransaction.commit();
    }
});

Flutter 中接收到数据后 , 将传入的数据设置为标题 ;

执行效果如下 : Flutter 界面的标题变为 " Android 中嵌入 FlutterFragment " ;





二、FlutterActivity 数据传递



与 FlutterFragment 类似 , FlutterActivity 也可以调用 FlutterActivity.withNewEngine() 获取一个 Flutter 引擎 ;

通过该 Flutter 引擎 , 可以设置 initialRoute 参数 ;

设置代码如下 :

findViewById(R.id.flutter2).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = FlutterActivity
                .withNewEngine()
                .initialRoute("Android 中启动 FlutterActivity")
                .build(MainActivity.this);
        intent.putExtra("initParams", "Android 中启动 FlutterActivity2");
        startActivity(intent);
    }
});

执行效果如下 : Flutter 界面的标题变为 " Android 中启动 FlutterActivity " ;





三、相关资源



参考资料 :


重要的专题 :


博客源码下载 :

以上是关于FlutterFlutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )的主要内容,如果未能解决你的问题,请参考以下文章

FlutterFlutter 混合开发 ( 关联 Android 工程与 Flutter 工程 | 安卓页面中嵌入 Flutter 页面 | 安卓中启动 Flutter 页面 )

FlutterFlutter 混合开发 ( Flutter 与 Native 通信 | Android 端实现 MethodChannel 通信 )

FlutterFlutter 混合开发 ( Flutter 与 Native 通信 | Android 端实现 BasicMessageChannel 通信 )

FlutterFlutter 混合开发 ( Flutter 与 Native 通信 | 完整代码示例 )

FlutterFlutter 混合开发 ( Flutter 与 Native 通信 | Android 端实现 EventChannel 通信 )

FlutterFlutter 混合开发 ( Flutter 与 Native 通信 | 在 Flutter 端实现 BasicMessageChannel 通信 )