Skip to content

Commit

Permalink
Merge pull request #7 from SimCoderYoutube/lesson_7/display_user_prof…
Browse files Browse the repository at this point in the history
…ile_information

[Add] use profile information
  • Loading branch information
SimCoderYoutube committed Feb 11, 2021
2 parents 3529856 + 4b53960 commit aab500d
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 14 deletions.
11 changes: 10 additions & 1 deletion frontend/lib/models/user.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
class UserModel {
final String id;
final String bannerImageUrl;
final String profileImageUrl;
final String name;
final String email;

UserModel({this.id});
UserModel(
{this.id,
this.bannerImageUrl,
this.profileImageUrl,
this.name,
this.email});
}
6 changes: 0 additions & 6 deletions frontend/lib/screens/main/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,6 @@ class Home extends StatelessWidget {
Navigator.pushNamed(context, '/profile');
},
),
ListTile(
title: Text('Edit'),
onTap: () {
Navigator.pushNamed(context, '/edit');
},
),
ListTile(
title: Text('Logout'),
onTap: () async {
Expand Down
1 change: 1 addition & 0 deletions frontend/lib/screens/main/posts/list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class _ListPostsState extends State<ListPosts> {
final posts = Provider.of<List<PostModel>>(context) ?? [];

return ListView.builder(
physics: const NeverScrollableScrollPhysics(),
itemCount: posts.length,
itemBuilder: (context, index) {
final post = posts[index];
Expand Down
81 changes: 74 additions & 7 deletions frontend/lib/screens/main/profile/profile.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:twitter/models/user.dart';
import 'package:twitter/screens/main/posts/list.dart';
import 'package:twitter/services/posts.dart';
import 'package:twitter/services/user.dart';

class Profile extends StatefulWidget {
Profile({Key key}) : super(key: key);
Expand All @@ -13,15 +15,80 @@ class Profile extends StatefulWidget {

class _ProfileState extends State<Profile> {
PostService _postService = PostService();
UserService _userService = UserService();

@override
Widget build(BuildContext context) {
return StreamProvider.value(
value:
_postService.getPostsByUser(FirebaseAuth.instance.currentUser.uid),
child: Scaffold(
body: Container(
child: ListPosts(),
return MultiProvider(
providers: [
StreamProvider.value(
value: _postService
.getPostsByUser(FirebaseAuth.instance.currentUser.uid),
),
));
StreamProvider.value(
value:
_userService.getUserInfo(FirebaseAuth.instance.currentUser.uid),
)
],
child: Scaffold(
body: DefaultTabController(
length: 2,
child: NestedScrollView(
headerSliverBuilder: (context, _) {
return [
SliverAppBar(
floating: false,
pinned: true,
expandedHeight: 130,
flexibleSpace: FlexibleSpaceBar(
background: Image.network(
Provider.of<UserModel>(context).bannerImageUrl ?? '',
fit: BoxFit.cover,
)),
),
SliverList(
delegate: SliverChildListDelegate([
Container(
padding:
EdgeInsets.symmetric(vertical: 20, horizontal: 20),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Image.network(
Provider.of<UserModel>(context)
.profileImageUrl ??
'',
height: 60,
fit: BoxFit.cover,
),
FlatButton(
onPressed: () {
Navigator.pushNamed(context, '/edit');
},
child: Text("Edit Profile"))
]),
Align(
alignment: Alignment.centerLeft,
child: Container(
padding: EdgeInsets.symmetric(vertical: 10),
child: Text(
Provider.of<UserModel>(context).name ?? '',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20,
),
),
),
)
],
),
)
]))
];
},
body: ListPosts()),
)));
}
}
22 changes: 22 additions & 0 deletions frontend/lib/services/user.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,33 @@ import 'dart:io';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:twitter/models/user.dart';

import 'package:twitter/services/utils.dart';

class UserService {
UtilsService _utilsService = UtilsService();

UserModel _userFromFirebaseSnapshot(DocumentSnapshot snapshot) {
return snapshot != null
? UserModel(
id: snapshot.id,
name: snapshot.data()['name'],
profileImageUrl: snapshot.data()['profileImageUrl'],
bannerImageUrl: snapshot.data()['bannerImageUrl'],
email: snapshot.data()['email'],
)
: null;
}

Stream<UserModel> getUserInfo(uid) {
return FirebaseFirestore.instance
.collection("users")
.doc(uid)
.snapshots()
.map(_userFromFirebaseSnapshot);
}

Future<void> updateProfile(
File _bannerImage, File _profileImage, String name) async {
String bannerImageUrl = '';
Expand Down

0 comments on commit aab500d

Please sign in to comment.