fixed navigation and ui bugs in summary

This commit is contained in:
kima 2023-06-25 14:36:18 +02:00
parent 50bc03f403
commit 51e2c63134
6 changed files with 315 additions and 297 deletions

View File

@ -13,7 +13,6 @@ import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:i18n_extension/i18n_widget.dart'; import 'package:i18n_extension/i18n_widget.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:wtf_sliding_sheet/wtf_sliding_sheet.dart';
import 'live_card.i18n.dart'; import 'live_card.i18n.dart';
class LiveCard extends StatefulWidget { class LiveCard extends StatefulWidget {
@ -68,30 +67,31 @@ class _LiveCardState extends State<LiveCard> {
), ),
), ),
onTap: () { onTap: () {
showSlidingBottomSheet( // showSlidingBottomSheet(
context, // context,
useRootNavigator: true, // useRootNavigator: true,
builder: (context) => SlidingSheetDialog( // builder: (context) => SlidingSheetDialog(
color: Colors.black.withOpacity(0.99), // color: Colors.black.withOpacity(0.99),
duration: const Duration(milliseconds: 400), // duration: const Duration(milliseconds: 400),
scrollSpec: const ScrollSpec.bouncingScroll(), // scrollSpec: const ScrollSpec.bouncingScroll(),
snapSpec: const SnapSpec( // snapSpec: const SnapSpec(
snap: true, // snap: true,
snappings: [1.0], // snappings: [1.0],
initialSnap: 1.0, // initialSnap: 1.0,
positioning: SnapPositioning.relativeToAvailableSpace, // positioning: SnapPositioning.relativeToAvailableSpace,
), // ),
minHeight: MediaQuery.of(context).size.height, // minHeight: MediaQuery.of(context).size.height,
cornerRadius: 16, // cornerRadius: 16,
cornerRadiusOnFullscreen: 0, // cornerRadiusOnFullscreen: 0,
builder: (context, state) => const Material( // builder: (context, state) => const Material(
color: Colors.black, // color: Colors.black,
child: SummaryScreen( // child: SummaryScreen(
currentPage: 'start', // currentPage: 'start',
), // ),
), // ),
), // ),
); // );
SummaryScreen.show(context: context, currentPage: 'start');
}, },
); );
break; break;

View File

@ -198,8 +198,8 @@ class _GradesBodyState extends State<GradesBody> {
getGrades(); getGrades();
return Column( return Expanded(
crossAxisAlignment: CrossAxisAlignment.start, child: ListView(
children: [ children: [
SizedBox( SizedBox(
height: ((100 * subjectTiles5.length) / height: ((100 * subjectTiles5.length) /
@ -308,7 +308,7 @@ class _GradesBodyState extends State<GradesBody> {
}, },
), ),
), ),
const SizedBox(height: 40.0), const SizedBox(height: 30.0),
Center( Center(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@ -325,8 +325,8 @@ class _GradesBodyState extends State<GradesBody> {
), ),
Container( Container(
margin: const EdgeInsets.only(top: 10.0), margin: const EdgeInsets.only(top: 10.0),
padding: padding: const EdgeInsets.symmetric(
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 4.0), horizontal: 16.0, vertical: 4.0),
decoration: BoxDecoration( decoration: BoxDecoration(
color: gradeColor(context: context, value: endYearAvg) color: gradeColor(context: context, value: endYearAvg)
.withOpacity(.2), .withOpacity(.2),
@ -355,6 +355,7 @@ class _GradesBodyState extends State<GradesBody> {
), ),
), ),
], ],
),
); );
} }
} }

View File

@ -230,9 +230,8 @@ class _LessonsBodyState extends State<LessonsBody> {
getAndSortDelays(); getAndSortDelays();
generateTiles(); generateTiles();
return Column( return Expanded(
crossAxisAlignment: CrossAxisAlignment.start, child: ListView(
mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
lessons[0], lessons[0],
const SizedBox(height: 18.0), const SizedBox(height: 18.0),
@ -258,6 +257,7 @@ class _LessonsBodyState extends State<LessonsBody> {
const SizedBox(height: 18.0), const SizedBox(height: 18.0),
lessons[2], lessons[2],
], ],
),
); );
} }
} }

View File

@ -58,11 +58,10 @@ class _PersonalityBodyState extends State<PersonalityBody> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
user = Provider.of<UserProvider>(context); user = Provider.of<UserProvider>(context);
return Column( return Expanded(
crossAxisAlignment: CrossAxisAlignment.center, child: ListView(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [ children: [
const SizedBox(height: 60), const SizedBox(height: 30),
AnimatedCrossFade( AnimatedCrossFade(
duration: const Duration(milliseconds: 1000), duration: const Duration(milliseconds: 1000),
sizeCurve: Curves.easeInToLinear, sizeCurve: Curves.easeInToLinear,
@ -80,7 +79,7 @@ class _PersonalityBodyState extends State<PersonalityBody> {
? CrossFadeState.showFirst ? CrossFadeState.showFirst
: CrossFadeState.showSecond, : CrossFadeState.showSecond,
), ),
const SizedBox(height: 40), const SizedBox(height: 30),
if (isRevealed) if (isRevealed)
Center( Center(
child: Row( child: Row(
@ -122,6 +121,8 @@ class _PersonalityBodyState extends State<PersonalityBody> {
), ),
), ),
const SizedBox(height: 60), const SizedBox(height: 60),
]); ],
),
);
} }
} }

View File

@ -3,7 +3,6 @@ import 'package:filcnaplo/models/settings.dart';
import 'package:filcnaplo_kreta_api/providers/grade_provider.dart'; import 'package:filcnaplo_kreta_api/providers/grade_provider.dart';
import 'package:filcnaplo_mobile_ui/screens/summary/summary_screen.dart'; import 'package:filcnaplo_mobile_ui/screens/summary/summary_screen.dart';
import 'package:filcnaplo_mobile_ui/screens/summary/summary_screen.i18n.dart'; import 'package:filcnaplo_mobile_ui/screens/summary/summary_screen.i18n.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -61,6 +60,7 @@ class _StartBodyState extends State<StartBody> {
color: Colors.black, color: Colors.black,
child: SummaryScreen( child: SummaryScreen(
currentPage: 'grades', currentPage: 'grades',
isBottomSheet: true,
), ),
), ),
), ),

View File

@ -1,6 +1,7 @@
import 'package:confetti/confetti.dart'; import 'package:confetti/confetti.dart';
import 'package:filcnaplo/api/providers/user_provider.dart'; import 'package:filcnaplo/api/providers/user_provider.dart';
import 'package:filcnaplo/models/settings.dart'; import 'package:filcnaplo/models/settings.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -15,12 +16,22 @@ import 'pages/personality_page.dart';
class SummaryScreen extends StatefulWidget { class SummaryScreen extends StatefulWidget {
final String currentPage; final String currentPage;
final bool isBottomSheet;
const SummaryScreen({Key? key, this.currentPage = 'personality'}) const SummaryScreen({
: super(key: key); Key? key,
this.currentPage = 'personality',
this.isBottomSheet = false,
}) : super(key: key);
@override @override
_SummaryScreenState createState() => _SummaryScreenState(); _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<SummaryScreen> class _SummaryScreenState extends State<SummaryScreen>
@ -28,7 +39,6 @@ class _SummaryScreenState extends State<SummaryScreen>
late UserProvider user; late UserProvider user;
late SettingsProvider settings; late SettingsProvider settings;
late AnimationController _hideContainersController;
ConfettiController? _confettiController; ConfettiController? _confettiController;
late String firstName; late String firstName;
@ -46,9 +56,6 @@ class _SummaryScreenState extends State<SummaryScreen>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_hideContainersController = AnimationController(
vsync: this, duration: const Duration(milliseconds: 200));
} }
@override @override
@ -70,11 +77,15 @@ class _SummaryScreenState extends State<SummaryScreen>
firstName = "János"; firstName = "János";
} }
return AnimatedBuilder( return widget.isBottomSheet
animation: _hideContainersController, ? buildContainer()
builder: (context, child) => Opacity( : Scaffold(
opacity: 1 - _hideContainersController.value, body: buildContainer(),
child: Container( );
}
Widget buildContainer() {
return Container(
decoration: BoxDecoration(gradient: _backgroundGradient), decoration: BoxDecoration(gradient: _backgroundGradient),
child: Container( child: Container(
decoration: BoxDecoration(gradient: _backgroundGradient), decoration: BoxDecoration(gradient: _backgroundGradient),
@ -82,11 +93,11 @@ class _SummaryScreenState extends State<SummaryScreen>
height: MediaQuery.of(context).size.height, height: MediaQuery.of(context).size.height,
child: SafeArea( child: SafeArea(
child: Padding( child: Padding(
padding: EdgeInsets.only( padding: const EdgeInsets.only(
left: 24.0, left: 24.0,
right: 24.0, right: 24.0,
top: MediaQuery.of(context).padding.top, top: 15.0,
bottom: 52.0, bottom: 40.0,
), ),
child: Column( child: Column(
crossAxisAlignment: widget.currentPage == 'start' crossAxisAlignment: widget.currentPage == 'start'
@ -100,14 +111,16 @@ class _SummaryScreenState extends State<SummaryScreen>
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Column( Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
'greeting'.i18n.fill([firstName]), 'greeting'.i18n.fill([firstName]),
textAlign: TextAlign.left, textAlign: TextAlign.left,
maxLines: 2, maxLines: 2,
overflow: TextOverflow.fade, overflow: TextOverflow.ellipsis,
softWrap: true,
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.w900, fontWeight: FontWeight.w900,
fontSize: 26.0, fontSize: 26.0,
@ -124,7 +137,9 @@ class _SummaryScreenState extends State<SummaryScreen>
: widget.currentPage == 'personality' : widget.currentPage == 'personality'
? 'title_personality'.i18n ? 'title_personality'.i18n
: '', : '',
maxLines: 1,
overflow: TextOverflow.fade, overflow: TextOverflow.fade,
softWrap: false,
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 22.0, fontSize: 22.0,
@ -133,6 +148,7 @@ class _SummaryScreenState extends State<SummaryScreen>
), ),
], ],
), ),
),
widget.currentPage != 'start' widget.currentPage != 'start'
? IconButton( ? IconButton(
onPressed: () async { onPressed: () async {
@ -172,8 +188,6 @@ class _SummaryScreenState extends State<SummaryScreen>
), ),
), ),
), ),
),
),
); );
} }
@ -198,9 +212,11 @@ class _SummaryScreenState extends State<SummaryScreen>
color: Colors.black, color: Colors.black,
child: SummaryScreen( child: SummaryScreen(
currentPage: page, currentPage: page,
isBottomSheet: true,
), ),
), ),
), ),
); );
//SummaryScreen.show(context: context, currentPage: page);
} }
} }