148 lines
4.5 KiB
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;
|
|
}
|
|
}
|
|
|
|
|