forked from firka/student-legacy
227 lines
8.9 KiB
Dart
227 lines
8.9 KiB
Dart
import 'package:filcnaplo/models/settings.dart';
|
|
import 'package:filcnaplo/theme/colors/colors.dart';
|
|
import 'package:filcnaplo_mobile_ui/common/beta_chip.dart';
|
|
import 'package:filcnaplo_mobile_ui/common/panel/panel.dart';
|
|
import 'package:filcnaplo_mobile_ui/common/panel/panel_button.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'notifications_screen.i18n.dart';
|
|
|
|
class MenuNotifications extends StatelessWidget {
|
|
const MenuNotifications({Key? key, required this.settings}) : super(key: key);
|
|
|
|
final SettingsProvider settings;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return PanelButton(
|
|
padding: const EdgeInsets.only(left: 14.0),
|
|
onPressed: () {
|
|
Navigator.of(context, rootNavigator: true).push(
|
|
CupertinoPageRoute(builder: (context) => const NotificationsScreen()),
|
|
);
|
|
},
|
|
title: Row(
|
|
children: [
|
|
Text(
|
|
"notifications_screen".i18n,
|
|
style: TextStyle(
|
|
color: AppColors.of(context)
|
|
.text
|
|
.withOpacity(settings.notificationsEnabled ? 1.0 : .5)),
|
|
),
|
|
const SizedBox(width: 5.0),
|
|
BetaChip(
|
|
disabled: !settings.notificationsEnabled,
|
|
),
|
|
],
|
|
),
|
|
leading: settings.notificationsEnabled
|
|
? const Icon(FeatherIcons.messageSquare)
|
|
: Icon(FeatherIcons.messageSquare,
|
|
color: AppColors.of(context).text.withOpacity(.25)),
|
|
trailingDivider: true,
|
|
trailing: Switch(
|
|
onChanged: (v) async {
|
|
settings.update(notificationsEnabled: v);
|
|
},
|
|
value: settings.notificationsEnabled,
|
|
activeColor: Theme.of(context).colorScheme.secondary,
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
class NotificationsScreen extends StatelessWidget {
|
|
const NotificationsScreen({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
SettingsProvider settings = Provider.of<SettingsProvider>(context);
|
|
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
surfaceTintColor: Theme.of(context).scaffoldBackgroundColor,
|
|
leading: BackButton(color: AppColors.of(context).text),
|
|
title: Text(
|
|
"notifications_screen".i18n,
|
|
style: TextStyle(color: AppColors.of(context).text),
|
|
),
|
|
),
|
|
body: SingleChildScrollView(
|
|
child: Padding(
|
|
padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 24.0),
|
|
child: Panel(
|
|
child: Column(
|
|
children: [
|
|
Material(
|
|
type: MaterialType.transparency,
|
|
child: SwitchListTile(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(12.0)),
|
|
value: settings.notificationsGradesEnabled,
|
|
onChanged: (v) =>
|
|
settings.update(notificationsGradesEnabled: v),
|
|
title: Row(
|
|
children: [
|
|
Icon(
|
|
FeatherIcons.bookmark,
|
|
color: settings.notificationsGradesEnabled
|
|
? Theme.of(context).colorScheme.secondary
|
|
: AppColors.of(context).text.withOpacity(.25),
|
|
),
|
|
const SizedBox(width: 14.0),
|
|
Expanded(
|
|
child: Text(
|
|
"grades".i18n,
|
|
style: TextStyle(
|
|
fontWeight: FontWeight.w600,
|
|
fontSize: 16.0,
|
|
color: AppColors.of(context).text.withOpacity(
|
|
settings.notificationsGradesEnabled
|
|
? 1.0
|
|
: .5,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
Material(
|
|
type: MaterialType.transparency,
|
|
child: SwitchListTile(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(12.0)),
|
|
value: settings.notificationsAbsencesEnabled,
|
|
onChanged: (v) =>
|
|
settings.update(notificationsAbsencesEnabled: v),
|
|
title: Row(
|
|
children: [
|
|
Icon(
|
|
FeatherIcons.clock,
|
|
color: settings.notificationsAbsencesEnabled
|
|
? Theme.of(context).colorScheme.secondary
|
|
: AppColors.of(context).text.withOpacity(.25),
|
|
),
|
|
const SizedBox(width: 14.0),
|
|
Expanded(
|
|
child: Text(
|
|
"absences".i18n,
|
|
style: TextStyle(
|
|
fontWeight: FontWeight.w600,
|
|
fontSize: 16.0,
|
|
color: AppColors.of(context).text.withOpacity(
|
|
settings.notificationsAbsencesEnabled
|
|
? 1.0
|
|
: .5,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
Material(
|
|
type: MaterialType.transparency,
|
|
child: SwitchListTile(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(12.0)),
|
|
value: settings.notificationsMessagesEnabled,
|
|
onChanged: (v) =>
|
|
settings.update(notificationsMessagesEnabled: v),
|
|
title: Row(
|
|
children: [
|
|
Icon(
|
|
FeatherIcons.messageSquare,
|
|
color: settings.notificationsMessagesEnabled
|
|
? Theme.of(context).colorScheme.secondary
|
|
: AppColors.of(context).text.withOpacity(.25),
|
|
),
|
|
const SizedBox(width: 14.0),
|
|
Expanded(
|
|
child: Text(
|
|
"messages".i18n,
|
|
style: TextStyle(
|
|
fontWeight: FontWeight.w600,
|
|
fontSize: 16.0,
|
|
color: AppColors.of(context).text.withOpacity(
|
|
settings.notificationsMessagesEnabled
|
|
? 1.0
|
|
: .5,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
Material(
|
|
type: MaterialType.transparency,
|
|
child: SwitchListTile(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(12.0)),
|
|
value: settings.notificationsLessonsEnabled,
|
|
onChanged: (v) =>
|
|
settings.update(notificationsLessonsEnabled: v),
|
|
title: Row(
|
|
children: [
|
|
Icon(
|
|
FeatherIcons.calendar,
|
|
color: settings.notificationsLessonsEnabled
|
|
? Theme.of(context).colorScheme.secondary
|
|
: AppColors.of(context).text.withOpacity(.25),
|
|
),
|
|
const SizedBox(width: 14.0),
|
|
Expanded(
|
|
child: Text(
|
|
"lessons".i18n,
|
|
style: TextStyle(
|
|
fontWeight: FontWeight.w600,
|
|
fontSize: 16.0,
|
|
color: AppColors.of(context).text.withOpacity(
|
|
settings.notificationsLessonsEnabled
|
|
? 1.0
|
|
: .5,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|