import 'package:confetti/confetti.dart'; import 'package:refilc/api/providers/user_provider.dart'; import 'package:refilc/models/settings.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:wtf_sliding_sheet/wtf_sliding_sheet.dart'; import 'summary_screen.i18n.dart'; import 'pages/allsum_page.dart'; import 'pages/start_page.dart'; import 'pages/grades_page.dart'; import 'pages/lessons_page.dart'; import 'pages/personality_page.dart'; class SummaryScreen extends StatefulWidget { final String currentPage; final bool isBottomSheet; const SummaryScreen({ super.key, this.currentPage = 'personality', this.isBottomSheet = false, }); @override SummaryScreenState createState() => SummaryScreenState(); static show( {required BuildContext context, String currentPage = 'personality'}) => Navigator.of(context, rootNavigator: true).push(CupertinoPageRoute( builder: (context) => SummaryScreen(currentPage: currentPage))); } class SummaryScreenState extends State with SingleTickerProviderStateMixin { late UserProvider user; late SettingsProvider settings; ConfettiController? _confettiController; late String firstName; final LinearGradient _backgroundGradient = const LinearGradient( colors: [ Color(0xff1d56ac), Color(0xff170a3d), ], begin: Alignment(-0.8, -1.0), end: Alignment(0.8, 1.0), stops: [-1.0, 1.0], ); @override void initState() { super.initState(); } @override void dispose() { _confettiController?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { user = Provider.of(context); settings = Provider.of(context); List nameParts = user.displayName?.split(" ") ?? ["?"]; if (!settings.presentationMode) { firstName = nameParts.length > 1 ? nameParts[1] : nameParts[0]; } else { firstName = "János"; } return widget.isBottomSheet ? buildContainer() : Scaffold( body: buildContainer(), ); } Widget buildContainer() { return Container( decoration: BoxDecoration(gradient: _backgroundGradient), child: Container( decoration: BoxDecoration(gradient: _backgroundGradient), width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height, child: SafeArea( child: Padding( padding: const EdgeInsets.only( left: 24.0, right: 24.0, top: 15.0, bottom: 40.0, ), child: Column( crossAxisAlignment: widget.currentPage == 'start' ? CrossAxisAlignment.center : CrossAxisAlignment.start, mainAxisAlignment: widget.currentPage == 'start' ? MainAxisAlignment.spaceBetween : MainAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'greeting'.i18n.fill([firstName]), textAlign: TextAlign.left, maxLines: 2, overflow: TextOverflow.ellipsis, softWrap: true, style: const TextStyle( fontWeight: FontWeight.w900, fontSize: 26.0, color: Colors.white, ), ), Text( widget.currentPage == 'start' ? 'title_start'.i18n : widget.currentPage == 'grades' ? 'title_grades'.i18n : widget.currentPage == 'lessons' ? 'title_lessons'.i18n : widget.currentPage == 'personality' ? 'title_personality'.i18n : '', maxLines: 1, overflow: TextOverflow.fade, softWrap: false, style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 22.0, color: Colors.white, ), ), ], ), ), widget.currentPage != 'start' ? IconButton( onPressed: () async { Navigator.of(context).pop(); if (widget.currentPage == 'grades') { openNewPage(page: 'lessons'); } else if (widget.currentPage == 'lessons') { openNewPage(page: 'allsum'); } else if (widget.currentPage == 'allsum') { openNewPage(page: 'personality'); } else { Navigator.of(context).maybePop(); } }, icon: Icon( widget.currentPage == 'personality' ? FeatherIcons.x : FeatherIcons.arrowRight, color: Colors.white, ), ) : Container() ], ), const SizedBox(height: 12.0), widget.currentPage == 'start' ? const StartBody() : widget.currentPage == 'grades' ? const GradesBody() : widget.currentPage == 'lessons' ? const LessonsBody() : widget.currentPage == 'allsum' ? const AllSumBody() : const PersonalityBody(), ], ), ), ), ), ); } void openNewPage({String page = 'personality'}) { showSlidingBottomSheet( context, useRootNavigator: true, builder: (context) => SlidingSheetDialog( color: Colors.black.withOpacity(0.99), duration: const Duration(milliseconds: 400), scrollSpec: const ScrollSpec.bouncingScroll(), snapSpec: const SnapSpec( snap: true, snappings: [1.0], initialSnap: 1.0, positioning: SnapPositioning.relativeToAvailableSpace, ), minHeight: MediaQuery.of(context).size.height, cornerRadius: 16, cornerRadiusOnFullscreen: 0, builder: (context, state) => Material( color: Colors.black, child: SummaryScreen( currentPage: page, isBottomSheet: true, ), ), ), ); //SummaryScreen.show(context: context, currentPage: page); } }