import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:intl/intl.dart';
|
|
import 'package:sqflite_pust_local_notification/controllers/task_controller.dart';
|
|
import 'package:sqflite_pust_local_notification/models/task_model.dart';
|
|
import 'package:sqflite_pust_local_notification/utils/colors.dart';
|
|
import 'package:sqflite_pust_local_notification/utils/textStyles.dart';
|
|
import 'package:sqflite_pust_local_notification/widgets/my_button.dart';
|
|
import '../utils/assets_string.dart';
|
|
import '../widgets/my_input_field.dart';
|
|
|
|
class AddTaskScreen extends StatefulWidget {
|
|
const AddTaskScreen({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
State<AddTaskScreen> createState() => _AddTaskScreenState();
|
|
}
|
|
|
|
class _AddTaskScreenState extends State<AddTaskScreen> {
|
|
final TaskController _taskController = Get.put(TaskController());
|
|
final TextEditingController _titleController = TextEditingController();
|
|
final TextEditingController _noteController = TextEditingController();
|
|
DateTime _selectedDate = DateTime.now();
|
|
String _endTime = "9:30 PM";
|
|
String _startTime = DateFormat("hh:mm a").format(DateTime.now()).toString();
|
|
int _selectedRemind = 5;
|
|
List<int> remindList = [
|
|
5,
|
|
10,
|
|
15,
|
|
20,
|
|
];
|
|
|
|
String _selectedRepeat = "None";
|
|
List<String> repeatList = [
|
|
"None",
|
|
"Daily",
|
|
"Weekly",
|
|
"Monthly",
|
|
];
|
|
|
|
int _selectedColor = 0;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
backgroundColor: context.theme.backgroundColor,
|
|
appBar: _appBar(context),
|
|
body: Container(
|
|
padding: const EdgeInsets.only(left: 20, right: 20),
|
|
child: SingleChildScrollView(
|
|
child: Column(children: [
|
|
Text(
|
|
"Add Task",
|
|
style: headingStyle,
|
|
),
|
|
MyInputField(
|
|
title: "Title",
|
|
hint: "Enter your title",
|
|
controller: _titleController,
|
|
),
|
|
MyInputField(
|
|
title: "Note",
|
|
hint: "Enter your note",
|
|
controller: _noteController,
|
|
),
|
|
MyInputField(
|
|
title: "Date",
|
|
hint: DateFormat.yMd().format(_selectedDate),
|
|
widget: IconButton(
|
|
icon: Icon(Icons.calendar_today_outlined),
|
|
color: Colors.grey,
|
|
onPressed: () {
|
|
_getDateFromUser();
|
|
},
|
|
),
|
|
),
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: MyInputField(
|
|
title: "Start Time",
|
|
hint: _startTime,
|
|
widget: IconButton(
|
|
icon: Icon(Icons.access_time_outlined),
|
|
onPressed: () {
|
|
_getTimeFromUser(isStartTime: true);
|
|
},
|
|
),
|
|
)),
|
|
SizedBox(
|
|
width: 10,
|
|
),
|
|
Expanded(
|
|
child: MyInputField(
|
|
title: "End Time",
|
|
hint: _endTime,
|
|
widget: IconButton(
|
|
icon: Icon(Icons.access_time_outlined),
|
|
onPressed: () {
|
|
_getTimeFromUser(isStartTime: false);
|
|
},
|
|
),
|
|
)),
|
|
],
|
|
),
|
|
MyInputField(
|
|
title: "Remind",
|
|
hint: "$_selectedRemind minutes early",
|
|
widget: DropdownButton(
|
|
icon: Icon(
|
|
Icons.keyboard_arrow_down,
|
|
color: Colors.grey,
|
|
),
|
|
iconSize: 31,
|
|
elevation: 4,
|
|
style: subTitleStyle,
|
|
underline: Container(height: 0),
|
|
onChanged: (String? newValue) {
|
|
setState(() {
|
|
_selectedRemind = int.parse(newValue!);
|
|
});
|
|
},
|
|
items: remindList.map<DropdownMenuItem<String>>((int value) {
|
|
return DropdownMenuItem<String>(
|
|
value: value.toString(),
|
|
child: Text(value.toString()),
|
|
);
|
|
}).toList(),
|
|
),
|
|
),
|
|
MyInputField(
|
|
title: "Repeat",
|
|
hint: "$_selectedRepeat",
|
|
widget: DropdownButton(
|
|
icon: Icon(
|
|
Icons.keyboard_arrow_down,
|
|
color: Colors.grey,
|
|
),
|
|
iconSize: 31,
|
|
elevation: 4,
|
|
style: subTitleStyle,
|
|
underline: Container(height: 0),
|
|
onChanged: (String? newValue) {
|
|
setState(() {
|
|
_selectedRepeat = newValue!;
|
|
});
|
|
},
|
|
items: repeatList.map<DropdownMenuItem<String>>((String value) {
|
|
return DropdownMenuItem<String>(
|
|
value: value.toString(),
|
|
child: Text(
|
|
value.toString(),
|
|
style: TextStyle(color: Colors.grey),
|
|
),
|
|
);
|
|
}).toList(),
|
|
),
|
|
),
|
|
SizedBox(
|
|
height: 10,
|
|
),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
_colorPallete(),
|
|
MyButton(label: "Create Task", onTap: () => _validateDate())
|
|
],
|
|
)
|
|
]),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
_validateDate() {
|
|
if (_titleController.text.isNotEmpty && _noteController.text.isNotEmpty) {
|
|
_addTaskToDb();
|
|
Get.back();
|
|
} else if (_titleController.text.isEmpty || _noteController.text.isEmpty) {
|
|
Get.snackbar(
|
|
"Required",
|
|
"All fields are required",
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
backgroundColor: Colors.white,
|
|
colorText: pinkClr,
|
|
icon: Icon(
|
|
Icons.warning_amber_rounded,
|
|
color: Colors.red,
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
_addTaskToDb() async {
|
|
int value = await _taskController.addtask(
|
|
task: TaskModel(
|
|
note: _noteController.text,
|
|
title: _titleController.text,
|
|
date: DateFormat.yMd().format(_selectedDate),
|
|
startTime: _startTime,
|
|
endTime: _endTime,
|
|
remind: _selectedRemind,
|
|
repeat: _selectedRepeat,
|
|
color: _selectedColor,
|
|
isCompleted: 0));
|
|
|
|
print("Task Added :" + value.toString());
|
|
}
|
|
|
|
_colorPallete() {
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
"Color",
|
|
style: titleStyle,
|
|
),
|
|
SizedBox(
|
|
height: 8,
|
|
),
|
|
Wrap(
|
|
children: List<Widget>.generate(3, (int index) {
|
|
return GestureDetector(
|
|
onTap: () {
|
|
setState(() {
|
|
_selectedColor = index;
|
|
});
|
|
},
|
|
child: Padding(
|
|
padding: const EdgeInsets.only(right: 8.0),
|
|
child: CircleAvatar(
|
|
child: _selectedColor == index
|
|
? Icon(
|
|
Icons.done,
|
|
color: Colors.white,
|
|
size: 16,
|
|
)
|
|
: Container(),
|
|
radius: 14,
|
|
backgroundColor: index == 0
|
|
? primaryClr
|
|
: index == 1
|
|
? pinkClr
|
|
: yellowClr,
|
|
),
|
|
),
|
|
);
|
|
}),
|
|
)
|
|
],
|
|
);
|
|
}
|
|
|
|
_appBar(BuildContext context) {
|
|
return AppBar(
|
|
elevation: 0,
|
|
backgroundColor: context.theme.backgroundColor,
|
|
leading: GestureDetector(
|
|
onTap: () {
|
|
Get.back();
|
|
},
|
|
child: Icon(Icons.arrow_back_ios,
|
|
size: 20, color: Get.isDarkMode ? Colors.white : Colors.black),
|
|
),
|
|
actions: [
|
|
CircleAvatar(
|
|
backgroundImage: AssetImage(profile),
|
|
),
|
|
SizedBox(
|
|
width: 20,
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
_getDateFromUser() async {
|
|
DateTime? _pickerDate = await showDatePicker(
|
|
context: context,
|
|
initialDate: DateTime.now(),
|
|
firstDate: DateTime(2015),
|
|
lastDate: DateTime(3000));
|
|
|
|
if (_pickerDate != null) {
|
|
setState(() {
|
|
_selectedDate = _pickerDate;
|
|
});
|
|
} else {
|
|
setState(() {
|
|
_selectedDate = _selectedDate;
|
|
});
|
|
}
|
|
}
|
|
|
|
_getTimeFromUser({required bool isStartTime}) async {
|
|
var pickedTime = await _showTimePicker();
|
|
String _formatedTime = pickedTime.format(context);
|
|
if (pickedTime == null) {
|
|
} else if (isStartTime == true) {
|
|
setState(() {
|
|
_startTime = _formatedTime;
|
|
});
|
|
} else if (isStartTime == false) {
|
|
setState(() {
|
|
_endTime = _formatedTime;
|
|
});
|
|
}
|
|
}
|
|
|
|
_showTimePicker() {
|
|
return showTimePicker(
|
|
context: context,
|
|
initialEntryMode: TimePickerEntryMode.input,
|
|
initialTime: TimeOfDay(
|
|
//_startTime ---->
|
|
hour: int.parse(_startTime.split(":")[0]),
|
|
minute: int.parse(_startTime.split(":")[1].split(" ")[0])));
|
|
}
|
|
}
|