Journal section added
This commit is contained in:
@@ -1,11 +1,13 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:sticky_headers/sticky_headers/widget.dart';
|
||||
import 'main.dart' as Main;
|
||||
import 'newActivity.dart';
|
||||
import 'Data.dart';
|
||||
import 'User.dart' as User;
|
||||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
||||
class Activities extends StatefulWidget {
|
||||
const Activities({Key? key}) : super(key: key);
|
||||
|
||||
@@ -66,7 +68,7 @@ class _ActivitiesState extends State<Activities> {
|
||||
// progressDialog.update(value: 100);
|
||||
} catch (e) {}
|
||||
}
|
||||
Map<Widget, List<Widget>> activitiesGroups =<Widget, List<Widget>>{};
|
||||
Map<String, ActivityListDateGroup> activitiesGroups = <String, ActivityListDateGroup>{};
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// progressDialog = ProgressDialog(context: context);
|
||||
@@ -172,14 +174,15 @@ class _ActivitiesState extends State<Activities> {
|
||||
drawer: Main.navDrawer(context, 2),
|
||||
body: Container(
|
||||
padding: EdgeInsets.all(0),
|
||||
child: ListView.builder(
|
||||
child: ScrollablePositionedList.builder(
|
||||
itemScrollController: scrollController,
|
||||
itemCount: activitiesGroups.length,
|
||||
itemBuilder: (context, index){
|
||||
// return activities[index];
|
||||
return StickyHeader(
|
||||
|
||||
header:activitiesGroups.keys.toList()[index],
|
||||
content:Column(children: activitiesGroups.values.toList()[index],)
|
||||
header:activitiesGroups.values.toList()[index].dateSeperator,
|
||||
content:Column(children: activitiesGroups.values.toList()[index].activities,)
|
||||
);
|
||||
|
||||
})
|
||||
@@ -189,13 +192,17 @@ class _ActivitiesState extends State<Activities> {
|
||||
// ))
|
||||
));
|
||||
}
|
||||
|
||||
DateFormat dFormat = DateFormat("yyyy-MM-dd");
|
||||
ItemScrollController scrollController = ItemScrollController();
|
||||
ScrollController controller = ScrollController();
|
||||
int searchTime = 0;
|
||||
Map<Widget,List<Widget>> PrintTasks() {
|
||||
Map<Widget,List<Widget>> _tasks = <Widget,List<Widget>>{};
|
||||
Map<String,ActivityListDateGroup> PrintTasks() {
|
||||
|
||||
Map<String,ActivityListDateGroup> _tasks = <String,ActivityListDateGroup>{};
|
||||
|
||||
print('Priting cats : ' + User.taskTypes.length.toString());
|
||||
String lastDate = "";
|
||||
DateFormat dFormat = DateFormat("MM/dd");
|
||||
|
||||
Map<String, int> productivtyActs = <String, int>{};
|
||||
Map<String, int> unproductivtyActs = <String, int>{};
|
||||
Map<String, int> totalMinutes = <String, int>{};
|
||||
@@ -248,7 +255,8 @@ class _ActivitiesState extends State<Activities> {
|
||||
int prodActs = productivtyActs[thisDate] ?? 0;
|
||||
int unProdActs = unproductivtyActs[thisDate] ?? 0;
|
||||
//_tasks.add(DateSeperator(thisDate, prodActs, unProdActs));
|
||||
_tasks.putIfAbsent(DateSeperator(thisDate, prodActs, unProdActs), () => [Container()]);
|
||||
// _tasks.putIfAbsent(DateSeperator(thisDate, prodActs, unProdActs), () => [List.generate(0, (i) => List(2));]);
|
||||
_tasks.putIfAbsent(thisDate, () => ActivityListDateGroup(DateSeperator(thisDate, prodActs, unProdActs), []));
|
||||
print('adding');
|
||||
lastDate = thisDate;
|
||||
}
|
||||
@@ -260,7 +268,8 @@ class _ActivitiesState extends State<Activities> {
|
||||
bool productive = element.taskType.cat?.productive ?? true;
|
||||
Widget task = ActivityCard(context, name, element.startTime, element.endTime, productive, color, element, totalMinutes[thisDate] ?? 0);
|
||||
// print('Activity : ${name} ,sTime: ${element.startTime}, eTime: ${element.endTime}');
|
||||
_tasks.values.toList()[_tasks.length-1].add(task);
|
||||
// _tasks.values.toList()[_tasks.length-1].add(task);
|
||||
_tasks[thisDate]!.activities.add(task);
|
||||
}
|
||||
//Check for gaps
|
||||
if(i < User.activities.length-1){
|
||||
@@ -268,7 +277,8 @@ class _ActivitiesState extends State<Activities> {
|
||||
if(gap > 10) {
|
||||
Widget addGap = timeGap(User.activities[i].trueStartTime, User.activities[i+1].trueEndTime);
|
||||
|
||||
_tasks.values.toList()[_tasks.length-1].add(addGap);
|
||||
//_tasks.values.toList()[_tasks.length-1].add(addGap);
|
||||
_tasks[thisDate]!.activities.add(addGap);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -320,7 +330,22 @@ class _ActivitiesState extends State<Activities> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget DateSeperator(date, prodActs, unprodActs) {
|
||||
void OnJumpToDate(date){
|
||||
int itemId = 0;
|
||||
List<String> keys = activitiesGroups.keys.toList();
|
||||
List<ActivityListDateGroup> values = activitiesGroups.values.toList();
|
||||
for(int i =0; i < activitiesGroups.length; i++){
|
||||
|
||||
if(keys[i] == dFormat.format(date)){
|
||||
break;
|
||||
}
|
||||
itemId++;
|
||||
// itemId+= values[i].activities.length;
|
||||
}
|
||||
scrollController.scrollTo(index: itemId, duration: Duration(seconds: 1),curve: Curves.fastOutSlowIn);
|
||||
}
|
||||
|
||||
Widget DateSeperator(date, prodActs, unprodActs,{Function? onTap}) {
|
||||
// double prodPercentage = (prodActs / (prodActs + unprodActs)) * 100;
|
||||
|
||||
return FutureBuilder(
|
||||
@@ -337,18 +362,29 @@ class _ActivitiesState extends State<Activities> {
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SizedBox(width: 15,),
|
||||
Icon(Icons.circle),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Text(
|
||||
date,
|
||||
style: TextStyle(fontSize: 18),
|
||||
),
|
||||
],
|
||||
InkWell(
|
||||
onTap: (){
|
||||
DatePicker.showDatePicker(context,
|
||||
showTitleActions: true,
|
||||
minTime: User.activities[User.activities.length-1].startTime,
|
||||
maxTime: User.activities[0].startTime,
|
||||
theme: DatePickerTheme(), onChanged: (date) {
|
||||
// print('change $date');
|
||||
}, onConfirm: OnJumpToDate, currentTime: DateTime.parse(date), locale: LocaleType.en);
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(width: 15,),
|
||||
Icon(Icons.circle),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Text(
|
||||
date,
|
||||
style: TextStyle(fontSize: 18),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
@@ -550,5 +586,11 @@ class _ActivitiesState extends State<Activities> {
|
||||
}
|
||||
}
|
||||
|
||||
class ActivityListDateGroup{
|
||||
ActivityListDateGroup(this.dateSeperator, this.activities);
|
||||
Widget dateSeperator;
|
||||
List<Widget> activities;
|
||||
}
|
||||
|
||||
|
||||
List<Activity> selectedActivities = [];
|
||||
|
||||
Reference in New Issue
Block a user