Skip to content

Commit ed598fe

Browse files
committed
added the statistics provider and screen. Little bit cleanup is left
1 parent c33d2f4 commit ed598fe

30 files changed

+614
-684
lines changed

lib/archive/water_effect_archive.dart

Lines changed: 0 additions & 91 deletions
This file was deleted.

lib/main.dart

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
import 'package:drinkable/screens/add_water_screen.dart';
2-
import 'package:drinkable/screens/data_entry_screen.dart';
31
import 'package:flutter/material.dart';
42
import 'package:flutter/services.dart';
53
import 'package:provider/provider.dart';
64
import 'package:firebase_core/firebase_core.dart';
75

8-
// screens
9-
import './screens/test.dart';
106

117
// providers
128
import './providers/home_provider.dart';
139
import './providers/auth_provider.dart';
10+
import './providers/statistics_provider.dart';
1411

12+
// screens
1513
import './root.dart';
14+
import './screens/data_entry_screen.dart';
1615

1716
void main() async {
1817
WidgetsFlutterBinding.ensureInitialized();
@@ -23,15 +22,10 @@ void main() async {
2322
DeviceOrientation.portraitUp
2423
]
2524
);
26-
// SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
27-
// statusBarColor: Colors.transparent,
28-
// statusBarIconBrightness: Brightness.dark,
29-
// ));
3025
runApp(MyApp());
3126
}
3227

3328
class MyApp extends StatelessWidget {
34-
// This widget is the root of your application.
3529
@override
3630
Widget build(BuildContext context) {
3731
return MultiProvider(
@@ -42,6 +36,10 @@ class MyApp extends StatelessWidget {
4236
ChangeNotifierProxyProvider<AuthProvider,HomeProvider>(
4337
create: (context) => HomeProvider(),
4438
update: (context, authProvider, homeProvider) => homeProvider..update(authProvider.user),
39+
),
40+
ChangeNotifierProxyProvider<AuthProvider,StatisticsProvider>(
41+
create: (context) => StatisticsProvider(),
42+
update: (context, authProvider, statisticsProvider) => statisticsProvider..update(authProvider.user),
4543
)
4644
],
4745
child: MaterialApp(
@@ -54,19 +52,11 @@ class MyApp extends StatelessWidget {
5452
builders: {
5553
TargetPlatform.android : CupertinoPageTransitionsBuilder()
5654
}
57-
)
55+
),
5856
),
59-
//home: HomeScreen(),
60-
//home: CustomDrawer(),
6157
home: Root(),
62-
//home: TestScreen(),
63-
//home: OnboardScreen(),
6458
routes: {
65-
// '/' : (ctx)=>OnboardScreen(),
6659
DataEntryScreen.routeName : (ctx)=>DataEntryScreen(),
67-
// AuthScreen.routeName : (ctx)=>AuthScreen(),
68-
// CustomDrawer.routeName : (ctx)=>CustomDrawer(),
69-
AddWaterScreen.routeName : (ctx)=>AddWaterScreen()
7060
},
7161
),
7262
);

lib/models/weekly_data.dart

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ class WeeklyData {
44
int month;
55
int week;
66
Map<String,dynamic> amounts;
7+
int dailyTarget;
78

89
WeeklyData({
9-
this.id,this.year,this.month,this.week,this.amounts
10+
this.id,this.year,this.month,this.week,this.amounts,this.dailyTarget
1011
});
1112

1213
factory WeeklyData.fromDoc(Map<String,dynamic> doc){
@@ -21,17 +22,33 @@ class WeeklyData {
2122
year: doc['year'],
2223
month: doc['month'],
2324
week: doc['week'],
24-
amounts: rawAmounts
25+
amounts: rawAmounts,
26+
dailyTarget: doc['daily_target']
2527
);
2628
}
2729

2830

29-
Map<String,dynamic> createNewWeek(String id,int year,int month,int week){
31+
Map<String,dynamic> createNewWeek(String id,int year,int month,int week,int target){
3032
return {
3133
'id' : id,
3234
'year' : year,
3335
'month' : month,
3436
'week' : week,
37+
'daily_target' : target
3538
};
3639
}
40+
41+
double totalThisWeek(){
42+
double total = 0;
43+
amounts.forEach((key, value) {
44+
total+=value;
45+
});
46+
return total;
47+
}
48+
49+
int percentThisWeek(){
50+
double total = totalThisWeek();
51+
double max = (dailyTarget*DateTime.now().weekday).toDouble();
52+
return ((total/max)*100).toInt();
53+
}
3754
}

lib/providers/auth_provider.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ class AuthProvider extends ChangeNotifier {
99
FirebaseFirestore _firestore = FirebaseFirestore.instance;
1010
GoogleSignIn _googleSignIn = GoogleSignIn();
1111
FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
12-
AppUser _appUser;
1312

1413
GoogleSignInAccount get googleAcount {
1514
return _googleSignIn.currentUser;

lib/providers/home_provider.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class HomeProvider extends ChangeNotifier {
8484
_appUser = AppUser.fromDoc(userSnapshot.data());
8585
DocumentSnapshot snapshot = await _currentWeek.get();
8686
if(!snapshot.exists){
87-
Map<String,dynamic> newWeek = WeeklyData().createNewWeek(docId,_today.year,_today.month,week);
87+
Map<String,dynamic> newWeek = WeeklyData().createNewWeek(docId,_today.year,_today.month,week,_appUser.dailyTarget);
8888
await _currentWeek.set(newWeek);
8989
_weeklyData = WeeklyData.fromDoc(newWeek);
9090
}else{
@@ -196,8 +196,12 @@ class HomeProvider extends ChangeNotifier {
196196

197197
Future<void> updateUser(AppUser appUser)async{
198198
try{
199-
print(appUser.toDoc());
200-
await _userRef.update(appUser.toDoc());
199+
await _firebaseFirestore.runTransaction((transaction)async{
200+
transaction.update(_currentWeek,{
201+
'daily_target' : appUser.dailyTarget
202+
});
203+
transaction.update(_userRef, appUser.toDoc());
204+
});
201205
_appUser = appUser;
202206
notifyListeners();
203207
}catch(e){
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import 'package:flutter/foundation.dart';
2+
import '../models/weekly_data.dart';
3+
import 'package:firebase_auth/firebase_auth.dart';
4+
import 'package:cloud_firestore/cloud_firestore.dart';
5+
6+
class StatisticsProvider extends ChangeNotifier {
7+
FirebaseFirestore _firebaseFirestore = FirebaseFirestore.instance;
8+
String _uid;
9+
CollectionReference _weeksRef;
10+
11+
List<WeeklyData> _weeklyData = [];
12+
13+
List<WeeklyData> get weeklyData => [..._weeklyData];
14+
15+
void update(User user){
16+
if(user!=null){
17+
_uid = user.uid;
18+
_weeksRef = _firebaseFirestore.collection('users').doc(_uid).collection('weeks');
19+
}else{
20+
_uid = null;
21+
_weeksRef = null;
22+
_weeklyData.clear();
23+
}
24+
}
25+
26+
Future<void> init() async {
27+
try {
28+
_weeklyData.clear();
29+
QuerySnapshot snapshot = await _weeksRef.orderBy('id').limit(4).get();
30+
List<QueryDocumentSnapshot> docsSnap = snapshot.docs;
31+
docsSnap.forEach((docSnap) {
32+
_weeklyData.add(new WeeklyData.fromDoc(docSnap.data()));
33+
});
34+
}catch(e){
35+
print(e);
36+
}
37+
}
38+
}

lib/root.dart

Lines changed: 8 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,20 @@
1-
import 'package:drinkable/providers/auth_provider.dart';
2-
import 'package:drinkable/screens/auth_screen.dart';
3-
import 'package:drinkable/screens/onboard_screen.dart';
4-
import 'package:drinkable/widgets/custom_drawer.dart';
51
import 'package:flutter/material.dart';
62
import 'package:provider/provider.dart';
7-
import 'package:shared_preferences/shared_preferences.dart';
83
import 'package:firebase_auth/firebase_auth.dart';
94

10-
class Root extends StatefulWidget {
11-
@override
12-
_RootState createState() => _RootState();
13-
}
14-
15-
class _RootState extends State<Root> {
16-
bool _loading = false;
17-
bool _firstTime;
18-
19-
20-
@override
21-
void initState() {
22-
super.initState();
23-
isFirstTime();
24-
}
5+
// providers
6+
import './providers/auth_provider.dart';
257

26-
void toggleLoading(){
27-
setState(() {
28-
_loading = !_loading;
29-
});
30-
}
8+
// screens
9+
import './screens/auth_screen.dart';
3110

32-
void isFirstTime() async {
33-
toggleLoading();
34-
try{
35-
SharedPreferences _preferences = await SharedPreferences.getInstance();
36-
bool firstTime = _preferences.getBool('first_time');
37-
if(firstTime==null){
38-
_firstTime = true;
39-
}else{
40-
_firstTime = false;
41-
}
42-
}catch(e){
43-
print('First time ${true}');
44-
}
45-
toggleLoading();
46-
}
47-
48-
Future<void> setFirstTime() async {
49-
toggleLoading();
50-
try{
51-
SharedPreferences _preferences = await SharedPreferences.getInstance();
52-
bool success = await _preferences.setBool('first_time', false);
53-
if(success){
54-
_firstTime = false;
55-
}
56-
}catch(e){
57-
print(e);
58-
}
59-
toggleLoading();
60-
}
11+
// widgets
12+
import './widgets/custom_drawer.dart';
6113

14+
class Root extends StatelessWidget {
6215
@override
6316
Widget build(BuildContext context) {
64-
return _loading ? Scaffold(body: Center(child: CircularProgressIndicator(),),) :
65-
_firstTime ? OnboardScreen(this.setFirstTime) :
66-
Consumer<AuthProvider>(
17+
return Consumer<AuthProvider>(
6718
builder: (context, authProvider, child) {
6819
User user = authProvider.user;
6920
if(user==null){

0 commit comments

Comments
 (0)