Files
TaskTracker/lib/main.dart
warlock d4dd0864fa Init
2022-02-20 04:29:06 +05:30

298 lines
10 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:tasktracker/Categories.dart';
import 'package:tasktracker/Welcome.dart';
import 'package:tasktracker/splash.dart';
import 'package:wakelock/wakelock.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'NewTask.dart';
import 'newActivity.dart';
import 'Tasks.dart';
import 'User.dart' as User;
extension HexColor on Color {
/// String is in the format "aabbcc" or "ffaabbcc" with an optional leading "#".
static Color fromHex(String hexString) {
final buffer = StringBuffer();
if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');
buffer.write(hexString.replaceFirst('#', ''));
return Color(int.parse(buffer.toString(), radix: 16));
}
/// Prefixes a hash sign if [leadingHashSign] is set to `true` (default is `true`).
String toHex({bool leadingHashSign = true}) => '${leadingHashSign ? '#' : ''}'
'${alpha.toRadixString(16).padLeft(2, '0')}'
'${red.toRadixString(16).padLeft(2, '0')}'
'${green.toRadixString(16).padLeft(2, '0')}'
'${blue.toRadixString(16).padLeft(2, '0')}';
}
// To keep the screen on:
final List<PopulationData> data = [
PopulationData(
name: "Rocket League",
value: 45,
barColor: charts.ColorUtil.fromDartColor(Colors.blue)),
PopulationData(
name: "CS:GO",
value: 15,
barColor: charts.ColorUtil.fromDartColor(Colors.yellow)),
PopulationData(
name: "Halo",
value: 10,
barColor: charts.ColorUtil.fromDartColor(Colors.grey)),
PopulationData(
name: "SneakyPeaky",
value: 30,
barColor: charts.ColorUtil.fromDartColor(Colors.red)),
];
void main() {
Wakelock.enable(); // or Wakelock.toggle(on: true);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
accentColor: Colors.redAccent,
brightness: Brightness.dark,
primaryColor: Colors.amber,
fontFamily: 'Noto-Sans'),
//home: const MyHomePage(),
initialRoute: '/splash',
routes:{
'/splash':(context)=> const SplashScreen(),
'/welcome':(context)=> const WelcomePage(),
'/':(context) => const MyHomePage(),
'/Tasks':(context)=> const Tasks(),
'/Categories':(context)=>const Categories()
}
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<charts.Series<PopulationData, String>> series = [
charts.Series(
id: "Subscribers",
data: data,
domainFn: (PopulationData series, _) => series.name,
measureFn: (PopulationData series, _) => series.value,
colorFn: (PopulationData series, _) => series.barColor)
];
@override
void initState() {
// TODO: implement initState
super.initState();
showOfflineSnack();
}
void showOfflineSnack() async{
await Future.delayed(const Duration(seconds: 1));
if(User.offline){
const SnackBar offlineSnack = SnackBar(content: Text('Offline'),duration: Duration(seconds: 100),);
ScaffoldMessenger.of(context).showSnackBar(offlineSnack);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton.extended(onPressed: (){
Navigator.of(context).push(MaterialPageRoute(builder: (context)=> NewActivity()));
},
label: Text("New Activity"),
icon: Icon(Icons.add)
),
appBar: AppBar(title: Row(children:[Icon(Icons.article_outlined, color: Theme.of(context).primaryColor),SizedBox(width: 10),Text('Summary')])),
drawer: navDrawer(context,0),
body: SafeArea(
child: Container(
child: Column(
children: [
Container(
height: 300,
padding: EdgeInsets.all(20),
child: Card(
elevation: 8,
shadowColor: Colors.blueGrey,
child: Padding(
padding: EdgeInsets.all(8),
child: Column(
children: [
cardTitle('Daily Average'),
Expanded(
child: charts.BarChart(
series,
animate: true,
barRendererDecorator:
new charts.BarLabelDecorator(
labelPosition:
charts.BarLabelPosition.inside,
labelPadding: 10,
labelAnchor:
charts.BarLabelAnchor.middle),
))
],
)))),
Container(
height: 300,
padding: EdgeInsets.all(20),
child: Card(
elevation: 8,
shadowColor: Colors.green,
child: Padding(
padding: EdgeInsets.all(8),
child: Column(
children: [
cardTitle('Weekly Average'),
Expanded(
child: charts.BarChart(
series,
animate: true,
barRendererDecorator:
new charts.BarLabelDecorator(
labelPosition:
charts.BarLabelPosition.inside,
labelPadding: 10,
labelAnchor:
charts.BarLabelAnchor.middle),
))
],
))))
],
),
),
));
}
}
Widget cardTitle(String title) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children:[
Padding(padding: EdgeInsets.all(20),child:Text(title,
style: TextStyle(fontWeight: FontWeight.bold))),
MaterialButton(onPressed: (){},child:moreButton())]);
}
Widget moreButton(){
return MaterialButton(
onPressed: (){
},
color: Colors.green,
child:Row(
children: [
Text('More'),Icon(Icons.keyboard_arrow_right)
],
));
}
class PopulationData {
String name;
int value;
charts.Color barColor;
PopulationData(
{required this.name, required this.value, required this.barColor});
}
Drawer navDrawer(BuildContext context, int pageIndex){
return Drawer(
child: ListView(
children: [
Padding(
padding: EdgeInsets.all(16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children:[Text("Time Tracker",
style: TextStyle(
fontSize: 25,
color: Theme.of(context).accentColor,
fontWeight: FontWeight.bold)),
Icon(Icons.more_time,size: 30,),
])
),
Divider(),
ListTile(
selected: (pageIndex == 0),
title: Text('Summary'),
leading: Icon(Icons.article_outlined,color: Theme.of(context).primaryColor),
onTap: () {
if(pageIndex==0){return;}
Navigator.of(context).pushReplacementNamed('/');
},
),
ListTile(
selected: (pageIndex == 1),
title: Text('Analytics'),
leading: Icon(Icons.analytics_outlined,color: Theme.of(context).primaryColor),
onTap: () {
if(pageIndex==1){return;}
// Navigator.of(context).pushReplacementNamed('/');
},
),
Divider(),
ListTile(
selected: (pageIndex == 2),
title: Text('Activities'),
leading: Icon(Icons.task,color: Theme.of(context).primaryColor),
onTap: () {
if(pageIndex==2){return;}
Navigator.of(context).pushReplacementNamed('/Activities');
},
),
ListTile(
selected: (pageIndex == 3),
title: Text('Task Types'),
leading: Icon(Icons.task,color: Theme.of(context).primaryColor),
onTap: () {
if(pageIndex==3){return;}
Navigator.of(context).pushReplacementNamed('/Tasks');
},
),
ListTile(
selected: (pageIndex == 4),
title: Text('Categories'),
leading: Icon(Icons.account_tree_outlined,color: Theme.of(context).primaryColor),
onTap: () {
if(pageIndex==4){return;}
Navigator.of(context).pushReplacementNamed('/Categories');
},
),
Divider(),
ListTile(
selected: (pageIndex == 5),
title: Text('Settings'),
leading: Icon(Icons.settings,color: Colors.blueGrey),
onTap: () {
},
),
ListTile(
selected: (pageIndex == 6),
title: Text('About'),
leading: Icon(Icons.help_outline_outlined),
onTap: () {
},
),
],
));
}