permission_settings_dialog.dart 1.46 KB
import 'package:app_settings/app_settings.dart';
import 'package:flutter/material.dart';

import 'permission_dialog_shell.dart';

/// 权限被永久拒绝后的「去设置」引导弹窗
///
/// 与首次使用的用途说明弹窗共用样式骨架,
/// 差异在于文案面向「已拒绝」场景,主按钮直接跳转系统应用设置页。
class PermissionSettingsDialog extends StatelessWidget {
  const PermissionSettingsDialog({
    super.key,
    required this.title,
    required this.description,
  });

  /// 外部传入的完整标题,原样展示
  final String title;

  /// 外部传入的完整说明,原样展示
  final String description;

  @override
  Widget build(BuildContext context) {
    return PermissionDialogShell(
      title: title,
      description: description,
      primaryText: '去设置',
      onPrimary: () {
        Navigator.of(context).pop();
        // 引导用户到系统应用设置页面手动开启权限
        AppSettings.openAppSettings(asAnotherTask: true);
      },
      secondaryText: '取消',
      onSecondary: () => Navigator.of(context).pop(),
    );
  }
}

/// 展示权限被永久拒绝后的「去设置」引导弹窗
Future<void> showPermissionSettingsDialog(
  BuildContext context, {
  required String title,
  required String description,
}) {
  return showDialog<void>(
    context: context,
    builder: (BuildContext context) => PermissionSettingsDialog(title: title, description: description),
  );
}