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

如何让Android设备默认启用Flutter通知的弹窗显示功能?

解决Android通知默认不弹窗的问题

问题核心是Android 12及以上系统要求必须通过通知渠道控制通知展示行为,默认创建的渠道优先级不足,导致弹窗选项被禁用。按以下步骤修改配置:

1. 创建高优先级通知渠道

使用flutter_local_notifications创建高重要性的通知渠道,这是让通知默认弹窗的关键:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  ServiceContainer.initialize(Injector());

  SystemChrome.setPreferredOrientations(
      [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);

  await PreferenceHelper.create();

  // 初始化flutter_local_notifications并创建通知渠道
  final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
      FlutterLocalNotificationsPlugin();
  
  const AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('@mipmap/ic_launcher'); // 替换为你的通知图标
  const InitializationSettings initializationSettings =
      InitializationSettings(android: initializationSettingsAndroid);
  await flutterLocalNotificationsPlugin.initialize(initializationSettings);

  // 创建高优先级通知渠道
  const AndroidNotificationChannel channel = AndroidNotificationChannel(
    'high_importance_channel', // 渠道ID
    '高优先级通知', // 渠道名称
    description: '用于显示需要弹窗的通知', // 渠道描述
    importance: Importance.high, // 必须设为high才能默认弹窗
    enableLights: true,
    enableVibration: true,
    showBadge: true,
  );
  await flutterLocalNotificationsPlugin
      .resolvePlatformSpecificImplementation<
          AndroidFlutterLocalNotificationsPlugin>()
      ?.createNotificationChannel(channel);

  // Firebase Messaging配置
  FirebaseMessaging messaging = FirebaseMessaging.instance;
  // 只调用一次权限请求,避免重复操作
  await messaging.requestPermission(
    alert: true,
    badge: true,
    sound: true,
    provisional: false,
  );

  await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
    alert: true,
    badge: true,
    sound: true,
  );

  // 提前请求权限,放在runApp之前
  await [Permission.storage, Permission.notification].request();

  SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(statusBarColor: Colors.transparent));

  runApp(const App());
}

2. 关键注意点

  • 渠道重要性必须设为Importance.high:这会让系统默认开启通知弹窗选项,同时通知会在前台弹窗显示。
  • 调整权限请求时机:把权限请求移到runApp之前,确保App启动时就获取到通知权限,避免后续权限不足的问题。
  • 移除重复请求:你原代码里两次调用FirebaseMessaging.instance.requestPermission(),保留一次即可。
  • 确认通知图标:确保@mipmap/ic_launcher是你项目中存在的图标,否则通知可能显示默认图标或空白。

3. 验证效果

修改后重新安装App,发送通知时会默认弹窗;进入系统设置的App通知页面,对应渠道的“弹窗”选项会默认处于启用状态。

内容的提问来源于stack exchange,提问作者Lala Naibova

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:25:16