I created a user with firebase authentication, also it has its own database.
The user can send friend requests to other users, the senders uid is saved in the receiver user's request collection. In my app I can list the requests.
So I have the user’s uid and when I press the eye icon I want to navigate to another page where will be the user’s profile. So I need something like UserProfilePage class. Here’s my code:
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_auths/pages/profilepage.dart';
import 'package:flutter_auths/services/authentications.dart';
import 'package:flutter_auths/main.dart';
class RequestPage extends StatefulWidget {
final String uid;
RequestPage({Key key, @required this.uid}) : super(key: key);
@override
_RequestPageState createState() => _RequestPageState(uid);
}
class _RequestPageState extends State<RequestPage> {
final String uid;
_RequestPageState(this.uid);
var taskcollections = Firestore.instance.collection('users');
String task;
void acceptFriendRequest(String theUid) async {
await Firestore.instance
.collection('users')
.document(uid)
.collection('friendships')
.document()
.setData({
'FriendUid': theUid,
}).then((onValue) {
print('current user: ');
print(uid);
print(theUid);
});
await Firestore.instance
.collection('users')
.document(theUid)
.collection('friendships')
.document()
.setData({
'FriendUid': uid,
}).then((onValue) {
});
await Firestore.instance
.collection('users')
.document(uid)
.collection('requests')
.document(theUid)
.delete();
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () { },
child: Icon(Icons.add),
),
appBar: AppBar(
title: Text(
"Requests",
style: TextStyle(
fontFamily: "tepeno",
fontWeight: FontWeight.w600,
),
),
actions: <Widget>[
IconButton(
icon: Icon(Icons.exit_to_app),
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onPressed: () => signOutUser().then((value) {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (context) => HomePage()),
(Route<dynamic> route) => false);
}),
),
],
),
body: StreamBuilder<QuerySnapshot>(
stream: taskcollections
.document(uid)
.collection('requests')
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot ds = snapshot.data.documents[index];
return Container(
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(5.0),
),
margin: EdgeInsets.all(8.0),
child: ListTile(
title: Text(
ds['FriendUid'] ?? '',
style: TextStyle(
fontFamily: "tepeno",
fontSize: 18.0,
color: Colors.white,
),
),
trailing: Wrap(
spacing: 7, // space between two icons
children: <Widget>[
IconButton(
icon: Icon(
Icons.check,
size: 27.0,
color: Colors.brown[900],
),
onPressed: () {
acceptFriendRequest(ds['FriendUid']);
},
),
IconButton(
icon: Icon(
Icons.do_not_disturb,
size: 27.0,
color: Colors.brown[900],
),
onPressed: () {
// _onDeleteItemPressed(index);
},
),
IconButton(
icon: Icon(
Icons.remove_red_eye,
size: 27.0,
color: Colors.brown[900],
),
onPressed: () {
},
),
],
),
),
);
},
);
} else if (snapshot.hasError) {
return CircularProgressIndicator();
} else {
return CircularProgressIndicator();
}
},
),
);
}
}
I’m a beginner in Flutter. Thank you for your help.
