workouttest_app/lib/view/mydevelopment_page.dart

148 lines
4.5 KiB
Dart

import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/model/exercise.dart';
import 'package:aitrainer_app/model/exercise_type.dart';
import 'package:aitrainer_app/repository/exercise_repository.dart';
import 'package:aitrainer_app/widgets/app_bar.dart';
import 'package:aitrainer_app/widgets/bottom_nav.dart';
import 'package:flutter/material.dart';
import 'package:flutter_treeview/tree_view.dart';
class MyDevelopmentPage extends StatefulWidget {
@override
_MyDevelopmentPage createState() => _MyDevelopmentPage();
}
class _MyDevelopmentPage extends State<MyDevelopmentPage> {
@override
Widget build(BuildContext context) {
final ExerciseRepository exerciseRepository = ExerciseRepository();
return Scaffold(
appBar: AppBarNav(),
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('asset/image/WT_light_background.png'),
fit: BoxFit.cover,
alignment: Alignment.center,
),
),
child: Container(
padding: EdgeInsets.all(10),
child:
exerciseWidget(exerciseRepository),
)
),
bottomNavigationBar: BottomNavigator(bottomNavIndex: 1));
}
Widget exerciseWidget(ExerciseRepository exerciseRepository) {
TreeViewController _treeViewController = TreeViewController(children: nodeExercises(exerciseRepository) );
TreeViewTheme _treeViewTheme = TreeViewTheme(
expanderTheme: ExpanderThemeData(
type: ExpanderType.caret,
modifier: ExpanderModifier.none,
position: ExpanderPosition.start,
color: Colors.red.shade800,
size: 20,
),
labelStyle: TextStyle(
fontSize: 12,
letterSpacing: 0.1,
),
parentLabelStyle: TextStyle(
fontSize: 16,
letterSpacing: 0.1,
fontWeight: FontWeight.w800,
color: Colors.orange.shade600,
),
iconTheme: IconThemeData(
size: 18,
color: Colors.grey.shade800,
),
colorScheme: ColorScheme.light(
background: Colors.transparent
),
);
return TreeView(
controller: _treeViewController,
allowParentSelect: false,
supportParentDoubleTap: false,
//onExpansionChanged: _expandNodeHandler,
onNodeTap: (key) {
setState(() {
_treeViewController = _treeViewController.copyWith(selectedKey: key);
});
},
theme: _treeViewTheme,
);
}
List<Node> nodeExercises(ExerciseRepository exerciseRepository) {
List<Node> nodes = List<Node>();
List<Exercise> exercises = exerciseRepository.getExerciseList();
String prevDay = "";
Node actualNode;
List<Node> listExercisesPerDay;
exercises.forEach((element) {
Exercise exercise = element;
ExerciseType exerciseType =
exerciseRepository.getExerciseTypeById(exercise.exerciseTypeId);
String actualDay = exercise.dateAdd.year.toString()+"-"+
exercise.dateAdd.month.toString()+"-"+
exercise.dateAdd.day.toString();
if ( prevDay.compareTo(actualDay) != 0) {
listExercisesPerDay = List<Node>();
actualNode =
Node(
label: actualDay,
key: exercise.dateAdd.toString(),
expanded: true,
children: listExercisesPerDay,
icon: NodeIcon(
codePoint: Icons.date_range.codePoint,
color: "blue"
)
);
nodes.add(actualNode);
prevDay = actualDay;
}
String exerciseName = AppLanguage().appLocal == Locale("en") ?
exerciseType.name :
exerciseType.nameTranslation;
String unitQuantity = exerciseType.unitQuantity == "1" ?
exercise.unitQuantity.toStringAsFixed(0)
+ " " + AppLocalizations.of(context).translate(exerciseType.unitQuantityUnit) + " "
: "";
String labelExercise =
exerciseName + " " + unitQuantity
+ exercise.quantity.toStringAsFixed(0) + " "
+ AppLocalizations.of(context).translate(exercise.unit);
listExercisesPerDay.add(
Node(
label: labelExercise,
key: exercise.exerciseId.toString(),
expanded: false,
icon: NodeIcon(
codePoint: Icons.repeat.codePoint,
color: "blue"
)
)
);
});
return nodes;
}
}