wt1.1.2d ProgressInfo+
This commit is contained in:
+23
-34
@@ -4,6 +4,7 @@ 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/repository/exercise_repository.dart';
|
||||
import 'package:aitrainer_app/util/common.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
@@ -13,20 +14,20 @@ import 'package:rainbow_color/rainbow_color.dart';
|
||||
|
||||
class AppBarNav extends StatefulWidget implements PreferredSizeWidget {
|
||||
final MenuBloc menuBloc;
|
||||
const AppBarNav({this.menuBloc});
|
||||
final bool isMenu;
|
||||
final int depth;
|
||||
const AppBarNav({this.menuBloc, this.isMenu, this.depth});
|
||||
|
||||
@override
|
||||
_AppBarNav createState() => _AppBarNav();
|
||||
|
||||
@override
|
||||
Size get preferredSize => const Size.fromHeight(60);
|
||||
Size get preferredSize => const Size.fromHeight(50);
|
||||
}
|
||||
|
||||
class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin, Common {
|
||||
Animation<Color> colorAnim;
|
||||
//Animation<double> sizeAnim;
|
||||
AnimationController colorController;
|
||||
//AnimationController sizeController;
|
||||
MenuBloc menuBloc;
|
||||
|
||||
@override
|
||||
@@ -34,26 +35,7 @@ class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
|
||||
colorController =
|
||||
AnimationController(duration: Duration(seconds: 4), vsync:this);
|
||||
//sizeController =
|
||||
// AnimationController(duration: Duration(seconds: 3), vsync: this);
|
||||
|
||||
/* final curvedAnimation = CurvedAnimation(
|
||||
parent: sizeController,
|
||||
curve: Curves.easeIn,
|
||||
reverseCurve: Curves.easeInOutBack,
|
||||
);
|
||||
|
||||
sizeAnim =
|
||||
Tween<double>(begin: 0, end: 1.5).animate(curvedAnimation)
|
||||
..addStatusListener((status) {
|
||||
if (status == AnimationStatus.completed) {
|
||||
sizeController.reverse();
|
||||
} else if (status == AnimationStatus.dismissed) {
|
||||
Timer(Duration(seconds: 5), () {
|
||||
sizeController.forward();
|
||||
});
|
||||
}
|
||||
}); */
|
||||
colorAnim = RainbowColorTween([Colors.white70,
|
||||
Colors.blueGrey,
|
||||
Colors.blueAccent,
|
||||
@@ -69,7 +51,6 @@ class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
..addStatusListener((status) {
|
||||
if (status == AnimationStatus.completed) {
|
||||
Timer(Duration(seconds: 10), () {
|
||||
//colorController.reset();
|
||||
if ( mounted ) {
|
||||
colorController.forward();
|
||||
}
|
||||
@@ -85,7 +66,6 @@ class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
menuBloc = BlocProvider.of<MenuBloc>(context);
|
||||
//setContext(context);
|
||||
|
||||
return AppBar(
|
||||
backgroundColor: Colors.black,
|
||||
@@ -96,8 +76,8 @@ class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
getAnimatedWidget(),
|
||||
Image.asset(
|
||||
'asset/image/WT_long_logo.png',
|
||||
fit: BoxFit.cover,
|
||||
height: 65.0,
|
||||
//fit: BoxFit.cover,
|
||||
height: 45.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -105,8 +85,16 @@ class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
icon: Icon(Icons.arrow_back, color: Colors.white),
|
||||
onPressed: () =>
|
||||
{
|
||||
if ( menuBloc != null ) {
|
||||
menuBloc.add(MenuTreeUp(parent: 0)),
|
||||
if ( widget.isMenu != null ) {
|
||||
if ( menuBloc.workoutItem != null ) {
|
||||
menuBloc.add(MenuTreeUp(parent: menuBloc.workoutItem.parent)),
|
||||
}
|
||||
} else if ( widget.depth != null ) {
|
||||
if ( widget.depth == 0 ) {
|
||||
Navigator.of(context).pushNamed('home')
|
||||
} else {
|
||||
Navigator.of(context).pop()
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
@@ -115,12 +103,12 @@ class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
//sizeController.dispose();
|
||||
colorController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Widget getAnimatedWidget() {
|
||||
double cWidth = mediaSizeWidth(context);
|
||||
double percent = Cache().getPercentExercises();
|
||||
if ( percent == -1) {
|
||||
ExerciseRepository exerciseRepository = ExerciseRepository();
|
||||
@@ -130,9 +118,10 @@ class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
int sizeExerciseList = Cache().getExercises() == null? 0 : Cache().getExercises().length;
|
||||
if ( sizeExerciseList == 0 ) {
|
||||
String text = AppLocalizations.of(context).translate("Make your first test");
|
||||
double fontSize = text.length > 15 ? 10 : 16;
|
||||
double fontSize = text.length > 24 ? 10 : 16;
|
||||
return Stack(
|
||||
alignment: Alignment.topLeft,
|
||||
overflow: Overflow.clip,
|
||||
children: [
|
||||
Text(text,
|
||||
style: TextStyle(fontSize: fontSize, color: colorAnim.value, shadows: [Shadow(color: Colors.purple , blurRadius: 15)]),
|
||||
@@ -147,12 +136,12 @@ class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
|
||||
alignment: Alignment.topLeft,
|
||||
children: [
|
||||
LinearPercentIndicator(
|
||||
width: 120.0,
|
||||
width: cWidth / 4,
|
||||
lineHeight: 14.0,
|
||||
percent: percent,
|
||||
center: Text(
|
||||
(percent * 100).toStringAsFixed(0) + "% " + AppLocalizations.of(context).translate("finished"),
|
||||
style: new TextStyle(fontSize: 12.0),
|
||||
style: new TextStyle(fontSize: 10.0),
|
||||
),
|
||||
trailing: Icon(percent > 0.6 ? Icons.mood : Icons.mood_bad, color: colorAnim.value,),
|
||||
linearStrokeCap: LinearStrokeCap.roundAll,
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
import 'dart:async';
|
||||
import 'package:aitrainer_app/localization/app_localization.dart';
|
||||
import 'package:aitrainer_app/model/cache.dart';
|
||||
import 'package:aitrainer_app/repository/exercise_repository.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:percent_indicator/linear_percent_indicator.dart';
|
||||
import 'package:rainbow_color/rainbow_color.dart';
|
||||
|
||||
|
||||
class AppBarCommonNav extends StatefulWidget implements PreferredSizeWidget {
|
||||
|
||||
@override
|
||||
_AppBarCommonNav createState() => _AppBarCommonNav();
|
||||
|
||||
@override
|
||||
Size get preferredSize => const Size.fromHeight(60);
|
||||
}
|
||||
|
||||
class _AppBarCommonNav extends State<AppBarCommonNav> with SingleTickerProviderStateMixin {
|
||||
Animation<Color> colorAnim;
|
||||
AnimationController colorController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
||||
colorController =
|
||||
AnimationController(duration: Duration(seconds: 4),vsync: this);
|
||||
|
||||
colorAnim = RainbowColorTween([Colors.white70,
|
||||
Colors.blueGrey,
|
||||
Colors.blueAccent,
|
||||
Colors.lightBlue,
|
||||
Colors.lightBlueAccent,
|
||||
Colors.yellowAccent,
|
||||
Colors.orange,
|
||||
Colors.orangeAccent,
|
||||
Colors.yellowAccent,
|
||||
Color(0xffcce6ff)])
|
||||
.animate(colorController)
|
||||
..addListener(() { setState(() {}); })
|
||||
..addStatusListener((status) {
|
||||
if (status == AnimationStatus.completed) {
|
||||
Timer(Duration(seconds: 10), () {
|
||||
//colorController.reset();
|
||||
if ( mounted ) {
|
||||
colorController.forward();
|
||||
}
|
||||
});
|
||||
} else if (status == AnimationStatus.dismissed) {
|
||||
colorController.forward();
|
||||
}
|
||||
});
|
||||
colorController.forward();
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppBar(
|
||||
backgroundColor: Colors.black,
|
||||
title: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
|
||||
getAnimatedWidget(),
|
||||
Image.asset(
|
||||
'asset/image/WT_long_logo.png',
|
||||
fit: BoxFit.cover,
|
||||
height: 65.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.arrow_back, color: Colors.white),
|
||||
onPressed: () =>
|
||||
{
|
||||
Navigator.of(context).pushNamed('home')
|
||||
},
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
//sizeController.dispose();
|
||||
colorController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Widget getAnimatedWidget() {
|
||||
double percent = Cache().getPercentExercises();
|
||||
if ( percent == -1) {
|
||||
ExerciseRepository exerciseRepository = ExerciseRepository();
|
||||
exerciseRepository.getBaseExerciseFinishedPercent();
|
||||
percent = Cache().getPercentExercises();
|
||||
}
|
||||
int sizeExerciseList = Cache().getExercises() == null? 0 : Cache().getExercises().length;
|
||||
if ( sizeExerciseList == 0 ) {
|
||||
String text = AppLocalizations.of(context).translate("Make your first test");
|
||||
double fontSize = text.length > 17 ? 10 : 16;
|
||||
return Stack(
|
||||
alignment: Alignment.topLeft,
|
||||
children: [
|
||||
Text(text,
|
||||
style: TextStyle(fontSize: fontSize, color: colorAnim.value, shadows: [Shadow(color: Colors.purple , blurRadius: 15)]),
|
||||
|
||||
),
|
||||
//TestProgress(animation: sizeAnim),
|
||||
]
|
||||
);
|
||||
} else {
|
||||
|
||||
return Stack(
|
||||
alignment: Alignment.topLeft,
|
||||
children: [
|
||||
LinearPercentIndicator(
|
||||
width: 120.0,
|
||||
lineHeight: 14.0,
|
||||
percent: percent,
|
||||
center: Text(
|
||||
(percent * 100).toStringAsFixed(0) + "% " + AppLocalizations.of(context).translate("finished"),
|
||||
style: new TextStyle(fontSize: 12.0),
|
||||
),
|
||||
trailing: Icon(percent > 0.6 ? Icons.mood : Icons.mood_bad, color: colorAnim.value,),
|
||||
linearStrokeCap: LinearStrokeCap.roundAll,
|
||||
backgroundColor: colorAnim.value,
|
||||
progressColor: Color(0xff73e600),
|
||||
animation: true,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
import 'package:aitrainer_app/bloc/session/session_bloc.dart';
|
||||
import 'package:aitrainer_app/bloc/settings/settings_bloc.dart';
|
||||
import 'package:aitrainer_app/localization/app_language.dart';
|
||||
import 'package:aitrainer_app/model/cache.dart';
|
||||
import 'package:aitrainer_app/view/login.dart';
|
||||
import 'package:aitrainer_app/view/menu_page.dart';
|
||||
@@ -13,6 +12,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'loading.dart';
|
||||
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class AitrainerHome extends StatefulWidget {
|
||||
_HomePageState _state;
|
||||
@override
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
import 'package:aitrainer_app/model/cache.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:bloc/bloc.dart';
|
||||
|
||||
class ImageButton extends StatelessWidget {
|
||||
final String text;
|
||||
final TextStyle style;
|
||||
final String image;
|
||||
final double top;
|
||||
final double height;
|
||||
final double width;
|
||||
final bool isShape;
|
||||
final Bloc bloc;
|
||||
final Alignment textAlignment;
|
||||
final VoidCallback onTap;
|
||||
bool isLocked;
|
||||
|
||||
ImageButton({
|
||||
this.text,
|
||||
this.style,
|
||||
this.image,
|
||||
this.top,
|
||||
this.height,
|
||||
this.width,
|
||||
this.bloc,
|
||||
this.isShape,
|
||||
this.textAlignment,
|
||||
this.onTap,
|
||||
@required this.isLocked
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Stack(
|
||||
//alignment: textAlignment,
|
||||
fit: StackFit.passthrough,
|
||||
overflow: Overflow.clip,
|
||||
children: [
|
||||
FlatButton(
|
||||
child: image == null ?
|
||||
_getButtonImage("asset/image/WT_menu_dark.png") :
|
||||
_getButtonImage(image),
|
||||
padding: EdgeInsets.only(left: 0.0, bottom: 0),
|
||||
shape: getShape(isShape),
|
||||
onPressed: onTap ?? onTap,
|
||||
),
|
||||
Stack(
|
||||
alignment: Alignment.topLeft,
|
||||
children: [
|
||||
this.isLocked?
|
||||
Image.asset(
|
||||
'asset/image/lock.png',
|
||||
height: 40,
|
||||
width: 40,
|
||||
)
|
||||
: Container(),
|
||||
]),
|
||||
Positioned(
|
||||
top: top,
|
||||
left: 10,
|
||||
child: Container(
|
||||
height: 100,
|
||||
width: 150,
|
||||
child: InkWell(
|
||||
onTap: onTap ?? onTap,
|
||||
child: Text(
|
||||
text,
|
||||
maxLines: 2,
|
||||
style: style,
|
||||
),
|
||||
),
|
||||
color: Colors.transparent,
|
||||
),
|
||||
),
|
||||
]
|
||||
//)
|
||||
// )
|
||||
);
|
||||
}
|
||||
|
||||
dynamic getShape(bool isShape) {
|
||||
dynamic returnCode = (isShape == true)
|
||||
? RoundedRectangleBorder(
|
||||
side: BorderSide(width: 4, color: Colors.orangeAccent),
|
||||
)
|
||||
: null;
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
dynamic _getButtonImage(String imageName) {
|
||||
dynamic image;
|
||||
try {
|
||||
image = Image.asset(
|
||||
imageName,
|
||||
fit: BoxFit.fitWidth,
|
||||
alignment: Alignment.center,
|
||||
errorBuilder: (context, error, stackTrace) {
|
||||
String url = Cache.mediaUrl + 'images/' + 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/' + imageName;
|
||||
image = FadeInImage.assetNetwork(
|
||||
placeholder: 'asset/image/dots.gif',
|
||||
image: url,
|
||||
height: 180,
|
||||
);
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:aitrainer_app/bloc/menu/menu_bloc.dart';
|
||||
import 'package:aitrainer_app/util/common.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class MenuInfoWidget extends StatelessWidget with Common {
|
||||
final String title;
|
||||
final double titleSize;
|
||||
final Color titleColor;
|
||||
final FontWeight titleWeight;
|
||||
final String text;
|
||||
final double textSize;
|
||||
final Color textColor;
|
||||
final FontWeight textWeight;
|
||||
final Icon leadingIcon;
|
||||
final Color leadingIconColor;
|
||||
final String text2;
|
||||
final String text3;
|
||||
final String link;
|
||||
final int parentMenu;
|
||||
final MenuBloc bloc;
|
||||
|
||||
MenuInfoWidget(
|
||||
{this.title,
|
||||
this.titleSize,
|
||||
this.titleColor,
|
||||
this.titleWeight,
|
||||
@required this.text,
|
||||
this.textSize,
|
||||
this.textColor,
|
||||
this.textWeight,
|
||||
this.leadingIcon,
|
||||
this.leadingIconColor,
|
||||
this.text2,
|
||||
this.text3,
|
||||
this.link,
|
||||
this.parentMenu,
|
||||
this.bloc});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
int length = title.length + text2.length + text3.length + link.length;
|
||||
return Container(
|
||||
height: length > 100? 350 : 250,
|
||||
width: 180,
|
||||
padding: EdgeInsets.all(25.0),
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage(
|
||||
"asset/menu/3.bcs1.png",
|
||||
),
|
||||
fit: BoxFit.contain),
|
||||
),
|
||||
child: BackdropFilter(
|
||||
filter: ImageFilter.blur(sigmaX: 9, sigmaY: 9),
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(top: 10.0, left: 15, right: 10, bottom: 5),
|
||||
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withOpacity(0.5),
|
||||
border: Border.all(color: Colors.white60),
|
||||
borderRadius: BorderRadius.all(Radius.circular(10.0)),
|
||||
),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
maxLines: 1,
|
||||
style:
|
||||
TextStyle(color: titleColor, fontSize: titleSize, fontFamily: 'Arial', fontWeight: titleWeight),
|
||||
),
|
||||
Divider(),
|
||||
Text(
|
||||
text,
|
||||
maxLines: 6,
|
||||
style: TextStyle(color: textColor, fontSize: textSize, fontFamily: 'Arial', fontWeight: textWeight),
|
||||
),
|
||||
Divider(),
|
||||
Text(
|
||||
text2,
|
||||
maxLines: 6,
|
||||
style: TextStyle(color: textColor, fontSize: textSize, fontFamily: 'Arial', fontWeight: textWeight),
|
||||
),
|
||||
Divider(),
|
||||
Text(
|
||||
text3,
|
||||
maxLines: 6,
|
||||
style: TextStyle(color: textColor, fontSize: textSize, fontFamily: 'Arial', fontWeight: textWeight),
|
||||
),
|
||||
getLink(),
|
||||
],
|
||||
),
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
Widget getLink() {
|
||||
int missingId;
|
||||
return InkWell(
|
||||
child: new Text(link, style: TextStyle(color: Colors.lightBlueAccent, fontSize: textSize, fontFamily: 'Arial', fontWeight: textWeight),),
|
||||
onTap: () =>
|
||||
{
|
||||
missingId = bloc.menuTreeRepository.getMissingTreeIdByName(bloc.missingTreeName),
|
||||
print("menu " + missingId.toString()),
|
||||
bloc.add(MenuTreeJump(parent: missingId))
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,16 @@ 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:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/painting.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
import 'menu_info_widget.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class MenuPageWidget extends StatelessWidget {
|
||||
class MenuPageWidget extends StatelessWidget with Trans {
|
||||
int parent;
|
||||
|
||||
MenuPageWidget({this.parent});
|
||||
@@ -18,16 +21,37 @@ class MenuPageWidget extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
MenuBloc menuBloc = BlocProvider.of<MenuBloc>(context);
|
||||
setContext(context);
|
||||
|
||||
return CustomScrollView(
|
||||
scrollDirection: Axis.vertical,
|
||||
slivers: <Widget>[buildMenuColumn(parent, context, menuBloc)]);
|
||||
}
|
||||
|
||||
SliverList buildMenuColumn(
|
||||
int parent, BuildContext context, MenuBloc menuBloc) {
|
||||
SliverList buildMenuColumn(int parent, BuildContext context, MenuBloc menuBloc) {
|
||||
final List<Widget> _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) {
|
||||
@@ -86,7 +110,7 @@ class MenuPageWidget extends StatelessWidget {
|
||||
WorkoutMenuTree workoutTree, MenuBloc menuBloc, BuildContext context) {
|
||||
print("Hi!, Menu clicked " + workoutTree.id.toString());
|
||||
if (workoutTree.child == false) {
|
||||
menuBloc.add(MenuTreeDown(parent: workoutTree.id));
|
||||
menuBloc.add(MenuTreeDown(item: workoutTree, parent: workoutTree.id));
|
||||
} else {
|
||||
menuBloc.add(MenuClickExercise(exerciseTypeId: workoutTree.id));
|
||||
if (Cache().userLoggedIn == null) {
|
||||
|
||||
Reference in New Issue
Block a user