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

Flutter实现Android/iOS通知权限请求弹窗技术求助

Flutter 启动时请求通知权限实现方案

1. 添加依赖

在pubspec.yaml中引入通知权限处理的依赖包:

dependencies:
  flutter_local_notifications: ^16.1.0 # 可替换为最新版本

执行flutter pub get完成依赖安装。

2. iOS 平台配置

在ios/Runner/Info.plist中添加通知权限用途描述,否则iOS会直接拦截权限请求:

<key>NSNotificationUsageDescription</key>
<string>需要通知权限向您推送重要消息、更新提醒等内容</string>

3. Android 平台配置

在android/app/src/main/AndroidManifest.xml中添加Android 13+所需的通知权限:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

低于Android 13的版本默认开启通知权限,无需额外配置。

4. Flutter 代码实现

在应用启动时初始化通知插件并触发权限请求,示例代码如下:

import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';

final FlutterLocalNotificationsPlugin _notificationsPlugin = FlutterLocalNotificationsPlugin();

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化通知插件
  await _initNotifications();
  // 请求通知权限
  await _requestNotificationPermissions();
  runApp(const MyApp());
}

// 初始化通知插件配置
Future<void> _initNotifications() async {
  const AndroidInitializationSettings androidSettings = AndroidInitializationSettings('@mipmap/ic_launcher');
  const DarwinInitializationSettings iosSettings = DarwinInitializationSettings(
    requestAlertPermission: false,
    requestBadgePermission: false,
    requestSoundPermission: false,
  );
  const InitializationSettings settings = InitializationSettings(
    android: androidSettings,
    iOS: iosSettings,
  );
  await _notificationsPlugin.initialize(settings);
}

// 请求通知权限
Future<void> _requestNotificationPermissions() async {
  // Android 权限请求
  final AndroidFlutterLocalNotificationsPlugin? androidPlugin =
      _notificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>();
  await androidPlugin?.requestNotificationsPermission();

  // iOS 权限请求
  final DarwinFlutterLocalNotificationsPlugin? iosPlugin =
      _notificationsPlugin.resolvePlatformSpecificImplementation<DarwinFlutterLocalNotificationsPlugin>();
  await iosPlugin?.requestPermissions(alert: true, badge: true, sound: true);
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '通知权限示例',
      home: Scaffold(
        appBar: AppBar(title: const Text('通知权限请求演示')),
        body: const Center(child: Text('应用已启动')),
      ),
    );
  }
}

注意事项

  • Android端确保@mipmap/ic_launcher图标存在,也可替换为自定义通知图标。
  • iOS端的权限描述需明确告知用户权限用途,提升授权率。
  • 若需在首页初始化时请求权限,可在initState中通过WidgetsBinding.instance.addPostFrameCallback执行:
@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) async {
    await _requestNotificationPermissions();
  });
}

内容的提问来源于stack exchange,提问作者Prashanth Kumar D S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:27:15