You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin的Activity中打开Flutter页面 实现点击通知跳转Flutter主页

实现思路

1. Kotlin原生端配置

  • 给通知绑定指向Flutter宿主Activity的PendingIntent
    你项目里继承FlutterActivity的主Activity(默认命名为MainActivity)就是Flutter应用的入口,点击通知要唤起的就是这个Activity。创建通知时给setContentIntent传入对应PendingIntent,同时配置Activity启动flag避免重复创建实例:
    // 构建跳转目标Intent
    val intent = Intent(context, MainActivity::class.java).apply {
        // 优先级:如果应用已在后台运行就拉到前台,不新建实例
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP
        // 有跳转指定Flutter页面的需求时,可以在这里putExtra携带路由参数
    }
    // 构建PendingIntent
    val pendingIntent: PendingIntent = PendingIntent.getActivity(
        context,
        0,
        intent,
        // *注意Android 12及以上必须指定可变性标记,这里用UPDATE_CURRENT保证参数能更新
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )
    // 给通知设置点击Intent
    val notification = NotificationCompat.Builder(context, channelId)
        .setContentIntent(pendingIntent)
        .setAutoCancel(true) // 点击后自动消失,按需开启
        // 其他通知配置...
        .build()
    
  • 接收唤起参数并同步给Flutter
    重写MainActivity的onCreate(应用冷启动场景)和onNewIntent(应用在后台被唤起场景)方法,拿到Intent携带的参数,通过你已经实现的MethodChannel发送给Flutter侧。如果是冷启动场景担心Channel还未初始化,可以先把参数暂存到本地缓存,等Flutter端初始化完成后主动调用Channel拉取。

2. Flutter端适配

  • 监听原生端的唤起事件
    在应用根Widget的initState生命周期里注册MethodChannel的调用回调,收到原生端发来的通知唤起事件后,直接导航到主页面即可:如果当前应用已经在后台运行,直接重置路由栈到主页面;如果是冷启动,正常初始化主页面即可。
  • 路由逻辑优化
    收到唤起事件后先判断当前路由栈的栈顶是否已经是主页面,如果是就不用重复跳转,避免页面栈冗余。如果原生端携带了指定路由参数,就跳转到对应Flutter页面。

可选优化

  • 可以给Intent添加自定义Action,用来区分是普通桌面点击启动还是通知点击启动,两端根据不同启动类型做不同逻辑处理。

内容的提问来源于stack exchange,提问作者sebastian Ortiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 18:42:03