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 { @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 nodeExercises(ExerciseRepository exerciseRepository) { List nodes = List(); List exercises = exerciseRepository.getExerciseList(); String prevDay = ""; Node actualNode; List 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(); 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; } }