import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
import 'package:comwell_key_app/themes/app_spaces.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
import 'package:concierge/presentation/theme/app_colors.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:comwell_key_app/presentation/screens/permission_overview/bloc/permission_overview_cubit.dart';
import 'package:comwell_key_app/presentation/screens/permission_overview/bloc/permission_overview_state.dart';
class PermissionOverviewScreen extends StatefulWidget {
const PermissionOverviewScreen({super.key});
@override
State<PermissionOverviewScreen> createState() => _PermissionOverviewScreenState();
}
class _PermissionOverviewScreenState extends State<PermissionOverviewScreen> {
late final AppLifecycleListener _lifecycleListener;
@override
void initState() {
super.initState();
_lifecycleListener = AppLifecycleListener(
onResume: () {
context.read<PermissionOverviewCubit>().init();
},
);
}
@override
void dispose() {
_lifecycleListener.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BlocBuilder<PermissionOverviewCubit, PermissionOverviewState>(
builder: (context, state) {
final cubit = context.read<PermissionOverviewCubit>();
final List<(String, String, bool, VoidCallback)> permissions = [
(
context.strings.bluetooth_permission_title,
context.strings.bluetooth_permission_description,
state.allowBluetooth,
cubit.onToggleBluetoothPermission,
),
(
context.strings.accept_notifications,
context.strings.accept_notifications_rationale,
state.allowPushNotifications,
cubit.onTogglePushNotifications,
),
(
context.strings.allow_usage_tracking,
context.strings.usage_tracking_rationale,
state.allowUsageTracking,
cubit.onToggleUsageTracking,
),
];
final theme = Theme.of(context);
return MultiBlocListener(
listeners: [
BlocListener<PermissionOverviewCubit, PermissionOverviewState>(
listenWhen: (prev, curr) => prev.isLoading && !curr.isLoading && curr.error.isError,
listener: (context, state) {
// context.showErrorSnackBar(state.errorMessage);
},
),
],
child: Scaffold(
appBar: const ComwellAppBar(shouldShowProfileButton: false),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: CustomScrollView(
slivers: [
SliverToBoxAdapter(
child: Text(
context.strings.permissions,
style: const TextStyle(
fontSize: 28,
fontWeight: FontWeight.w600,
),
),
),
const SliverToBoxAdapter(child: AppSpaces.gap16),
SliverList.builder(
itemCount: permissions.length,
itemBuilder: (context, index) {
final (title, rationale, allowed, onToggle) = permissions[index];
return SwitchListTile(
thumbColor: WidgetStateProperty.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return AppColors.sandColor;
}
return Colors.white;
}),
trackColor: WidgetStateProperty.resolveWith((states) {
if (!states.contains(WidgetState.selected)) {
return Colors.grey[200];
}
return null;
}),
trackOutlineColor: WidgetStatePropertyAll(
Theme.of(context).colorScheme.surface,
),
title: Text(
title,
style: theme.textTheme.titleMedium?.copyWith(
color: Theme.of(context).colorScheme.onSurface,
fontWeight: FontWeight.w600,
),
),
subtitle: Text(
rationale,
style: theme.textTheme.bodySmall?.copyWith(
color: Theme.of(context).colorScheme.surfaceTint,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
value: allowed,
onChanged: (bool value) {
onToggle();
},
contentPadding: EdgeInsets.zero,
);
},
),
],
),
),
),
);
},
);
}
}