Day Seperation bug fixed
This commit is contained in:
@@ -230,7 +230,8 @@ class _ActivitiesState extends State<Activities> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget DateSeperator(date, prodActs, unprodActs) {
|
Widget DateSeperator(date, prodActs, unprodActs) {
|
||||||
double prodPercentage = (prodActs / (prodActs + unprodActs)) * 100;
|
// double prodPercentage = (prodActs / (prodActs + unprodActs)) * 100;
|
||||||
|
double prodPercentage = (prodActs / 1440) * 100;
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.fromLTRB(0, 20, 10, 0),
|
padding: const EdgeInsets.fromLTRB(0, 20, 10, 0),
|
||||||
child: Column(
|
child: Column(
|
||||||
@@ -256,24 +257,26 @@ class _ActivitiesState extends State<Activities> {
|
|||||||
children: [
|
children: [
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
|
if(prodPercentage < 35)Text(Main.MinutesToTimeString(prodActs),),
|
||||||
Container(
|
Container(
|
||||||
child: Align(
|
child: Align(
|
||||||
child: FittedBox(fit: BoxFit.fitWidth,child: Text(Main.MinutesToTimeString(prodActs),)),
|
child: (prodPercentage >= 35) ?Text(Main.MinutesToTimeString(prodActs),) : Container(),
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
),
|
),
|
||||||
width: (prodPercentage) * 1.7,
|
width: (prodPercentage) * 1,
|
||||||
height: 25,
|
height: 20,
|
||||||
decoration: BoxDecoration(color: Colors.green, borderRadius: BorderRadius.horizontal(left: Radius.circular(10))),
|
decoration: BoxDecoration(color: Colors.green, borderRadius: BorderRadius.horizontal(left: Radius.circular(10))),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
child: Align(
|
child: Align(
|
||||||
child: Text(Main.MinutesToTimeString(unprodActs)),
|
child: (prodPercentage < 35) ?Text(Main.MinutesToTimeString(unprodActs)) :Container(),
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
),
|
),
|
||||||
width: (100 - prodPercentage) * 1.7,
|
width: (100 - prodPercentage) * 1,
|
||||||
height: 25,
|
height: 20,
|
||||||
decoration: BoxDecoration(color: Colors.red, borderRadius: BorderRadius.horizontal(right: Radius.circular(10))),
|
decoration: BoxDecoration(color: Colors.red, borderRadius: BorderRadius.horizontal(right: Radius.circular(10))),
|
||||||
),
|
),
|
||||||
|
if(prodPercentage >= 35)Text(Main.MinutesToTimeString(unprodActs))
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
@@ -357,7 +360,7 @@ class _ActivitiesState extends State<Activities> {
|
|||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Row(mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
Row(mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
Row(children: [
|
Row(mainAxisSize: MainAxisSize.max,children: [
|
||||||
Text(name + " [$timeSpan]", style: TextStyle(fontSize: 17)),
|
Text(name + " [$timeSpan]", style: TextStyle(fontSize: 17)),
|
||||||
if (containsMetadata)
|
if (containsMetadata)
|
||||||
Icon(
|
Icon(
|
||||||
@@ -365,11 +368,13 @@ class _ActivitiesState extends State<Activities> {
|
|||||||
size: 20,
|
size: 20,
|
||||||
),
|
),
|
||||||
if (containsMetadata)
|
if (containsMetadata)
|
||||||
FittedBox(
|
SizedBox(
|
||||||
|
width: 150,
|
||||||
child: Text(
|
child: Text(
|
||||||
activity.metadata ?? '',
|
activity.metadata ?? '',
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
|
|
||||||
]),
|
]),
|
||||||
|
|
||||||
// Icon(Icons.analytics, color: color, size: 20,),
|
// Icon(Icons.analytics, color: color, size: 20,),
|
||||||
@@ -403,6 +408,11 @@ class _ActivitiesState extends State<Activities> {
|
|||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
if(selecting)InkWell(child: Container(margin:EdgeInsets.all(10),child: Icon(Icons.edit)),onTap: (){
|
if(selecting)InkWell(child: Container(margin:EdgeInsets.all(10),child: Icon(Icons.edit)),onTap: (){
|
||||||
|
selecting=false;
|
||||||
|
selectedActivities=[];
|
||||||
|
setState(() {
|
||||||
|
|
||||||
|
});
|
||||||
Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewActivity(sTime: activity.startTime,eTime: activity.endTime,metadata: activity.metadata,selectedTask: activity.taskType.name,))).then((value) => UpdateList());
|
Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewActivity(sTime: activity.startTime,eTime: activity.endTime,metadata: activity.metadata,selectedTask: activity.taskType.name,))).then((value) => UpdateList());
|
||||||
},)
|
},)
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -347,8 +347,19 @@ Future<List<Activity>> GetActivities(bool forceOffline) async {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//print("TaskType:{$type}, Start Time:{$startTime}, endTime:{$endTime}, metadata:${metadata}");
|
//print("TaskType:{$type}, Start Time:{$startTime}, endTime:{$endTime}, metadata:${metadata}");
|
||||||
|
DateTime sTime = DateTime.parse(startTime);
|
||||||
|
DateTime eTime = DateTime.parse(endTime);
|
||||||
|
|
||||||
|
if(eTime.day!=sTime.day){
|
||||||
|
DateTime midnight = DateTime(eTime.year,eTime.month,eTime.day,0,0,0);
|
||||||
|
|
||||||
|
_activities.add(Activity(taskType, midnight, eTime, metadata: metadata));
|
||||||
|
_activities.add(Activity(taskType, sTime, midnight, metadata: metadata));
|
||||||
|
}else{
|
||||||
_activities.add(Activity(taskType, DateTime.parse(startTime), DateTime.parse(endTime), metadata: metadata));
|
_activities.add(Activity(taskType, DateTime.parse(startTime), DateTime.parse(endTime), metadata: metadata));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
activities = _activities;
|
activities = _activities;
|
||||||
return activities;
|
return activities;
|
||||||
}
|
}
|
||||||
@@ -507,6 +518,47 @@ class UserOperations {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Future<void> editActivity(DateTime init_sTime, DateTime init_eTime,String type, DateTime sTime, DateTime eTime, {String metadata = 'null', bool bulk = false, Function(int)? onOverlap}) async {
|
||||||
|
//Check for timeoverlapse
|
||||||
|
activities = await GetActivities(true);
|
||||||
|
int? overlapCount = Sqflite.firstIntValue(await cacheDb.rawQuery(
|
||||||
|
"SELECT COUNT(*) FROM Activities WHERE (((${Activity.colStartTime} < datetime('$sTime')) AND ((${Activity.colEndTime} > datetime('$eTime')) OR (${Activity.colEndTime} < datetime('$eTime') AND ${Activity.colEndTime} > datetime('$sTime')))) OR (${Activity.colStartTime} > datetime('$sTime') AND ${Activity.colStartTime} < datetime('$eTime')) OR (${Activity.colStartTime}=datetime('$sTime') AND ${Activity.colEndTime}=datetime('$eTime'))) AND ${Activity.colStartTime}!=datetime('${init_sTime}') AND ${Activity.colEndTime} != datetime('${init_eTime}')"));
|
||||||
|
|
||||||
|
print("ActivityOverlaps: $overlapCount");
|
||||||
|
if (overlapCount! > 0) {
|
||||||
|
onOverlap!(overlapCount);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<String, String> queryBody = <String, String>{
|
||||||
|
'username': username,
|
||||||
|
'device_id': await Settings.UUID(),
|
||||||
|
'type': username + type,
|
||||||
|
'init_sTime': dFormat.format(init_sTime),
|
||||||
|
'init_eTime':dFormat.format(init_eTime),
|
||||||
|
'sTime': dFormat.format(sTime),
|
||||||
|
'eTime': dFormat.format(eTime),
|
||||||
|
'metadata': metadata
|
||||||
|
};
|
||||||
|
|
||||||
|
if (metadata.length > 0) {}
|
||||||
|
//Add Query
|
||||||
|
Map<String, Object> query = {Queries.colLink: 'edit_activity', Queries.colData: jsonEncode(queryBody)};
|
||||||
|
|
||||||
|
print("adding new query ${query[Queries.colLink]} : ${jsonEncode(queryBody)}");
|
||||||
|
|
||||||
|
await cacheDb.insert('Queries', query);
|
||||||
|
|
||||||
|
//update Cache
|
||||||
|
// Map<String, Object> data = {Activity.colType: username + type, Activity.colStartTime: dFormat.format(sTime), Activity.colEndTime: dFormat.format(eTime), Activity.colMetadata: metadata};
|
||||||
|
// String updateActQuery = "UPDATE Activities SET ${Activity.colType}=";
|
||||||
|
// await cacheDb.insert('Activities', data);
|
||||||
|
await refreshUserData();
|
||||||
|
if (!bulk) {
|
||||||
|
//Add to server and refresh Cache
|
||||||
|
await executeQueries();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Future<void> deleteTask(String name, {bulk = false}) async {
|
static Future<void> deleteTask(String name, {bulk = false}) async {
|
||||||
Map<String, String> queryBody = <String, String>{
|
Map<String, String> queryBody = <String, String>{
|
||||||
'id': username + name,
|
'id': username + name,
|
||||||
|
|||||||
@@ -148,13 +148,13 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
init(context);
|
init(context);
|
||||||
super.initState();
|
super.initState();
|
||||||
print("Initializing refresh stream on main dart");
|
print("Initializing refresh stream on main dart");
|
||||||
LoadStats();
|
|
||||||
connectivitySub=Connectivity().onConnectivityChanged.listen((result) {
|
connectivitySub=Connectivity().onConnectivityChanged.listen((result) {
|
||||||
if (this.mounted) {
|
if (this.mounted) {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
LoadStats();
|
||||||
// User.progressDialog=progressDialog;
|
// User.progressDialog=progressDialog;
|
||||||
}
|
}
|
||||||
var refreshSub;
|
var refreshSub;
|
||||||
@@ -170,6 +170,8 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
print("Closing progress dialog");
|
print("Closing progress dialog");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
await User.refreshUserData();
|
||||||
|
|
||||||
}
|
}
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
@@ -177,10 +179,9 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
super.dispose();
|
super.dispose();
|
||||||
connectivitySub?.cancel();
|
connectivitySub?.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadStats() async {
|
void LoadStats() async {
|
||||||
// return;
|
// return;
|
||||||
|
// await User.refreshUserData();
|
||||||
DateFormat dFormat = DateFormat("MM/dd");
|
DateFormat dFormat = DateFormat("MM/dd");
|
||||||
Map<Category, int> catTimeMap = <Category, int>{};
|
Map<Category, int> catTimeMap = <Category, int>{};
|
||||||
Map<Category, int> catBriefMap = <Category, int>{};
|
Map<Category, int> catBriefMap = <Category, int>{};
|
||||||
@@ -206,19 +207,9 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
}
|
}
|
||||||
firstDay = element.startTime;
|
firstDay = element.startTime;
|
||||||
String thisDate = dFormat.format(element.startTime);
|
String thisDate = dFormat.format(element.startTime);
|
||||||
String endDate = dFormat.format(element.endTime);
|
|
||||||
|
|
||||||
int thisMinutes = element.endTime.difference(element.startTime).inMinutes;
|
int thisMinutes = element.endTime.difference(element.startTime).inMinutes;
|
||||||
int nextMinutes = 0;
|
|
||||||
if(element.startTime.day != element.endTime.day){
|
|
||||||
print("welp, ${element.startTime} - ${element.endTime}");
|
|
||||||
DateTime nextDayBaseline = DateTime(element.endTime.year, element.endTime.month,
|
|
||||||
element.endTime.day,0,0,0);
|
|
||||||
nextMinutes = element.endTime.difference(nextDayBaseline).inMinutes;
|
|
||||||
thisMinutes -= nextMinutes;
|
|
||||||
|
|
||||||
print("Today : $thisMinutes, Next day : $nextMinutes");
|
|
||||||
}
|
|
||||||
if (!days.contains(thisDate)) {
|
if (!days.contains(thisDate)) {
|
||||||
days.add(dFormat.format(element.startTime));
|
days.add(dFormat.format(element.startTime));
|
||||||
}
|
}
|
||||||
@@ -255,20 +246,11 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
}
|
}
|
||||||
print("Null : ${thisMinutes}");
|
print("Null : ${thisMinutes}");
|
||||||
if (catTimeMap.containsKey(element.taskType.cat)) {
|
if (catTimeMap.containsKey(element.taskType.cat)) {
|
||||||
catTimeMap[element.taskType.cat!] = (catTimeMap[element.taskType.cat]! + thisMinutes);
|
catTimeMap[element.taskType.cat!] =
|
||||||
|
(catTimeMap[element.taskType.cat]! + thisMinutes);
|
||||||
} else {
|
} else {
|
||||||
catTimeMap.putIfAbsent(element.taskType.cat!, () => thisMinutes);
|
catTimeMap.putIfAbsent(element.taskType.cat!, () => thisMinutes);
|
||||||
}
|
}
|
||||||
}else if(thisDate==endDate){
|
|
||||||
if (element.taskType.cat == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
print("Null : ${nextMinutes}");
|
|
||||||
if (catTimeMap.containsKey(element.taskType.cat)) {
|
|
||||||
catTimeMap[element.taskType.cat!] = (catTimeMap[element.taskType.cat]! + nextMinutes);
|
|
||||||
} else {
|
|
||||||
catTimeMap.putIfAbsent(element.taskType.cat!, () => nextMinutes);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((element.startTime.isAfter(catsRange!.start) && element.startTime.isBefore(catsRange!.end)) ||
|
if ((element.startTime.isAfter(catsRange!.start) && element.startTime.isBefore(catsRange!.end)) ||
|
||||||
@@ -299,17 +281,18 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
dailyData.add(CatMapData(key.name, value, barCol));
|
dailyData.add(CatMapData(key.name, value, barCol));
|
||||||
trackedTime += value;
|
trackedTime += value;
|
||||||
});
|
});
|
||||||
|
int untrackedTime = 1440-trackedTime;
|
||||||
print("Tracked time : $trackedTime");
|
print("Tracked time : $trackedTime");
|
||||||
|
|
||||||
dailyData.sort((a, b) {
|
dailyData.sort((a, b) {
|
||||||
return a.name.toLowerCase().compareTo(b.name.toLowerCase());
|
return a.name.toLowerCase().compareTo(b.name.toLowerCase());
|
||||||
});
|
});
|
||||||
dailyData.add(CatMapData("Untracked",1440-trackedTime, Colors.black));
|
if(untrackedTime> 0){dailyData.add(CatMapData("Untracked",1440-trackedTime, Colors.black));}else{}
|
||||||
for (var element in days) {
|
for (var element in days) {
|
||||||
// if(productivtyActs.containsKey(element) && unproductivtyActs.containsKey(element)){
|
// if(productivtyActs.containsKey(element) && unproductivtyActs.containsKey(element)){
|
||||||
int prodActs = (productivtyActs[element] ?? 0);
|
int prodActs = (productivtyActs[element] ?? 0);
|
||||||
int unprodActs = (unproductivtyActs[element] ?? 0);
|
int unprodActs = (unproductivtyActs[element] ?? 0);
|
||||||
double prod = (prodActs / (prodActs + unprodActs)) * 100;
|
double prod = (prodActs / 1440) * 100;
|
||||||
productivityData.add(ProductivityMapData(element, prod));
|
productivityData.add(ProductivityMapData(element, prod));
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
@@ -331,6 +314,7 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
catsData.sort((a, b) => a.time.compareTo(b.time));
|
catsData.sort((a, b) => a.time.compareTo(b.time));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// loadingStats=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void showOfflineSnack() async {
|
void showOfflineSnack() async {
|
||||||
@@ -486,7 +470,7 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
height: 370,
|
height: 400,
|
||||||
padding: EdgeInsets.all(10),
|
padding: EdgeInsets.all(10),
|
||||||
child: Card(
|
child: Card(
|
||||||
elevation: 8,
|
elevation: 8,
|
||||||
@@ -507,15 +491,16 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
}),
|
}),
|
||||||
]),
|
]),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: SfCircularChart(legend: Legend(isVisible: true), series: <CircularSeries>[
|
child: SfCircularChart(legend: Legend(isVisible: true,position: LegendPosition.bottom,overflowMode: LegendItemOverflowMode.wrap), series: <CircularSeries>[
|
||||||
// Render pie chart
|
// Render pie chart
|
||||||
PieSeries<CatMapData, String>(
|
PieSeries<CatMapData, String>(
|
||||||
|
|
||||||
dataSource: dailyData,
|
dataSource: dailyData,
|
||||||
pointColorMapper: (CatMapData data, _) => data.color,
|
pointColorMapper: (CatMapData data, _) => data.color,
|
||||||
xValueMapper: (CatMapData data, _) => data.name,
|
xValueMapper: (CatMapData data, _) => data.name,
|
||||||
yValueMapper: (CatMapData data, _) => data.time,
|
yValueMapper: (CatMapData data, _) => data.time,
|
||||||
dataLabelMapper: (CatMapData sales, _) => MinutesToTimeString(sales.time),
|
dataLabelMapper: (CatMapData sales, _) => MinutesToTimeString(sales.time),
|
||||||
dataLabelSettings: DataLabelSettings(isVisible: true, useSeriesColor: true))
|
dataLabelSettings: DataLabelSettings(isVisible: true, useSeriesColor: true, overflowMode: OverflowMode.shift, showZeroValue: false))
|
||||||
]))
|
]))
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ class _NewActivity extends State<NewActivity> {
|
|||||||
late DateTime init_eTime;
|
late DateTime init_eTime;
|
||||||
late String init_selectedTask;
|
late String init_selectedTask;
|
||||||
_NewActivity({DateTime? eTime, DateTime? sTime, String? metadata, String? selectedCat}){
|
_NewActivity({DateTime? eTime, DateTime? sTime, String? metadata, String? selectedCat}){
|
||||||
|
editing = sTime != null && eTime!=null && selectedCat!=null;
|
||||||
|
|
||||||
this.init_sTime=this.startTime = sTime ?? DateTime.now();
|
this.init_sTime=this.startTime = sTime ?? DateTime.now();
|
||||||
this.init_eTime=this.endTime = eTime ??DateTime.now().add(Duration(minutes: 30));
|
this.init_eTime=this.endTime = eTime ??DateTime.now().add(Duration(minutes: 30));
|
||||||
this.metadataController.text = metadata ?? "";
|
this.metadataController.text = metadata ?? "";
|
||||||
@@ -38,6 +40,9 @@ class _NewActivity extends State<NewActivity> {
|
|||||||
TextEditingController metadataController = TextEditingController();
|
TextEditingController metadataController = TextEditingController();
|
||||||
late String selectedCat;
|
late String selectedCat;
|
||||||
|
|
||||||
|
|
||||||
|
bool editing=false;
|
||||||
|
|
||||||
List<String> getActivities(){
|
List<String> getActivities(){
|
||||||
List<String> _cats = [];
|
List<String> _cats = [];
|
||||||
print(User.taskTypes[0].name + " : " + selectedCat);
|
print(User.taskTypes[0].name + " : " + selectedCat);
|
||||||
@@ -53,7 +58,7 @@ class _NewActivity extends State<NewActivity> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(title: Text('New Activity')),
|
appBar: AppBar(title: Text((editing) ? 'Edit Activity':'New Activity')),
|
||||||
body:Column(
|
body:Column(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
@@ -283,10 +288,13 @@ class _NewActivity extends State<NewActivity> {
|
|||||||
shape: StadiumBorder()
|
shape: StadiumBorder()
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
if(editing){
|
||||||
|
edit_action();
|
||||||
|
}else {
|
||||||
add_action();
|
add_action();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
child: Text('Add Entry',
|
child: Text((editing) ? 'Apply':'Add Activity',
|
||||||
style: TextStyle(fontSize: 20))))),
|
style: TextStyle(fontSize: 20))))),
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
@@ -331,6 +339,24 @@ class _NewActivity extends State<NewActivity> {
|
|||||||
print("Failed adding new activity");
|
print("Failed adding new activity");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void edit_action() async{
|
||||||
|
print('adding Task Type : $selectedCat at $startTime - $endTime');
|
||||||
|
bool failed=false;
|
||||||
|
await User.UserOperations.editActivity(init_sTime,init_eTime,selectedCat,startTime, endTime,metadata:metadataController.text, onOverlap: (overlapCount){
|
||||||
|
showAlertDialog(context, 'Error editing activity', 'Cannot add activity between ${dateFormat.format(startTime)} - ${dateFormat.format(endTime)}, $overlapCount activities are already added within this time range');
|
||||||
|
failed=true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if(!failed) {
|
||||||
|
print("popping : ${navigatorKey.currentWidget?.toStringShort() ?? "n/a"}");
|
||||||
|
Navigator.of(navigatorKey.currentContext!).popUntil((route){
|
||||||
|
return route.isFirst;
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
print("Failed editing new activity");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String _printDuration(Duration duration) {
|
String _printDuration(Duration duration) {
|
||||||
|
|||||||
Reference in New Issue
Block a user