Journal section added

This commit is contained in:
Sewmina
2022-03-29 21:36:11 +05:30
parent cad1b5db5a
commit 4335ce43db
8 changed files with 673 additions and 62 deletions

View File

@@ -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 = [];