271 lines
9.9 KiB
Dart
271 lines
9.9 KiB
Dart
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
|
|
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
|
import 'package:intl/intl.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:tasktracker/Data.dart';
|
|
import 'package:tasktracker/NewProject.dart';
|
|
import 'package:tasktracker/NotificationsManager.dart';
|
|
import 'main.dart';
|
|
import 'User.dart' as User;
|
|
|
|
class Dialogs{
|
|
static String syncingMessage = "Syncing";
|
|
|
|
static showAlertDialog(BuildContext context, String title, String message) {
|
|
// set up the button
|
|
Widget okButton = TextButton(
|
|
child: Text("OK"),
|
|
onPressed: () {
|
|
Navigator.of(context).pop();
|
|
},
|
|
);
|
|
|
|
// set up the AlertDialog
|
|
AlertDialog alert = AlertDialog(
|
|
backgroundColor: Color(0xFF1F1F1F),
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
|
|
title: Text(title),
|
|
content: Text(message),
|
|
actions: [
|
|
okButton,
|
|
],
|
|
|
|
);
|
|
|
|
// show the dialog
|
|
showDialog(
|
|
context: context,
|
|
builder: (BuildContext context) {
|
|
return alert;
|
|
},
|
|
);
|
|
}
|
|
|
|
static bool showing = false;
|
|
static BuildContext? context;
|
|
static List<Widget> popupsOpened=[];
|
|
static waiting( String title){
|
|
showing=true;
|
|
context=navigatorKey.currentContext;
|
|
if(context!=null) {
|
|
return showDialog(
|
|
context: context!,
|
|
barrierDismissible: false,
|
|
routeSettings: const RouteSettings(name: "Progress"),
|
|
builder: (BuildContext context) {
|
|
return AlertDialog(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
|
|
backgroundColor: Color(0xaa101010),
|
|
title: Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
SpinKitChasingDots(color: Colors.green),
|
|
Expanded(child: Text(syncingMessage,textAlign: TextAlign.center,)),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
static ongoing() async{
|
|
List<String>? data= await User.getOngoingData();
|
|
if(data == null){return;}
|
|
|
|
context=navigatorKey.currentContext;
|
|
if(context!=null) {
|
|
return showDialog(
|
|
context: context!,
|
|
routeSettings: const RouteSettings(name: "Ongoing"),
|
|
builder: (BuildContext context) {
|
|
return AlertDialog(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
|
|
backgroundColor: Color(0xFF101010),
|
|
title: Text('Take Action for Ongoing Activity'),
|
|
content: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
Text(''),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text('Task : ${data[0]}'),
|
|
Text('Description: ${data[1]}'),
|
|
Text('Started Time: ${DateFormat("MM-dd hh:mm").format(DateTime.parse(data[2]))}')
|
|
],
|
|
),
|
|
|
|
],
|
|
),
|
|
actions: [
|
|
|
|
MaterialButton(onPressed: (){Navigator.of(context).pop();}, child: Text('Cancel', style:TextStyle(color: Colors.grey))),
|
|
MaterialButton(onPressed: (){
|
|
User.CancelOngoingActivity();
|
|
NotificationManager.RescheduleNotifications();
|
|
Navigator.of(context).pop();
|
|
}, child:Text('Remove', style:TextStyle(color: Colors.redAccent))),
|
|
MaterialButton(
|
|
onPressed: (){
|
|
User.StopActivityTimer();
|
|
NotificationManager.RescheduleNotifications();
|
|
Navigator.of(context).pop();
|
|
|
|
},
|
|
child: Text('Complete', style:TextStyle(color: Colors.green)),
|
|
),
|
|
|
|
],
|
|
);
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
static showProjectDetails(Project project) async{
|
|
context=navigatorKey.currentContext;
|
|
List<Widget> stepWidgets = [];
|
|
for (ProjectStep value in project.steps) {
|
|
stepWidgets.add(Text('[${value.progress}%] ${value.eta}h -> ${value.stepName}',style: TextStyle(fontSize: 14)));
|
|
}
|
|
if(context!=null) {
|
|
return showDialog(
|
|
context: context!,
|
|
builder: (BuildContext context) {
|
|
return AlertDialog(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
|
|
backgroundColor: Color(0xFF1C1C1C),
|
|
title: Text(project.name),
|
|
content: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text("Deadline : ${DateFormat("yyyy-MM-dd").format(project.deadline)}"),
|
|
Divider(),
|
|
Text("Steps",style: TextStyle(fontWeight: FontWeight.bold)),
|
|
SizedBox(height: 20),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: stepWidgets,
|
|
),
|
|
SizedBox(height: 30,),
|
|
Text("Estimate Time : ${project.eta}")
|
|
],
|
|
),
|
|
actions: [
|
|
MaterialButton(
|
|
onPressed: (){
|
|
User.UserOperations.deleteProject(project.name);
|
|
Navigator.of(context).pop();
|
|
},
|
|
child: Text('Delete', style:TextStyle(color: Colors.red)),
|
|
),
|
|
MaterialButton(
|
|
onPressed: (){
|
|
Navigator.of(context).pop();
|
|
Navigator.of(context).push(MaterialPageRoute(builder: (context)=>NewProject(multiline: project.steps.isNotEmpty, projectName: project.name, selectedCategory: project.cat!.name,m_steps: project.steps,)));
|
|
},
|
|
child: Text('Edit', style:TextStyle(color: Colors.yellow)),
|
|
),
|
|
MaterialButton(
|
|
onPressed: (){
|
|
Navigator.of(context).pop();
|
|
},
|
|
child: Text('Close', style:TextStyle(color: Colors.white)),
|
|
)
|
|
],
|
|
);
|
|
}
|
|
);
|
|
}else{
|
|
print('context is null');
|
|
}
|
|
}
|
|
|
|
static completeStepDialog(Project project,Function(DateTime) onComplete, ProjectStep step) async{
|
|
context=navigatorKey.currentContext;
|
|
DateTime finishedDate = DateTime.now();
|
|
DateFormat dateFormat = DateFormat('yyyy-MM-dd');
|
|
if(context!=null) {
|
|
// return StatefulBuilder(builder: (context, setState) {
|
|
return showDialog(
|
|
context: context!,
|
|
builder: (BuildContext context) {
|
|
return StatefulBuilder(builder: (context, setState)
|
|
{
|
|
return AlertDialog(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
|
|
backgroundColor: Color(0xFF1C1C1C),
|
|
title: Text('Completed ${step.stepName}?'),
|
|
content: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text('When did you complete?'),
|
|
SizedBox(height: 20,),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
InkWell(
|
|
onTap: () {
|
|
DatePicker.showDatePicker(context,
|
|
showTitleActions: true,
|
|
theme: DatePickerTheme(), onChanged: (date) {
|
|
// print('change $date');
|
|
}, onConfirm: (date) {
|
|
setState(() {
|
|
finishedDate = date;
|
|
});
|
|
}, currentTime: finishedDate, locale: LocaleType.en);
|
|
setState(() {});
|
|
},
|
|
child: Container(
|
|
decoration: BoxDecoration(
|
|
color: Colors.black26,
|
|
borderRadius: BorderRadius.circular(15)
|
|
),
|
|
padding: EdgeInsets.symmetric(horizontal: 25, vertical: 10),
|
|
child: Text((dateFormat.format(finishedDate) ==dateFormat.format(DateTime.now())) ? 'Today' : dateFormat.format(finishedDate), style: TextStyle(color: Colors.blue),),
|
|
),
|
|
),
|
|
],
|
|
)
|
|
],
|
|
),
|
|
actions: [
|
|
MaterialButton(
|
|
onPressed: () {
|
|
Navigator.of(context).pop();
|
|
},
|
|
child: Text('No', style: TextStyle(color: Colors.red)),
|
|
),
|
|
MaterialButton(
|
|
color: Colors.green,
|
|
onPressed: () {
|
|
User.UserOperations.CompleteProjectStep(project, step, finishedDate);
|
|
Navigator.of(context).pop();
|
|
},
|
|
child: Text('Complete', style: TextStyle(color: Colors.white)),
|
|
),
|
|
],
|
|
);
|
|
});
|
|
}
|
|
);
|
|
}else{
|
|
print('context is null');
|
|
}
|
|
}
|
|
|
|
static hide(){
|
|
showing=false;
|
|
Navigator.of(navigatorKey.currentContext!).popUntil((route){
|
|
return route.settings.name!="Progress";
|
|
});
|
|
}
|
|
} |