permissive_builder
A Flutter package thats a wrapper around permission_handler which
- exposes a set of builders which you can use to render widgets depending on the permission state.
- exposes functions to
askPermission
andopenSettings
variably depending on the specific permission states - handles state management of the permissions using provider and uses freezed union types to provide a neat permission handling api.
class LocationPermissionWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return PermissionBuilder(
permission: Permission.location, // can be any permission in Permission.
// We haven't ask for permission yet.
initialBuilder: (_, askPermissionFn) => FirstTimePermissionWidget(
requestPermissionFn: askPermissionFn,
),
// Permission requested. Awaiting for user input. Will rebuild after user input
requestingBuilder: (_) => RequestingPermissionWidget(),
// User has granted us permission
grantedBuilder: (_) => PermissionGrantedWidget(),
// The OS restricts access, for example because of parental controls
restrictedBuilder: (_, askPermissionFn) => PermissionRestrictedWidget(
requestPermissionFn: askPermissionFn,
),
//The user opted to never again see the permission request dialog for this app.
permanentlyDeniedBuilder: (_, askPermissionFn, openSettingsFn) => PermanentlyDeniedWidget(
requestPermissionFn: askPermissionFn,
openSettingsFn: openSettingsFn,
),
// User denied the permission once
deniedBuilder: (_, askPermissionFn, openSettingsFn) => PermissionDeniedWidget(
openSettingsFn: openSettingsFn,
requestPermissionFn: askPermissionFn,
),
);
}
}
TODO
- Write tests.