rollback to material + app usage init
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
|
||||
<application
|
||||
android:label="Task Tracker"
|
||||
android:name="${applicationName}"
|
||||
|
||||
230
lib/Data.dart
230
lib/Data.dart
@@ -8,8 +8,8 @@ import 'package:uuid/uuid.dart';
|
||||
import 'theme_provider.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'User.dart' as User;
|
||||
class Category{
|
||||
|
||||
class Category {
|
||||
Category(this.category_id, this.name, this.color, this.productive);
|
||||
|
||||
String category_id;
|
||||
@@ -23,9 +23,8 @@ class Category{
|
||||
static String colProductive = "productive";
|
||||
}
|
||||
|
||||
class TaskType{
|
||||
|
||||
TaskType(this.id, this.name, this.category,{this.relatedProject, this.cat});
|
||||
class TaskType {
|
||||
TaskType(this.id, this.name, this.category, {this.relatedProject, this.cat});
|
||||
|
||||
String id;
|
||||
String name;
|
||||
@@ -34,18 +33,21 @@ class TaskType{
|
||||
Project? relatedProject;
|
||||
|
||||
static String colId = "id";
|
||||
static String colName="name";
|
||||
static String colName = "name";
|
||||
static String colCategory = "category_id";
|
||||
static String colRelatedProject = "related_project";
|
||||
|
||||
static String getDisplayName(TaskType taskType){
|
||||
return (taskType.name + ((taskType.relatedProject != null) ? ' [${taskType.relatedProject!.name}]' : ''));
|
||||
static String getDisplayName(TaskType taskType) {
|
||||
return (taskType.name +
|
||||
((taskType.relatedProject != null)
|
||||
? ' [${taskType.relatedProject!.name}]'
|
||||
: ''));
|
||||
}
|
||||
}
|
||||
|
||||
class Activity{
|
||||
|
||||
Activity(this.taskType, this.startTime, this.endTime, {this.metadata,DateTime? tEndTime,DateTime? tStartTime}){
|
||||
class Activity {
|
||||
Activity(this.taskType, this.startTime, this.endTime,
|
||||
{this.metadata, DateTime? tEndTime, DateTime? tStartTime}) {
|
||||
trueStartTime = tStartTime ?? startTime;
|
||||
trueEndTime = tEndTime ?? endTime;
|
||||
}
|
||||
@@ -56,65 +58,66 @@ class Activity{
|
||||
DateTime endTime;
|
||||
String? metadata;
|
||||
|
||||
Activity.fromJson(Map<String,dynamic> json): taskType=json['taskType'], startTime=json['sTime'], endTime=json['eTime'];
|
||||
Activity.fromJson(Map<String, dynamic> json)
|
||||
: taskType = json['taskType'],
|
||||
startTime = json['sTime'],
|
||||
endTime = json['eTime'];
|
||||
|
||||
Map<String, dynamic> toJson()=>{
|
||||
'taskType': taskType,
|
||||
'sTime':startTime,
|
||||
'eTime':endTime
|
||||
};
|
||||
Map<String, dynamic> toJson() =>
|
||||
{'taskType': taskType, 'sTime': startTime, 'eTime': endTime};
|
||||
|
||||
static String colType = "type";
|
||||
static String colStartTime = "s_time";
|
||||
static String colEndTime = "e_time";
|
||||
static String colMetadata= "metadata";
|
||||
static String colMetadata = "metadata";
|
||||
}
|
||||
|
||||
class InitialData{
|
||||
static List<TaskType> getTaskTypes(String username){
|
||||
List<TaskType> tasks =[
|
||||
TaskType(username + 'Sleep','Sleep', 'Relax'),
|
||||
TaskType(username + 'Physics','Physics', 'Study'),
|
||||
TaskType(username + 'History','History','Study'),
|
||||
TaskType(username + 'Football','Football', 'Play'),
|
||||
TaskType(username + 'At work','At work', 'Work'),
|
||||
TaskType(username + 'Chores','Chores', 'Daily Activities'),
|
||||
TaskType(username + 'Eat','Eat','Daily Activities'),
|
||||
TaskType(username + 'Hang out','Hang out', 'Social')
|
||||
];
|
||||
class InitialData {
|
||||
static List<TaskType> getTaskTypes(String username) {
|
||||
List<TaskType> tasks = [
|
||||
TaskType(username + 'Sleep', 'Sleep', 'Relax'),
|
||||
TaskType(username + 'Physics', 'Physics', 'Study'),
|
||||
TaskType(username + 'History', 'History', 'Study'),
|
||||
TaskType(username + 'Football', 'Football', 'Play'),
|
||||
TaskType(username + 'At work', 'At work', 'Work'),
|
||||
TaskType(username + 'Chores', 'Chores', 'Daily Activities'),
|
||||
TaskType(username + 'Eat', 'Eat', 'Daily Activities'),
|
||||
TaskType(username + 'Hang out', 'Hang out', 'Social')
|
||||
];
|
||||
return tasks;
|
||||
}
|
||||
|
||||
static List<Category> getCategories(String username){
|
||||
static List<Category> getCategories(String username) {
|
||||
List<Category> cats = [
|
||||
Category(username+'Relax','Relax', '#555555', false),
|
||||
Category(username+'Daily Activities','Daily Activities', '#009955',false),
|
||||
Category(username+'Study','Study', '#00FF00', true),
|
||||
Category(username+'Play','Play', '#FF0000', false),
|
||||
Category(username+'Work','Work', '#00AAFF', true),
|
||||
Category(username+'Social','Social', '#00AAAA', false)
|
||||
Category(username + 'Relax', 'Relax', '#555555', false),
|
||||
Category(
|
||||
username + 'Daily Activities', 'Daily Activities', '#009955', false),
|
||||
Category(username + 'Study', 'Study', '#00FF00', true),
|
||||
Category(username + 'Play', 'Play', '#FF0000', false),
|
||||
Category(username + 'Work', 'Work', '#00AAFF', true),
|
||||
Category(username + 'Social', 'Social', '#00AAAA', false)
|
||||
];
|
||||
|
||||
return cats;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Queries{
|
||||
Queries(this.link,this.data);
|
||||
class Queries {
|
||||
Queries(this.link, this.data);
|
||||
|
||||
String link;
|
||||
String data;
|
||||
|
||||
static String colLink= "file";
|
||||
static String colLink = "file";
|
||||
static String colData = "data";
|
||||
}
|
||||
|
||||
class Project{
|
||||
Project(this.name, this.category, this.steps,this.eta, this.deadline,{this.cat});
|
||||
class Project {
|
||||
Project(this.name, this.category, this.steps, this.eta, this.deadline,
|
||||
{this.cat});
|
||||
|
||||
String name;
|
||||
String getName()=> name.replaceAll(User.username, "");
|
||||
String getName() => name.replaceAll(User.username, "");
|
||||
String category;
|
||||
Category? cat;
|
||||
List<ProjectStep> steps;
|
||||
@@ -122,23 +125,29 @@ class Project{
|
||||
DateTime deadline;
|
||||
|
||||
static String colName = "name";
|
||||
static String colCat="category_id";
|
||||
static String colCat = "category_id";
|
||||
static String colSteps = "steps";
|
||||
static String colDeadline = "deadline";
|
||||
static String colEta = "eta";
|
||||
}
|
||||
|
||||
class ProjectStep{
|
||||
ProjectStep(this.stepName,this.eta,this.progress);
|
||||
class ProjectStep {
|
||||
ProjectStep(this.stepName, this.eta, this.progress);
|
||||
|
||||
ProjectStep.fromJson(Map<String,dynamic> json): stepName=json['name'], eta=json['eta'], progress=json['progress'], finishedDate=(json['finishedDate']!=null) ? DateTime.parse(json['finishedDate']) : null;
|
||||
ProjectStep.fromJson(Map<String, dynamic> json)
|
||||
: stepName = json['name'],
|
||||
eta = json['eta'],
|
||||
progress = json['progress'],
|
||||
finishedDate = (json['finishedDate'] != null)
|
||||
? DateTime.parse(json['finishedDate'])
|
||||
: null;
|
||||
|
||||
Map<String, dynamic> toJson()=>{
|
||||
'name': stepName,
|
||||
'eta':eta,
|
||||
'progress':progress,
|
||||
if(finishedDate!=null) 'finishedDate':finishedDate.toString()
|
||||
};
|
||||
Map<String, dynamic> toJson() => {
|
||||
'name': stepName,
|
||||
'eta': eta,
|
||||
'progress': progress,
|
||||
if (finishedDate != null) 'finishedDate': finishedDate.toString()
|
||||
};
|
||||
|
||||
String stepName;
|
||||
int eta;
|
||||
@@ -146,8 +155,7 @@ class ProjectStep{
|
||||
DateTime? finishedDate;
|
||||
}
|
||||
|
||||
class Journal{
|
||||
|
||||
class Journal {
|
||||
Journal(this.id, this.day, {this.title, this.description});
|
||||
|
||||
String id;
|
||||
@@ -159,8 +167,9 @@ class Journal{
|
||||
static String colDescription = 'Desc';
|
||||
}
|
||||
|
||||
class Todo{
|
||||
Todo(this.id, this.category,this.metadata, this.dueDate, {this.notificationTime, this.task});
|
||||
class Todo {
|
||||
Todo(this.id, this.category, this.metadata, this.dueDate,
|
||||
{this.notificationTime, this.task});
|
||||
|
||||
String id;
|
||||
String category;
|
||||
@@ -175,101 +184,128 @@ class Todo{
|
||||
static String colNotificationTime = 'notification_time';
|
||||
}
|
||||
|
||||
|
||||
class Settings{
|
||||
static Future<String> UUID() async{
|
||||
class Settings {
|
||||
static Future<String> UUID() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
if(prefs.containsKey('uuid')){
|
||||
if (prefs.containsKey('uuid')) {
|
||||
return await Future.value(prefs.getString('uuid'));
|
||||
}else{
|
||||
var uuid = Uuid();
|
||||
String _uuid = uuid.v4();
|
||||
// if(Platform.isAndroid){
|
||||
//
|
||||
// }
|
||||
await prefs.setString('uuid',_uuid);
|
||||
return Future.value(_uuid);
|
||||
} else {
|
||||
var uuid = Uuid();
|
||||
String _uuid = uuid.v4();
|
||||
// if(Platform.isAndroid){
|
||||
//
|
||||
// }
|
||||
await prefs.setString('uuid', _uuid);
|
||||
return Future.value(_uuid);
|
||||
}
|
||||
}
|
||||
|
||||
static Future<void> setTheme(int value) async{
|
||||
static Future<void> setTheme(int value) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setInt("theme", value);
|
||||
}
|
||||
|
||||
static String notification_key= "notification_interval";
|
||||
static String notification_key = "notification_interval";
|
||||
static String adaptive_notification_key = "adaptive_notification";
|
||||
static String untracked_unprod_key = "untracked_unproductive";
|
||||
static String auto_log_key = "auto_log";
|
||||
|
||||
static Future<int> getNotificationInterval() async{
|
||||
static Future<int> getNotificationInterval() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
|
||||
int _value = 1;
|
||||
if(prefs.containsKey(notification_key)){
|
||||
if (prefs.containsKey(notification_key)) {
|
||||
_value = await prefs.getInt(notification_key) ?? 1;
|
||||
}else{
|
||||
prefs.setInt(notification_key,_value);
|
||||
} else {
|
||||
prefs.setInt(notification_key, _value);
|
||||
}
|
||||
|
||||
return _value;
|
||||
}
|
||||
|
||||
static Future<void> setNotificationInterval(int value) async{
|
||||
static Future<void> setNotificationInterval(int value) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
prefs.setInt(notification_key, value);
|
||||
}
|
||||
|
||||
static List<String> notificationOptions = <String>['Off','1 hour', '2 hour', '3 hour', '4 hour', '5 hour', '6 hour'];
|
||||
static List<String> notificationOptions = <String>[
|
||||
'Off',
|
||||
'1 hour',
|
||||
'2 hour',
|
||||
'3 hour',
|
||||
'4 hour',
|
||||
'5 hour',
|
||||
'6 hour'
|
||||
];
|
||||
static bool adaptiveNotificationAvailable() {
|
||||
List<String> dates = [];
|
||||
if(User.activities.length < 10){
|
||||
return false;
|
||||
}else{
|
||||
for (var element in User.activities) {
|
||||
String thisDate = DateFormat("MM/dd").format(element.startTime);
|
||||
if(!dates.contains(thisDate)){
|
||||
dates.add(thisDate);
|
||||
}
|
||||
List<String> dates = [];
|
||||
if (User.activities.length < 10) {
|
||||
return false;
|
||||
} else {
|
||||
for (var element in User.activities) {
|
||||
String thisDate = DateFormat("MM/dd").format(element.startTime);
|
||||
if (!dates.contains(thisDate)) {
|
||||
dates.add(thisDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (dates.length > 2);
|
||||
return (dates.length > 2);
|
||||
}
|
||||
|
||||
static Future<bool> getAdaptiveNotification() async{
|
||||
static Future<bool> getAdaptiveNotification() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
|
||||
bool _value = true;
|
||||
if(prefs.containsKey(notification_key)){
|
||||
if (prefs.containsKey(notification_key)) {
|
||||
_value = await prefs.getBool(adaptive_notification_key) ?? true;
|
||||
}else{
|
||||
prefs.setBool(adaptive_notification_key,_value);
|
||||
} else {
|
||||
prefs.setBool(adaptive_notification_key, _value);
|
||||
}
|
||||
|
||||
return _value;
|
||||
}
|
||||
|
||||
static Future<void> setAdaptiveNotification(bool value) async{
|
||||
static Future<void> setAdaptiveNotification(bool value) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
prefs.setBool(adaptive_notification_key, value);
|
||||
}
|
||||
|
||||
static Future<bool> getUntrackedUnproductive() async{
|
||||
static Future<bool> getUntrackedUnproductive() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
|
||||
bool _value = true;
|
||||
if(prefs.containsKey(untracked_unprod_key)){
|
||||
if (prefs.containsKey(untracked_unprod_key)) {
|
||||
_value = await prefs.getBool(untracked_unprod_key) ?? true;
|
||||
}else{
|
||||
prefs.setBool(untracked_unprod_key,_value);
|
||||
} else {
|
||||
prefs.setBool(untracked_unprod_key, _value);
|
||||
}
|
||||
|
||||
return _value;
|
||||
}
|
||||
|
||||
static Future<void> setUntrackedUnproductive(bool value) async{
|
||||
static Future<bool> getAutoLog() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
|
||||
bool _value = true;
|
||||
if (prefs.containsKey(auto_log_key)) {
|
||||
_value = await prefs.getBool(auto_log_key) ?? true;
|
||||
} else {
|
||||
prefs.setBool(auto_log_key, _value);
|
||||
}
|
||||
|
||||
return _value;
|
||||
}
|
||||
|
||||
static Future<void> setUntrackedUnproductive(bool value) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
prefs.setBool(untracked_unprod_key, value);
|
||||
}
|
||||
|
||||
static Future<void> setAutoLog(bool value) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
prefs.setBool(auto_log_key, value);
|
||||
}
|
||||
}
|
||||
|
||||
final settings = Settings();
|
||||
@@ -11,20 +11,20 @@ class BehaviourSettings extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _BehaviourSettingsState extends State<BehaviourSettings> {
|
||||
|
||||
bool untracked_unprod = true;
|
||||
bool autoUsage = true;
|
||||
|
||||
@override void initState() {
|
||||
@override
|
||||
void initState() {
|
||||
// TODO: implement initState
|
||||
super.initState();
|
||||
init();
|
||||
}
|
||||
|
||||
void init() async{
|
||||
untracked_unprod=await Settings.getUntrackedUnproductive();
|
||||
setState(() {
|
||||
|
||||
});
|
||||
void init() async {
|
||||
untracked_unprod = await Settings.getUntrackedUnproductive();
|
||||
autoUsage = await Settings.getAutoLog();
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
TextEditingController untrackedGapSettings = TextEditingController();
|
||||
@@ -36,65 +36,77 @@ class _BehaviourSettingsState extends State<BehaviourSettings> {
|
||||
appBar: AppBar(title: Text('Behaviour Settings')),
|
||||
body: SafeArea(
|
||||
child: Container(
|
||||
child:Column(
|
||||
children: [
|
||||
ListTile(
|
||||
title:Text("Count untracked time as unproductive"),
|
||||
subtitle: Text("Not tracking = Not productive"),
|
||||
trailing: Switch.adaptive(value: untracked_unprod, onChanged: (val){
|
||||
untracked_unprod=val;
|
||||
setState(() {
|
||||
Settings.setUntrackedUnproductive(val);
|
||||
});
|
||||
setState(() {
|
||||
|
||||
});
|
||||
}),
|
||||
),
|
||||
//TODO
|
||||
ListTile(
|
||||
title:Text("Untracked Delay Threshold"),
|
||||
subtitle: Text("Makes it easier to fill in the gaps"),
|
||||
trailing:
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if(untrackedGapValue> 0)InkWell(onTap: (){
|
||||
untrackedGapSettings.text = (untrackedGapValue-1).toString();
|
||||
setState(() {
|
||||
|
||||
});
|
||||
},
|
||||
child : Container(margin: EdgeInsets.all(10),child: Text('-')),),
|
||||
SizedBox(
|
||||
width: 25,
|
||||
height: 30,
|
||||
child: TextField(
|
||||
textAlign: TextAlign.center,
|
||||
controller: untrackedGapSettings,
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: <TextInputFormatter>[
|
||||
FilteringTextInputFormatter.digitsOnly
|
||||
],),
|
||||
child: Column(
|
||||
children: [
|
||||
ListTile(
|
||||
title: Text("Count untracked time as unproductive"),
|
||||
subtitle: Text("Not tracking = Not productive"),
|
||||
trailing: Switch.adaptive(
|
||||
value: untracked_unprod,
|
||||
onChanged: (val) {
|
||||
untracked_unprod = val;
|
||||
setState(() {
|
||||
Settings.setUntrackedUnproductive(val);
|
||||
});
|
||||
setState(() {});
|
||||
}),
|
||||
),
|
||||
//TODO
|
||||
ListTile(
|
||||
title: Text("Untracked Delay Threshold"),
|
||||
subtitle: Text("Makes it easier to fill in the gaps"),
|
||||
trailing: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (untrackedGapValue > 0)
|
||||
InkWell(
|
||||
onTap: () {
|
||||
untrackedGapSettings.text =
|
||||
(untrackedGapValue - 1).toString();
|
||||
setState(() {});
|
||||
},
|
||||
child: Container(
|
||||
margin: EdgeInsets.all(10), child: Text('-')),
|
||||
),
|
||||
|
||||
InkWell(onTap: (){
|
||||
untrackedGapSettings.text = (untrackedGapValue+1).toString();
|
||||
setState(() {
|
||||
|
||||
});
|
||||
SizedBox(
|
||||
width: 25,
|
||||
height: 30,
|
||||
child: TextField(
|
||||
textAlign: TextAlign.center,
|
||||
controller: untrackedGapSettings,
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: <TextInputFormatter>[
|
||||
FilteringTextInputFormatter.digitsOnly
|
||||
],
|
||||
),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
untrackedGapSettings.text =
|
||||
(untrackedGapValue + 1).toString();
|
||||
setState(() {});
|
||||
},
|
||||
child: Container(margin:EdgeInsets.all(10),child: Text('+')),
|
||||
child: Container(
|
||||
margin: EdgeInsets.all(10), child: Text('+')),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: Text("Automatically add tasks from Usage Data"),
|
||||
subtitle: Text("Requires App Usage access"),
|
||||
trailing: Switch.adaptive(
|
||||
value: autoUsage,
|
||||
onChanged: (val) {
|
||||
autoUsage = val;
|
||||
Settings.setAutoLog(val);
|
||||
|
||||
],
|
||||
)
|
||||
),
|
||||
)
|
||||
);
|
||||
setState(() {});
|
||||
}),
|
||||
),
|
||||
],
|
||||
)),
|
||||
));
|
||||
}
|
||||
}
|
||||
886
lib/User.dart
886
lib/User.dart
File diff suppressed because it is too large
Load Diff
1582
lib/main.dart
1582
lib/main.dart
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,10 @@
|
||||
import 'package:app_usage/app_usage.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:tasktracker/Data.dart';
|
||||
import 'DebugHelper.dart';
|
||||
import 'User.dart' as Users;
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'theme_provider.dart';
|
||||
@@ -18,18 +20,19 @@ class SplashScreen extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _SplashScreenState extends State<SplashScreen> {
|
||||
Future<void> initSettings() async{
|
||||
Future<void> initSettings() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
bool value = true;
|
||||
if(prefs.containsKey("theme")){
|
||||
value = ((await prefs.getInt("theme"))==0);
|
||||
}else{
|
||||
if (prefs.containsKey("theme")) {
|
||||
value = ((await prefs.getInt("theme")) == 0);
|
||||
} else {
|
||||
await prefs.setInt("theme", 0);
|
||||
}
|
||||
print('Dark theme is : $value');
|
||||
final provider = Provider.of<ThemeProvider>(context, listen: false);
|
||||
provider.toggleTheme(value);
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
// TODO: implement initState
|
||||
@@ -38,14 +41,16 @@ class _SplashScreenState extends State<SplashScreen> {
|
||||
NotificationManager.RescheduleNotifications();
|
||||
}
|
||||
|
||||
|
||||
void notificationSelected(String? payload) {
|
||||
if(payload!=null){
|
||||
if(payload.toLowerCase().contains("activity")){
|
||||
Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewActivity())).then((value) => {Users.refreshUserData()});
|
||||
if (payload != null) {
|
||||
if (payload.toLowerCase().contains("activity")) {
|
||||
Navigator.of(context)
|
||||
.push(MaterialPageRoute(builder: (context) => NewActivity()))
|
||||
.then((value) => {Users.refreshUserData()});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void init() async {
|
||||
await initSettings();
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
@@ -53,25 +58,29 @@ class _SplashScreenState extends State<SplashScreen> {
|
||||
// print(loginResponse.body);
|
||||
|
||||
if (!prefs.containsKey("password") || !prefs.containsKey("username")) {
|
||||
Navigator.of(context).pushNamedAndRemoveUntil('/welcome', (route) => false);
|
||||
Navigator.of(context)
|
||||
.pushNamedAndRemoveUntil('/welcome', (route) => false);
|
||||
} else {
|
||||
try {
|
||||
http.Response loginResponse = await Users.login(
|
||||
prefs.getString("username") ?? '',
|
||||
prefs.getString("password") ?? '');
|
||||
print(loginResponse.body);
|
||||
if (loginResponse.body.toLowerCase().contains("success")) { //Login Success
|
||||
if (loginResponse.body.toLowerCase().contains("success")) {
|
||||
//Login Success
|
||||
Continue();
|
||||
} else { //Login Failed
|
||||
} else {
|
||||
//Login Failed
|
||||
LoginFailed();
|
||||
}
|
||||
} catch (error) { //Login Failed
|
||||
} catch (error) {
|
||||
//Login Failed
|
||||
LoginFailed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LoginFailed() async{
|
||||
void LoginFailed() async {
|
||||
bool dbExist = await Users.cacheDbExist();
|
||||
if (dbExist) {
|
||||
print('cache Database exists, Lets go CACHE!');
|
||||
@@ -81,7 +90,7 @@ class _SplashScreenState extends State<SplashScreen> {
|
||||
}
|
||||
}
|
||||
|
||||
void Continue() async{
|
||||
void Continue() async {
|
||||
await Users.initUserData();
|
||||
Navigator.of(context).pushReplacementNamed('/home');
|
||||
print('Going home!');
|
||||
@@ -91,9 +100,12 @@ class _SplashScreenState extends State<SplashScreen> {
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(colors: [Colors.lightBlue, Colors.blue],stops: [0,1],begin: Alignment.topLeft, end: Alignment.bottomRight)
|
||||
),
|
||||
// color: Colors.redAccent,
|
||||
gradient: LinearGradient(
|
||||
colors: [Colors.lightBlue, Colors.blue],
|
||||
stops: [0, 1],
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight)),
|
||||
// color: Colors.redAccent,
|
||||
padding: EdgeInsets.all(80),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
@@ -106,11 +118,15 @@ class _SplashScreenState extends State<SplashScreen> {
|
||||
SpinKitPouringHourGlass(color: Colors.white),
|
||||
],
|
||||
),
|
||||
DefaultTextStyle(style: TextStyle(fontSize: 15,color: Colors.white,fontStyle: FontStyle.italic),
|
||||
child: Text('If you lie to me, That means you lie to yourself\n\n -This app (2022)',))
|
||||
DefaultTextStyle(
|
||||
style: TextStyle(
|
||||
fontSize: 15,
|
||||
color: Colors.white,
|
||||
fontStyle: FontStyle.italic),
|
||||
child: Text(
|
||||
'If you lie to me, That means you lie to yourself\n\n -This app (2022)',
|
||||
))
|
||||
// Text('Loading', style:TextStyle(color: Colors.grey, fontSize: 20,fontStyle: FontStyle.italic))
|
||||
]));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
# Generated by pub
|
||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||
packages:
|
||||
app_usage:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: app_usage
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
args:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -55,6 +55,7 @@ dependencies:
|
||||
google_sign_in: ^5.2.3
|
||||
font_awesome_flutter: ^10.0.0
|
||||
restart_app: ^1.1.0
|
||||
app_usage: ^2.1.1
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user