import 'dart:ui'; import 'package:aitrainer_app/bloc/menu/menu_bloc.dart'; import 'package:aitrainer_app/localization/app_localization.dart'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/workout_menu_tree.dart'; import 'package:aitrainer_app/util/trans.dart'; import 'package:badges/badges.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/painting.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:google_fonts/google_fonts.dart'; import 'menu_info_widget.dart'; // ignore: must_be_immutable class MenuPageWidget extends StatelessWidget with Trans { int parent; MenuPageWidget({this.parent}); @override Widget build(BuildContext context) { MenuBloc menuBloc = BlocProvider.of(context); setContext(context); return CustomScrollView(scrollDirection: Axis.vertical, slivers: [buildMenuColumn(parent, context, menuBloc)]); } SliverList buildMenuColumn(int parent, BuildContext context, MenuBloc menuBloc) { final List _columnChildren = List(); if (context != null) { menuBloc.setContext(context); menuBloc.setMenuInfo(); Widget info = MenuInfoWidget( title: menuBloc.infoTitle, titleSize: 18, titleWeight: FontWeight.bold, titleColor: Colors.orangeAccent, text: menuBloc.infoText, textSize: 13, textColor: Colors.yellowAccent, text2: menuBloc.infoText2, text3: menuBloc.infoText3, link: menuBloc.infoLink, bloc: menuBloc, ); _columnChildren.add(info); } menuBloc.menuTreeRepository.getBranch(menuBloc.parent).forEach((treeName, value) { WorkoutMenuTree workoutTree = value as WorkoutMenuTree; _columnChildren.add(Container( padding: EdgeInsets.only(top: 16.0), child: Center( child: Stack(alignment: Alignment.bottomLeft, //clipBehavior: Clip.antiAliasWithSaveLayer, children: [ FlatButton( child: badgedIcon(workoutTree), padding: EdgeInsets.only(left: 0.0, bottom: 0), shape: getShape(workoutTree), onPressed: () => menuClick(workoutTree, menuBloc, context), ), Positioned( top: workoutTree.name.length > 20 ? 130 : 145, left: 5, child: Container( height: 300, width: 280, child: InkWell( onTap: () => menuClick(workoutTree, menuBloc, context), child: Text( " " + workoutTree.name, maxLines: 2, style: GoogleFonts.archivoBlack( color: workoutTree.color, fontSize: workoutTree.fontSize, ), ), highlightColor: workoutTree.color, ), color: Colors.transparent, ), ), ])))); }); SliverList sliverList = SliverList(delegate: SliverChildListDelegate(_columnChildren)); return sliverList; } void menuClick(WorkoutMenuTree workoutTree, MenuBloc menuBloc, BuildContext context) { print("Hi!, Menu clicked " + workoutTree.id.toString()); if (workoutTree.child == false) { menuBloc.add(MenuTreeDown(item: workoutTree, parent: workoutTree.id)); } else { menuBloc.add(MenuClickExercise(exerciseTypeId: workoutTree.id)); if (Cache().userLoggedIn == null) { Scaffold.of(context).showSnackBar(SnackBar( backgroundColor: Colors.orange, content: Text(AppLocalizations.of(context).translate('Please log in'), style: TextStyle(color: Colors.white)))); } else { if (workoutTree.exerciseType.name == "Custom" && Cache().userLoggedIn.admin == 1) { Navigator.of(context).pushNamed('exerciseCustomPage', arguments: workoutTree.exerciseType); } else { Navigator.of(context).pushNamed('exerciseNewPage', arguments: workoutTree.exerciseType); } } } } dynamic getShape(WorkoutMenuTree workoutTree) { bool base = workoutTree.base; dynamic returnCode = (base == true) ? RoundedRectangleBorder( side: BorderSide(width: 4, color: Colors.orangeAccent), ) : null; return returnCode; } dynamic _getButtonImage(WorkoutMenuTree workoutTree) { dynamic image; try { image = Image.asset( workoutTree.imageName, height: 180, errorBuilder: (context, error, stackTrace) { String url = Cache.mediaUrl + 'images/' + workoutTree.imageName.substring(11); Widget image = FadeInImage.assetNetwork( placeholder: 'asset/image/dots.gif', image: url, height: 180, ); return image; }, ); } on Exception catch (_) { String url = Cache.mediaUrl + '/images/' + workoutTree.imageName; image = FadeInImage.assetNetwork( placeholder: 'asset/image/dots.gif', image: url, height: 180, ); } return image; } Widget badgedIcon(WorkoutMenuTree workoutMenuTree) { String badgeKey = workoutMenuTree.nameEnglish; bool show = Cache().getBadges()[badgeKey] != null; int counter = Cache().getBadges()[badgeKey] != null ? Cache().getBadges()[badgeKey] : 0; return Badge( padding: EdgeInsets.all(8), position: BadgePosition.topEnd(top: 3, end: 3), animationDuration: Duration(milliseconds: 500), animationType: BadgeAnimationType.slide, badgeColor: Colors.red, showBadge: show, badgeContent: Text(counter.toString(), style: TextStyle( color: Colors.white, fontSize: 16, )), child: _getButtonImage(workoutMenuTree), ); } }