美文网首页
使用MethodChannel,Android和Flutter互

使用MethodChannel,Android和Flutter互

作者: 努力生活的西鱼 | 来源:发表于2024-02-26 16:46 被阅读0次
    一. Android跳转到Flutter
    1. 继承FlutterFragmentActivity,并构建Intent
    class NewHouseMainActivity : FlutterFragmentActivity() {
    
        // 通道
        private lateinit var methodChannel: MethodChannel
    
        companion object {
    
            private const val EXTRA_INITIAL_ROUTE = "route"
    
            private const val EXTRA_BACKGROUND_MODE = "background_mode"
    
            private const val EXTRA_DESTROY_ENGINE_WITH_ACTIVITY = "destroy_engine_with_activity"
    
            /**
             * 构建Intent
             */
            fun buildIntent(context: Context,routeName: String): Intent {
                return Intent(context,NewHouseMainActivity::class.java)
                    .putExtra(EXTRA_INITIAL_ROUTE,routeName)
                    .putExtra(EXTRA_BACKGROUND_MODE, FlutterActivityLaunchConfigs.BackgroundMode.opaque.name)
                    .putExtra(EXTRA_DESTROY_ENGINE_WITH_ACTIVITY, true);
            }
    
        }
    }
    
    2. 启动Activity,组件Intent
    val intent = NewHouseMainActivity.buildIntent(
        requireActivity(),
        FlutterRouteBean().createRoute(requireContext(),FlutterParam.rout_new_house)
    )
    startActivity(intent)
    
    3. 在Flutter端接收
    void main() {
      runApp(MyApp(homeRouteName: window.defaultRouteName));
    }
    
    Map<String, dynamic> data = convert.jsonDecode(homeRouteName!);
    String? routeName = data['routeType'];
    
    switch (routeName) {
        case '/':
        case '/excelSearchPage':
        ...
    }
    

    上面的代码写完,就可以成功的跳转到Flutter页面了

    二. Flutter跳转到Android
    1. 在Flutter和Android端创建通道
    class NativeChannel {
    
      static MethodChannel methodChannel = const MethodChannel("flutter_native");
    
      // 调用Android原生的方法
      static Future<void> nativeMethod(String method) async {
        await methodChannel.invokeMethod(method);
      }
    
    }
    
    
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        methodChannel = MethodChannel(flutterEngine.dartExecutor,FlutterParam.channel_name)
        methodChannel.setMethodCallHandler { call, result ->
            when (call.method) {
                "toHomePage" -> {
                    startActivity(Intent(this,MainActivity::class.java))
                }
            }
        }
    }
    
    2. 在Flutter中调用Android方法
    onTap: () => {
       NativeChannel.nativeMethod("toHomePage")
    },
    

    相关文章

      网友评论

          本文标题:使用MethodChannel,Android和Flutter互

          本文链接:https://www.haomeiwen.com/subject/svizadtx.html