diff --git a/filcnaplo/lib/api/client.dart b/filcnaplo/lib/api/client.dart index b01a64c..5d628c2 100644 --- a/filcnaplo/lib/api/client.dart +++ b/filcnaplo/lib/api/client.dart @@ -270,6 +270,21 @@ class FilcAPI { return null; } + static Future getAllSharedThemes(int count) async { + try { + http.Response res = await http.get(Uri.parse(allThemes)); + + if (res.statusCode == 200) { + return (jsonDecode(res.body) as List); + } else { + throw "HTTP ${res.statusCode}: ${res.body}"; + } + } on Exception catch (error, stacktrace) { + log("ERROR: FilcAPI.getAllSharedThemes: $error $stacktrace"); + } + return null; + } + static Future addSharedGradeColors( SharedGradeColors gradeColors) async { try { diff --git a/filcnaplo/lib/models/shared_theme.dart b/filcnaplo/lib/models/shared_theme.dart index 6ab6e24..e9cb574 100644 --- a/filcnaplo/lib/models/shared_theme.dart +++ b/filcnaplo/lib/models/shared_theme.dart @@ -11,6 +11,7 @@ class SharedTheme { Color iconColor; bool shadowEffect; SharedGradeColors gradeColors; + String displayName; SharedTheme({ required this.json, @@ -23,6 +24,7 @@ class SharedTheme { required this.iconColor, required this.shadowEffect, required this.gradeColors, + this.displayName = 'displayName', }); factory SharedTheme.fromJson(Map json, SharedGradeColors gradeColors) { diff --git a/filcnaplo_kreta_api/lib/providers/share_provider.dart b/filcnaplo_kreta_api/lib/providers/share_provider.dart index eaf9e2b..ba55417 100644 --- a/filcnaplo_kreta_api/lib/providers/share_provider.dart +++ b/filcnaplo_kreta_api/lib/providers/share_provider.dart @@ -71,6 +71,32 @@ class ShareProvider extends ChangeNotifier { return null; } + Future> getAllPublicThemes(BuildContext context, + {int count = 0}) async { + List? themesJson = await FilcAPI.getAllSharedThemes(count); + + List themes = []; + + if (themesJson != null) { + for (var t in themesJson) { + if (t['public_id'].toString().replaceAll(' ', '') == '') continue; + if (t['grade_colors_id'].toString().replaceAll(' ', '') == '') continue; + + Map? gradeColorsJson = + await FilcAPI.getSharedGradeColors(t['grade_colors_id']); + + if (gradeColorsJson != null) { + SharedTheme theme = SharedTheme.fromJson( + t, SharedGradeColors.fromJson(gradeColorsJson)); + + themes.add(theme); + } + } + } + + return themes; + } + // grade colors Future shareCurrentGradeColors( BuildContext context, { diff --git a/filcnaplo_mobile_ui/lib/common/panel/panel_button.dart b/filcnaplo_mobile_ui/lib/common/panel/panel_button.dart index 09182e6..79e021e 100755 --- a/filcnaplo_mobile_ui/lib/common/panel/panel_button.dart +++ b/filcnaplo_mobile_ui/lib/common/panel/panel_button.dart @@ -14,6 +14,7 @@ class PanelButton extends StatelessWidget { this.background = false, this.trailingDivider = false, this.borderRadius, + this.longPressInstead = false, }); final void Function()? onPressed; @@ -24,11 +25,13 @@ class PanelButton extends StatelessWidget { final bool background; final bool trailingDivider; final BorderRadius? borderRadius; + final bool longPressInstead; @override Widget build(BuildContext context) { final button = RawMaterialButton( - onPressed: onPressed, + onPressed: !longPressInstead ? onPressed : null, + onLongPress: longPressInstead ? onPressed : null, padding: padding, shape: RoundedRectangleBorder( borderRadius: borderRadius ?? BorderRadius.circular(12.0)), diff --git a/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.dart b/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.dart index 9467cad..575b5f5 100755 --- a/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.dart +++ b/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.dart @@ -39,6 +39,7 @@ import 'package:filcnaplo_mobile_ui/screens/settings/privacy_view.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/settings_helper.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/submenu/extras_screen.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/submenu/personalize_screen.dart'; +import 'package:flutter/foundation.dart'; // import 'package:refilc_plus/models/premium_scopes.dart'; import 'package:refilc_plus/providers/premium_provider.dart'; // import 'package:refilc_plus/ui/mobile/premium/upsell.dart'; @@ -50,6 +51,7 @@ import 'package:flutter_custom_tabs/flutter_custom_tabs.dart' as tabs; import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'debug/subject_icon_gallery.dart'; import 'settings_screen.i18n.dart'; import 'package:flutter/services.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/user/nickname.dart'; @@ -732,18 +734,6 @@ class SettingsScreenState extends State ), ], ), - - // SplittedMenuOption( - // padding: const EdgeInsets.all(8.0), - // text: 'edit'.i18n, - // trailing: const Icon( - // FeatherIcons.edit2, - // size: 22.0, - // ), - // onTap: () { - // print('object'); - // }, - // ), ), // // general things // Padding( @@ -760,31 +750,31 @@ class SettingsScreenState extends State // ), // // icon gallery (debug mode) - // if (kDebugMode) - // Padding( - // padding: const EdgeInsets.symmetric( - // vertical: 12.0, horizontal: 24.0), - // child: Panel( - // title: const Text("Debug"), - // child: Column( - // children: [ - // PanelButton( - // title: const Text("Subject Icon Gallery"), - // leading: - // const Icon(CupertinoIcons.rectangle_3_offgrid_fill), - // trailing: const Icon(Icons.arrow_forward), - // onPressed: () { - // Navigator.of(context, rootNavigator: true).push( - // CupertinoPageRoute( - // builder: (context) => - // const SubjectIconGallery()), - // ); - // }, - // ) - // ], - // ), - // ), - // ), + if (kDebugMode) + Padding( + padding: const EdgeInsets.symmetric( + vertical: 12.0, horizontal: 24.0), + child: Panel( + title: const Text("Debug"), + child: Column( + children: [ + PanelButton( + title: const Text("Subject Icon Gallery"), + leading: + const Icon(CupertinoIcons.rectangle_3_offgrid_fill), + trailing: const Icon(Icons.arrow_forward), + onPressed: () { + Navigator.of(context, rootNavigator: true).push( + CupertinoPageRoute( + builder: (context) => + const SubjectIconGallery()), + ); + }, + ) + ], + ), + ), + ), // // appearance things // Padding( @@ -822,40 +812,6 @@ class SettingsScreenState extends State // ), // ), // ), - - // Material( - // type: MaterialType.transparency, - // child: SwitchListTile( - // contentPadding: const EdgeInsets.only(left: 14.0), - // shape: RoundedRectangleBorder( - // borderRadius: BorderRadius.circular(12.0)), - // title: Row( - // children: [ - // Icon( - // FeatherIcons.moon, - // color: settings.shadowEffect - // ? Theme.of(context).colorScheme.secondary - // : AppColors.of(context).text.withOpacity(.25), - // ), - // const SizedBox(width: 14.0), - // Expanded( - // child: Text( - // "shadow_effect".i18n, - // style: TextStyle( - // fontWeight: FontWeight.w600, - // fontSize: 16.0, - // color: AppColors.of(context).text.withOpacity( - // settings.shadowEffect ? 1.0 : .5), - // ), - // ), - // ), - // ], - // ), - // onChanged: (v) => settings.update(shadowEffect: v), - // value: settings.shadowEffect, - // activeColor: Theme.of(context).colorScheme.secondary, - // ), - // ), // ], // ), // ), @@ -945,12 +901,6 @@ class SettingsScreenState extends State // activeColor: Theme.of(context).colorScheme.secondary, // ), // ), - // MenuRenamedSubjects( - // settings: settings, - // ), - // MenuRenamedTeachers( - // settings: settings, - // ), // PremiumCustomAppIconMenu( // settings: settings, // ), @@ -1130,107 +1080,6 @@ class SettingsScreenState extends State ], ), - // Padding( - // padding: - // const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0), - // child: Panel( - // title: Text("about".i18n), - // child: Column(children: [ - // PanelButton( - // leading: const Icon(FeatherIcons.mail), - // title: Text("news".i18n), - // onPressed: () => _openNews(context), - // ), - // PanelButton( - // leading: const Icon(FeatherIcons.lock), - // title: Text("privacy".i18n), - // // onPressed: () => launchUrl( - // // Uri.parse("https://refilc.hu/privacy-policy"), - // // mode: LaunchMode.inAppWebView), - // onPressed: () => _openPrivacy(context), - // ), - // PanelButton( - // leading: const Icon(FeatherIcons.atSign), - // title: const Text("Discord"), - // onPressed: () => launchUrl( - // Uri.parse("https://dc.refilc.hu"), - // mode: LaunchMode.externalApplication), - // ), - // PanelButton( - // leading: const Icon(FeatherIcons.globe), - // title: const Text("www.refilc.hu"), - // onPressed: () => launchUrl( - // Uri.parse("https://www.refilc.hu"), - // mode: LaunchMode.externalApplication), - // ), - // PanelButton( - // leading: const Icon(FeatherIcons.github), - // title: const Text("Github"), - // onPressed: () => launchUrl( - // Uri.parse("https://github.com/refilc"), - // mode: LaunchMode.externalApplication), - // ), - // PanelButton( - // leading: const Icon(FeatherIcons.award), - // title: Text("licenses".i18n), - // onPressed: () => showLicensePage(context: context), - // ), - // Tooltip( - // message: "data_collected".i18n, - // padding: const EdgeInsets.all(4.0), - // textStyle: TextStyle( - // fontWeight: FontWeight.w500, - // color: AppColors.of(context).text), - // decoration: BoxDecoration( - // color: Theme.of(context).colorScheme.background), - // child: Material( - // type: MaterialType.transparency, - // child: SwitchListTile( - // contentPadding: const EdgeInsets.only(left: 12.0), - // shape: RoundedRectangleBorder( - // borderRadius: BorderRadius.circular(12.0)), - // secondary: Icon( - // FeatherIcons.barChart2, - // color: settings.xFilcId != "none" - // ? Theme.of(context).colorScheme.secondary - // : AppColors.of(context).text.withOpacity(.25), - // ), - // title: Text( - // "Analytics".i18n, - // style: TextStyle( - // fontWeight: FontWeight.w600, - // fontSize: 16.0, - // color: AppColors.of(context).text.withOpacity( - // settings.xFilcId != "none" ? 1.0 : .5), - // ), - // ), - // subtitle: Text( - // "Anonymous Usage Analytics".i18n, - // style: TextStyle( - // color: AppColors.of(context).text.withOpacity( - // settings.xFilcId != "none" ? .5 : .2), - // ), - // ), - // onChanged: (v) { - // String newId; - // if (v == false) { - // newId = "none"; - // } else if (settings.xFilcId == "none") { - // newId = SettingsProvider.defaultSettings().xFilcId; - // } else { - // newId = settings.xFilcId; - // } - // settings.update(xFilcId: newId); - // }, - // value: settings.xFilcId != "none", - // activeColor: Theme.of(context).colorScheme.secondary, - // ), - // ), - // ), - // ]), - // ), - // ), - // developer options if (settings.developerMode) SplittedPanel( diff --git a/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.i18n.dart b/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.i18n.dart index ad2a240..9070a43 100755 --- a/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.i18n.dart +++ b/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.i18n.dart @@ -84,6 +84,10 @@ extension SettingsLocalization on String { "switch_account": "Switch Account", "subjects": "Subjects", "select_subject": "Select Subject", + "own_paints": "Own Paints", + "dl_paint": "Redeemed", + "public_paint": "Public Paints", + "no_pub_paint": "No Public Paints", }, "hu_hu": { "personal_details": "Személyes információk", @@ -166,6 +170,10 @@ extension SettingsLocalization on String { "switch_account": "Fiókváltás", "subjects": "Tantárgyak", "select_subject": "Válassz tantárgyat", + "own_paints": "Saját témák", + "dl_paint": "Beszerzett", + "public_paint": "Nyilvános témák", + "no_pub_paint": "Nincsenek nyilvános festékek", }, "de_de": { "personal_details": "Persönliche Angaben", @@ -248,6 +256,10 @@ extension SettingsLocalization on String { "switch_account": "Benutzer wechseln", "subjects": "Themen", "select_subject": "Fach auswählen", + "own_paints": "Meine Themen", + "dl_paint": "Eingelöst", + "public_paint": "Öffentliche Themen", + "no_pub_paint": "Keine öffentlichen Anstriche", }, }; diff --git a/filcnaplo_mobile_ui/lib/screens/settings/submenu/paint_list.dart b/filcnaplo_mobile_ui/lib/screens/settings/submenu/paint_list.dart new file mode 100644 index 0000000..25c9cab --- /dev/null +++ b/filcnaplo_mobile_ui/lib/screens/settings/submenu/paint_list.dart @@ -0,0 +1,342 @@ +// ignore_for_file: use_build_context_synchronously + +import 'package:filcnaplo/api/providers/user_provider.dart'; +import 'package:filcnaplo/models/settings.dart'; +import 'package:filcnaplo/models/shared_theme.dart'; +import 'package:filcnaplo/theme/colors/accent.dart'; +import 'package:filcnaplo/theme/colors/colors.dart'; +import 'package:filcnaplo_kreta_api/providers/share_provider.dart'; +import 'package:filcnaplo_mobile_ui/common/empty.dart'; +import 'package:filcnaplo_mobile_ui/common/panel/panel_button.dart'; +import 'package:filcnaplo_mobile_ui/common/splitted_panel/splitted_panel.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 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.i18n.dart'; +import 'package:share_plus/share_plus.dart'; + +class MenuPaintList extends StatelessWidget { + const MenuPaintList({ + super.key, + this.borderRadius = const BorderRadius.vertical( + top: Radius.circular(4.0), bottom: Radius.circular(4.0)), + }); + + final BorderRadius borderRadius; + + @override + Widget build(BuildContext context) { + return PanelButton( + onPressed: () async { + List publicThemes = + await Provider.of(context, listen: false) + .getAllPublicThemes(context); + + Navigator.of(context, rootNavigator: true).push(CupertinoPageRoute( + builder: (context) => PaintListScreen(publicThemes: publicThemes))); + }, + title: Text( + "own_paints".i18n, + style: TextStyle( + color: AppColors.of(context).text.withOpacity(.95), + ), + ), + leading: Icon( + FeatherIcons.list, + size: 22.0, + color: AppColors.of(context).text.withOpacity(.95), + ), + trailing: Icon( + FeatherIcons.chevronRight, + size: 22.0, + color: AppColors.of(context).text.withOpacity(0.95), + ), + borderRadius: borderRadius, + ); + } +} + +class PaintListScreen extends StatefulWidget { + const PaintListScreen({super.key, required this.publicThemes}); + + final List publicThemes; + + @override + PaintListScreenState createState() => PaintListScreenState(); +} + +class PaintListScreenState extends State + with SingleTickerProviderStateMixin { + late SettingsProvider settingsProvider; + late UserProvider user; + late ShareProvider shareProvider; + + late AnimationController _hideContainersController; + + late List tiles; + + @override + void initState() { + super.initState(); + + shareProvider = Provider.of(context, listen: false); + + _hideContainersController = AnimationController( + vsync: this, duration: const Duration(milliseconds: 200)); + } + + void buildPublicPaintTiles() async { + List subjectTiles = []; + + var added = []; + var i = 0; + + for (var t in widget.publicThemes) { + if (added.contains(t.id)) continue; + + Widget w = PanelButton( + onPressed: () => { + // TODO: set theme + }, + title: Column( + children: [ + Text( + t.displayName, + style: TextStyle( + color: AppColors.of(context).text.withOpacity(.95), + ), + ), + Text( + t.nickname, + style: TextStyle( + color: AppColors.of(context).text.withOpacity(.75), + ), + ), + ], + ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: const EdgeInsets.only(left: 2.0), + width: 12.0, + height: 12.0, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: t.backgroundColor, + ), + ), + Container( + margin: const EdgeInsets.only(left: 2.0), + width: 12.0, + height: 12.0, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: t.panelsColor, + ), + ), + Container( + margin: const EdgeInsets.only(left: 2.0), + width: 12.0, + height: 12.0, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: t.accentColor, + ), + ), + ], + ), + borderRadius: BorderRadius.vertical( + top: Radius.circular(i == 0 ? 12.0 : 4.0), + bottom: + Radius.circular(i + 1 == widget.publicThemes.length ? 12.0 : 4.0), + ), + ); + + i += 1; + subjectTiles.add(w); + added.add(t.id); + } + + if (widget.publicThemes.isEmpty) { + subjectTiles.add(Empty( + subtitle: 'no_pub_paint'.i18n, + )); + } + + tiles = subjectTiles; + } + + @override + Widget build(BuildContext context) { + settingsProvider = Provider.of(context); + user = Provider.of(context); + + buildPublicPaintTiles(); + + return AnimatedBuilder( + animation: _hideContainersController, + builder: (context, child) => Opacity( + opacity: 1 - _hideContainersController.value, + child: Scaffold( + appBar: AppBar( + surfaceTintColor: Theme.of(context).scaffoldBackgroundColor, + leading: BackButton(color: AppColors.of(context).text), + title: Text( + "own_paints".i18n, + style: TextStyle(color: AppColors.of(context).text), + ), + ), + body: SingleChildScrollView( + child: Padding( + padding: + const EdgeInsets.symmetric(vertical: 16.0, horizontal: 24.0), + child: Column( + children: [ + // current paint + SplittedPanel( + title: Text('current_paint'.i18n), + padding: EdgeInsets.zero, + cardPadding: const EdgeInsets.all(4.0), + children: [ + PanelButton( + onPressed: () async { + SharedGradeColors gradeColors = await shareProvider + .shareCurrentGradeColors(context); + SharedTheme theme = + await shareProvider.shareCurrentTheme( + context, + gradeColors: gradeColors, + ); + + Share.share( + theme.id, + subject: 'share_subj_theme'.i18n, + ); + }, + longPressInstead: true, + title: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 't.displayName', + style: TextStyle( + color: + AppColors.of(context).text.withOpacity(.95), + ), + ), + Text( + user.nickname ?? 'Anonymous', + style: TextStyle( + color: + AppColors.of(context).text.withOpacity(.65), + fontSize: 15.0, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + trailing: Transform.translate( + offset: const Offset(8.0, 0.0), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: const EdgeInsets.only(left: 2.0), + width: 14.0, + height: 14.0, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: + (settingsProvider.customBackgroundColor ?? + SettingsProvider.defaultSettings() + .customBackgroundColor), + boxShadow: [ + BoxShadow( + color: AppColors.of(context) + .text + .withOpacity(0.15), + offset: const Offset(1, 2), + blurRadius: 3, + ), + ], + ), + ), + Transform.translate( + offset: const Offset(-4.0, 0.0), + child: Container( + margin: const EdgeInsets.only(left: 2.0), + width: 14.0, + height: 14.0, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: (settingsProvider + .customHighlightColor ?? + SettingsProvider.defaultSettings() + .customHighlightColor), + boxShadow: [ + BoxShadow( + color: AppColors.of(context) + .text + .withOpacity(0.15), + offset: const Offset(1, 2), + blurRadius: 3, + ), + ], + ), + ), + ), + Transform.translate( + offset: const Offset(-8.0, 0.0), + child: Container( + margin: const EdgeInsets.only(left: 2.0), + width: 14.0, + height: 14.0, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: settingsProvider.customAccentColor ?? + accentColorMap[ + settingsProvider.accentColor], + boxShadow: [ + BoxShadow( + color: AppColors.of(context) + .text + .withOpacity(0.15), + offset: const Offset(1, 2), + blurRadius: 3, + ), + ], + ), + ), + ), + ], + ), + ), + borderRadius: const BorderRadius.vertical( + top: Radius.circular(12), + bottom: Radius.circular(12), + ), + ), + ], + ), + + const SizedBox( + height: 18.0, + ), + // own paints + SplittedPanel( + title: Text('public_paint'.i18n), + padding: EdgeInsets.zero, + cardPadding: const EdgeInsets.all(4.0), + children: tiles, + ), + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/filcnaplo_mobile_ui/lib/screens/settings/submenu/personalize_screen.dart b/filcnaplo_mobile_ui/lib/screens/settings/submenu/personalize_screen.dart index 364e333..8e93248 100644 --- a/filcnaplo_mobile_ui/lib/screens/settings/submenu/personalize_screen.dart +++ b/filcnaplo_mobile_ui/lib/screens/settings/submenu/personalize_screen.dart @@ -14,6 +14,7 @@ import 'package:filcnaplo_mobile_ui/common/panel/panel_button.dart'; import 'package:filcnaplo_mobile_ui/common/splitted_panel/splitted_panel.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/settings_helper.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/submenu/edit_subject.dart'; +import 'package:filcnaplo_mobile_ui/screens/settings/submenu/paint_list.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart'; @@ -243,7 +244,7 @@ class PersonalizeSettingsScreenState extends State SplittedPanel( padding: const EdgeInsets.only(top: 9.0), cardPadding: const EdgeInsets.all(4.0), - isSeparated: true, + isSeparated: false, children: [ PanelButton( padding: const EdgeInsets.only(left: 14.0, right: 14.0), @@ -272,6 +273,55 @@ class PersonalizeSettingsScreenState extends State shape: BoxShape.circle, ), ), + borderRadius: const BorderRadius.vertical( + top: Radius.circular(12.0), + bottom: Radius.circular(4.0), + ), + ), + const MenuPaintList( + borderRadius: BorderRadius.vertical( + top: Radius.circular(4.0), + bottom: Radius.circular(12.0), + ), + ), + ], + ), + // shadow toggle + SplittedPanel( + padding: const EdgeInsets.only(top: 9.0), + cardPadding: const EdgeInsets.all(4.0), + isSeparated: true, + children: [ + PanelButton( + padding: const EdgeInsets.only(left: 14.0, right: 6.0), + onPressed: () async { + settingsProvider.update( + shadowEffect: !settingsProvider.shadowEffect); + + setState(() {}); + }, + title: Text( + "shadow_effect".i18n, + style: TextStyle( + color: AppColors.of(context).text.withOpacity( + settingsProvider.shadowEffect ? .95 : .25), + ), + ), + leading: Icon( + FeatherIcons.moon, + size: 22.0, + color: AppColors.of(context).text.withOpacity( + settingsProvider.shadowEffect ? .95 : .25), + ), + trailing: Switch( + onChanged: (v) async { + settingsProvider.update(shadowEffect: v); + + setState(() {}); + }, + value: settingsProvider.shadowEffect, + activeColor: Theme.of(context).colorScheme.secondary, + ), borderRadius: const BorderRadius.vertical( top: Radius.circular(12.0), bottom: Radius.circular(12.0), @@ -355,12 +405,13 @@ class PersonalizeSettingsScreenState extends State ), ], ), - // rename subjects + // rename things SplittedPanel( padding: const EdgeInsets.only(top: 9.0), cardPadding: const EdgeInsets.all(4.0), - isSeparated: true, + isSeparated: false, children: [ + // rename subjects PanelButton( padding: const EdgeInsets.only(left: 14.0, right: 6.0), onPressed: () async { @@ -416,17 +467,10 @@ class PersonalizeSettingsScreenState extends State ), borderRadius: const BorderRadius.vertical( top: Radius.circular(12.0), - bottom: Radius.circular(12.0), + bottom: Radius.circular(4.0), ), ), - ], - ), - // rename teachers - SplittedPanel( - padding: const EdgeInsets.only(top: 9.0), - cardPadding: const EdgeInsets.all(4.0), - isSeparated: true, - children: [ + // rename teachers PanelButton( padding: const EdgeInsets.only(left: 14.0, right: 6.0), onPressed: () async { @@ -481,12 +525,19 @@ class PersonalizeSettingsScreenState extends State activeColor: Theme.of(context).colorScheme.secondary, ), borderRadius: const BorderRadius.vertical( - top: Radius.circular(12.0), + top: Radius.circular(4.0), bottom: Radius.circular(12.0), ), ), ], ), + + // SplittedPanel( + // padding: const EdgeInsets.only(top: 9.0), + // cardPadding: const EdgeInsets.all(4.0), + // isSeparated: true, + // children: [], + // ), const SizedBox( height: 18.0, ),