Skip to content

Commit

Permalink
Merge pull request #22 from FEUP-ESOF-2020-21/10-3-as-a-user-i-want-t…
Browse files Browse the repository at this point in the history
…o-create-a-profil

10 3 as a user i want to create a profil
  • Loading branch information
raulviana authored Dec 4, 2020
2 parents 5edc778 + 2ce67ba commit 09c176a
Show file tree
Hide file tree
Showing 6 changed files with 170 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:speed_meeting/screens/home/create_event_page.dart';
import 'package:speed_meeting/screens/meeting/meeting.dart';
import 'package:speed_meeting/screens/profile/edit.dart';
import 'package:speed_meeting/screens/wrapper.dart';

import 'package:firebase_core/firebase_core.dart';
Expand All @@ -26,6 +27,7 @@ class MyApp extends StatelessWidget {
routes: <String, WidgetBuilder> {
'/CreateEvent' : (context) => Create_Event(),
'/ParticipateEvent' : (context) => Meeting(),
'/EditProfile' : (context) => EditProfile(),
},
),
);
Expand Down
9 changes: 9 additions & 0 deletions src/lib/models/user.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class UserData {
final String uid;
final String name;
final String email;
final String socialNetwork;
final List<String> interests;

UserData({this.uid, this.name, this.email, this.socialNetwork, this.interests});
}
6 changes: 6 additions & 0 deletions src/lib/screens/home/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ class Home extends StatelessWidget {
(states) => Colors.red),
foregroundColor: MaterialStateProperty.resolveWith(
(states) => Colors.black)),
onPressed:(){
Navigator.pushNamed(context, '/EditProfile');
},
),
new ElevatedButton(
child: Text(
Expand All @@ -87,6 +90,9 @@ class Home extends StatelessWidget {
(states) => Colors.red),
foregroundColor: MaterialStateProperty.resolveWith(
(states) => Colors.black)),
onPressed:(){
Navigator.pushNamed(context, '/EditEvent');
},
)
])
],
Expand Down
111 changes: 111 additions & 0 deletions src/lib/screens/profile/edit.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:speed_meeting/models/user.dart';
import 'package:speed_meeting/services/database.dart';
import 'package:speed_meeting/shared/constants.dart';
import 'package:provider/provider.dart';
import 'package:speed_meeting/shared/loading.dart';

class EditProfile extends StatefulWidget {

final Function toggleView;
EditProfile({this.toggleView});

@override
_EditState createState() => _EditState();

}

class _EditState extends State<EditProfile> {

final _formKey = GlobalKey<FormState>();
bool loading = false;

String email;
String name;
String socialNetwork;
List<String> interests;
String error = "";

@override
Widget build(BuildContext context) {

final user = Provider.of<User>(context);

return Scaffold(
appBar: AppBar(
backgroundColor: Colors.red,
title: Text('Speed Meeting'),
elevation: 0.0,
),
body: Container(
padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 50.0),
child: StreamBuilder<UserData>(
stream: DatabaseService(uid: user.uid).userData,
builder: (context, snapshot) {
if(snapshot.hasData) {

UserData userData = snapshot.data;

return Form(
key: _formKey,
child: Column(
children: <Widget>[
SizedBox(height: 20.0),
TextFormField(
initialValue: userData.name,
decoration: textInputDecoration.copyWith(hintText: "Name"),
validator: (val) => val.isEmpty ? "Enter your name" : null,
onChanged: (val) {
setState(() {
name = val;
});
},
),
SizedBox(height: 20.0,),
TextFormField(
initialValue: userData.email,
decoration: textInputDecoration.copyWith(hintText: "Email"),
validator: (val) => val.isEmpty ? "Enter your email" : null,
onChanged: (val) {
setState(() {
email = val;
});
},
),
SizedBox(height: 20.0),
RaisedButton(
color: Colors.red,
child: Text(
"Update",
style: TextStyle(color: Colors.white),
),
onPressed: () async {
if(_formKey.currentState.validate()) {
await DatabaseService(uid: user.uid).updateUserData(
name ?? userData.name,
email ?? userData.email,
socialNetwork ?? userData.socialNetwork,
interests ?? userData.interests
);
Navigator.pop(context);
}
},
),
SizedBox(height: 12.0),
Text(
error,
style: TextStyle(color: Colors.red, fontSize: 14.0),
),
],
),
);
} else {
return Loading();
}
}
),
),
);
}
}
5 changes: 5 additions & 0 deletions src/lib/services/auth.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:speed_meeting/services/database.dart';

class AuthService {

Expand Down Expand Up @@ -38,6 +39,10 @@ class AuthService {
try {
UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
User user = result.user;

// create a new document for the user with the uid
await DatabaseService(uid: user.uid).updateUserData("", email,"", []);

return user;
}
catch(e){
Expand Down
37 changes: 37 additions & 0 deletions src/lib/services/database.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:speed_meeting/models/user.dart';

class DatabaseService {

final String uid;
DatabaseService({this.uid});

// collection reference
final CollectionReference usersCollection = FirebaseFirestore.instance.collection("users");

Future updateUserData(String name, String email, String socialNetwork, List<String> interests) async {
return await usersCollection.doc(uid).set({
'name': name,
'email': email,
'socialNetwork': socialNetwork,
'interests': interests,
});
}

// user data from snapshot
UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
name: snapshot.data()['name'],
email: snapshot.data()['email'],
socialNetwork: snapshot.data()['socialNetwork']
//interests: snapshot.data()['interests']
);
}

// get user doc stream
Stream<UserData> get userData {
return usersCollection.doc(uid).snapshots().map(_userDataFromSnapshot);
}

}

0 comments on commit 09c176a

Please sign in to comment.