From 3a1bac6dc5f6d7e75780543454d0ce2dbcd40c82 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Fri, 2 May 2025 12:16:03 -0400 Subject: [PATCH] chore: wrap level up notification in SafeArea to prevent it from going into phone header (#2623) --- lib/pangea/analytics_misc/level_up.dart | 542 ++++++++++++------------ 1 file changed, 274 insertions(+), 268 deletions(-) diff --git a/lib/pangea/analytics_misc/level_up.dart b/lib/pangea/analytics_misc/level_up.dart index 89987ad05..03cbb0533 100644 --- a/lib/pangea/analytics_misc/level_up.dart +++ b/lib/pangea/analytics_misc/level_up.dart @@ -229,294 +229,300 @@ class LevelUpBannerState extends State letterSpacing: 0.5, ); - return Material( - color: Colors.transparent, - child: Stack( - children: [ - SlideTransition( - position: _slideAnimation, - child: Align( - alignment: Alignment.topCenter, - child: ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 600.0, - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - margin: const EdgeInsets.only( - top: 16, - ), - decoration: BoxDecoration( - color: widget.level > 10 - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.secondaryContainer, - borderRadius: BorderRadius.circular(8), - ), - padding: const EdgeInsets.symmetric( - vertical: 16, - horizontal: 24, - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - spacing: 8.0, - children: [ - Flexible( - child: RichText( - text: TextSpan( - children: [ - TextSpan( - text: L10n.of(context) - .congratulationsOnReaching, - style: style, - ), - TextSpan( - text: "${L10n.of(context).level} ", - style: style, - ), - TextSpan( - text: "${widget.level} ", - style: style, - ), - WidgetSpan( - child: CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${LevelUpConstants.starFileName}", - height: 24, - width: 24, - ), - ), - ], - ), - ), - ), - AnimatedSize( - duration: FluffyThemes.animationDuration, - child: _error == null - ? ElevatedButton( - onPressed: _error != null - ? null - : _constructSummary != null - ? _toggleDetails - : () {}, - style: ElevatedButton.styleFrom( - backgroundColor: Colors.white, - foregroundColor: Theme.of(context) - .colorScheme - .surfaceContainerHighest, - ), - child: Row( - children: [ - Text( - "${L10n.of(context).seeDetails} ", - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - ), - ), - Container( - decoration: const BoxDecoration( - color: AppConfig.gold, - shape: BoxShape.circle, - ), - padding: const EdgeInsets.all( - 4.0, - ), - child: _loading - ? const CircularProgressIndicator - .adaptive() - : Icon( - _showDetails - ? Icons - .keyboard_arrow_down_rounded - : Icons - .keyboard_arrow_up_rounded, - size: 20, - color: Colors.white, - ), - ), - ], - ), - ) - : Row( - children: [ - Tooltip( - message: L10n.of(context) - .oopsSomethingWentWrong, - child: Icon( - Icons.error, - color: Theme.of(context) - .colorScheme - .error, - ), - ), - IconButton( - icon: const Icon(Icons.close), - onPressed: _close, - ), - ], - ), - ), - ], - ), - ), - SizeTransition( - sizeFactor: _sizeAnimation, - child: Container( - constraints: BoxConstraints( - maxHeight: MediaQuery.of(context).size.height * 0.75, - ), + return SafeArea( + child: Material( + color: Colors.transparent, + child: Stack( + children: [ + SlideTransition( + position: _slideAnimation, + child: Align( + alignment: Alignment.topCenter, + child: ConstrainedBox( + constraints: const BoxConstraints( + maxWidth: 600.0, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( margin: const EdgeInsets.only( top: 16, ), decoration: BoxDecoration( - color: Colors.black, + color: widget.level > 10 + ? Theme.of(context).colorScheme.primary + : Theme.of(context) + .colorScheme + .secondaryContainer, borderRadius: BorderRadius.circular(8), ), - padding: const EdgeInsets.all(16), - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - spacing: 24.0, - children: [ - Table( - columnWidths: const { - 0: IntrinsicColumnWidth(), - 1: FlexColumnWidth(), - 2: IntrinsicColumnWidth(), - }, - defaultVerticalAlignment: - TableCellVerticalAlignment.middle, - children: [ - ...LearningSkillsEnum.values - .where( - (v) => v.isVisible && _skillsPoints(v) > -1, - ) - .map((skill) { - return TableRow( + padding: const EdgeInsets.symmetric( + vertical: 16, + horizontal: 24, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + spacing: 8.0, + children: [ + Flexible( + child: RichText( + text: TextSpan( + children: [ + TextSpan( + text: L10n.of(context) + .congratulationsOnReaching, + style: style, + ), + TextSpan( + text: "${L10n.of(context).level} ", + style: style, + ), + TextSpan( + text: "${widget.level} ", + style: style, + ), + WidgetSpan( + child: CachedNetworkImage( + imageUrl: + "${AppConfig.assetsBaseURL}/${LevelUpConstants.starFileName}", + height: 24, + width: 24, + ), + ), + ], + ), + ), + ), + AnimatedSize( + duration: FluffyThemes.animationDuration, + child: _error == null + ? ElevatedButton( + onPressed: _error != null + ? null + : _constructSummary != null + ? _toggleDetails + : () {}, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.white, + foregroundColor: Theme.of(context) + .colorScheme + .surfaceContainerHighest, + ), + child: Row( + children: [ + Text( + "${L10n.of(context).seeDetails} ", + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Container( + decoration: const BoxDecoration( + color: AppConfig.gold, + shape: BoxShape.circle, + ), + padding: const EdgeInsets.all( + 4.0, + ), + child: _loading + ? const CircularProgressIndicator + .adaptive() + : Icon( + _showDetails + ? Icons + .keyboard_arrow_down_rounded + : Icons + .keyboard_arrow_up_rounded, + size: 20, + color: Colors.white, + ), + ), + ], + ), + ) + : Row( children: [ - Padding( - padding: const EdgeInsets.symmetric( - vertical: 9.0, - horizontal: 18.0, - ), + Tooltip( + message: L10n.of(context) + .oopsSomethingWentWrong, child: Icon( - skill.icon, - size: 25, + Icons.error, + color: Theme.of(context) + .colorScheme + .error, ), ), - Padding( - padding: const EdgeInsets.symmetric( - vertical: 9.0, - horizontal: 18.0, - ), - child: Text( - skill.tooltip(context), - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: Colors.white, - ), - textAlign: TextAlign.center, - ), - ), - Padding( - padding: const EdgeInsets.symmetric( - vertical: 9.0, - horizontal: 18.0, - ), - child: Text( - "+ ${_skillsPoints(skill)} XP", - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: Colors.white, - ), - textAlign: TextAlign.center, - ), + IconButton( + icon: const Icon(Icons.close), + onPressed: _close, ), ], - ); - }), - ], - ), - CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${LevelUpConstants.dinoLevelUPFileName}", - width: 400, - fit: BoxFit.cover, - ), - if (_constructSummary?.textSummary != null) - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: Theme.of(context) - .colorScheme - .secondaryContainer, - borderRadius: BorderRadius.circular(8), - ), - child: Text( - _constructSummary!.textSummary, - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: Colors.white, ), - textAlign: TextAlign.center, - ), + ), + ], + ), + ), + SizeTransition( + sizeFactor: _sizeAnimation, + child: Container( + constraints: BoxConstraints( + maxHeight: + MediaQuery.of(context).size.height * 0.75, + ), + margin: const EdgeInsets.only( + top: 16, + ), + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(8), + ), + padding: const EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + spacing: 24.0, + children: [ + Table( + columnWidths: const { + 0: IntrinsicColumnWidth(), + 1: FlexColumnWidth(), + 2: IntrinsicColumnWidth(), + }, + defaultVerticalAlignment: + TableCellVerticalAlignment.middle, + children: [ + ...LearningSkillsEnum.values + .where( + (v) => + v.isVisible && _skillsPoints(v) > -1, + ) + .map((skill) { + return TableRow( + children: [ + Padding( + padding: const EdgeInsets.symmetric( + vertical: 9.0, + horizontal: 18.0, + ), + child: Icon( + skill.icon, + size: 25, + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 9.0, + horizontal: 18.0, + ), + child: Text( + skill.tooltip(context), + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: Colors.white, + ), + textAlign: TextAlign.center, + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 9.0, + horizontal: 18.0, + ), + child: Text( + "+ ${_skillsPoints(skill)} XP", + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: Colors.white, + ), + textAlign: TextAlign.center, + ), + ), + ], + ); + }), + ], ), - const SizedBox( - height: 24, - ), - // Share button, currently no functionality - // ElevatedButton( - // onPressed: () { - // // Add share functionality - // }, - // style: ElevatedButton.styleFrom( - // backgroundColor: Colors.white, - // foregroundColor: Colors.black, - // padding: const EdgeInsets.symmetric( - // vertical: 12, - // horizontal: 24, - // ), - // shape: RoundedRectangleBorder( - // borderRadius: BorderRadius.circular(8), - // ), - // ), - // child: const Row( - // mainAxisSize: MainAxisSize - // .min, - // children: [ - // Text( - // "Share with Friends", - // style: TextStyle( - // fontSize: 16, - // fontWeight: FontWeight.bold, - // ), - // ), - // SizedBox( - // width: 8, - // ), - // Icon( - // Icons.ios_share, - // size: 20, - // ), - // ), - // ), - // ), - ], + CachedNetworkImage( + imageUrl: + "${AppConfig.assetsBaseURL}/${LevelUpConstants.dinoLevelUPFileName}", + width: 400, + fit: BoxFit.cover, + ), + if (_constructSummary?.textSummary != null) + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Theme.of(context) + .colorScheme + .secondaryContainer, + borderRadius: BorderRadius.circular(8), + ), + child: Text( + _constructSummary!.textSummary, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: Colors.white, + ), + textAlign: TextAlign.center, + ), + ), + const SizedBox( + height: 24, + ), + // Share button, currently no functionality + // ElevatedButton( + // onPressed: () { + // // Add share functionality + // }, + // style: ElevatedButton.styleFrom( + // backgroundColor: Colors.white, + // foregroundColor: Colors.black, + // padding: const EdgeInsets.symmetric( + // vertical: 12, + // horizontal: 24, + // ), + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(8), + // ), + // ), + // child: const Row( + // mainAxisSize: MainAxisSize + // .min, + // children: [ + // Text( + // "Share with Friends", + // style: TextStyle( + // fontSize: 16, + // fontWeight: FontWeight.bold, + // ), + // ), + // SizedBox( + // width: 8, + // ), + // Icon( + // Icons.ios_share, + // size: 20, + // ), + // ), + // ), + // ), + ], + ), ), ), ), - ), - ], + ], + ), ), ), ), - ), - ], + ], + ), ), ); }