z_permission_handler 0.0.12 copy "z_permission_handler: ^0.0.12" to clipboard
z_permission_handler: ^0.0.12 copied to clipboard

一个用于轻松管理和请求应用权限的 Flutter 插件(纯 Dart 实现)。

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:toastification/toastification.dart';
import 'package:z_permission_handler/z_permission_handler.dart';

void main() {
  ZPermissionHandler().init(
    onShow: (context, item) async {
      debugPrint("[ZPermission] 显示权限提示: ${item.permission}");
      _ToastUtil.showPermissionToast(
        context,
        title: item.title,
        desc: item.desc,
      );
    },
    onClose: (context, item) async {
      _ToastUtil.dismiss();
      debugPrint("[ZPermission] 关闭权限提示: ${item.permission}");
    },
    onDenied: (context, item) async {
      debugPrint("[ZPermission] 权限被拒绝: ${item.permission}");
    },
    onPermanentlyDenied: (context, item) async {
      debugPrint("[ZPermission] 权限永久拒绝: ${item.permission}");
    },
  );

  runApp(const MyApp());
}

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  void _requestPermission() {
    ZPermissionHandler().checkAndRequestPermission(
      context,
      item: ZPermissionHandlerItem(title: "相机权限", desc: "需要相机权限来拍照", permission: Permission.camera),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(child: const Text('请求相机权限')),
      floatingActionButton: FloatingActionButton(
        onPressed: _requestPermission,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

class _ToastUtil {
  // 当前显示的 Toast
  static ToastificationItem? _currentToast;

  /// 显示权限提示 Toast
  static ToastificationItem showPermissionToast(
    BuildContext context, {
    required String title,
    required String desc,
  }) {
    final theme = Theme.of(context);

    // 如果已有 Toast,先关闭
    if (_currentToast != null) {
      toastification.dismiss(_currentToast!);
      _currentToast = null;
    }

    _currentToast = toastification.show(
      context: context,
      icon: Icon(Icons.notifications_rounded),
      style: ToastificationStyle.flat,
      title: Text(title),
      description: Text(desc),
      dragToClose: false,
      closeOnClick: false,
      autoCloseDuration: null,
      animationDuration: Duration(milliseconds: 300),
      alignment: Alignment.topLeft,
      backgroundColor: theme.colorScheme.surface,
      foregroundColor: theme.colorScheme.onSurface,
      primaryColor: theme.colorScheme.primary,
      animationBuilder: (context, animation, alignment, child) {
        return FadeTransition(opacity: animation, child: child);
      },
      closeButton: const ToastCloseButton(showType: CloseButtonShowType.none),
    );

    return _currentToast!;
  }

  /// 通用关闭方法
  static void dismiss() {
    if (_currentToast != null) {
      toastification.dismiss(_currentToast!);
      _currentToast = null;
    }
  }
}
0
likes
140
points
16
downloads

Publisher

unverified uploader

Weekly Downloads

一个用于轻松管理和请求应用权限的 Flutter 插件(纯 Dart 实现)。

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, permission_handler

More

Packages that depend on z_permission_handler