Advertisement
jbn6972

Untitled

Apr 9th, 2022
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. import 'package:firebase_auth/firebase_auth.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flash_chat/constants.dart';
  4. import 'package:cloud_firestore/cloud_firestore.dart';
  5.  
  6. class ChatScreen extends StatefulWidget {
  7. static const String id = 'chat';
  8. @override
  9. _ChatScreenState createState() => _ChatScreenState();
  10. }
  11.  
  12. class _ChatScreenState extends State<ChatScreen> {
  13. final _auht = FirebaseAuth.instance;
  14. User loggedInUser;
  15. String messageText;
  16. final _firestore = FirebaseFirestore.instance;
  17.  
  18. @override
  19. void initState() {
  20. // TODO: implement initState
  21. super.initState();
  22. getCurrentUser();
  23. }
  24.  
  25. void getCurrentUser() async {
  26. try {
  27. final user = await _auht.currentUser;
  28.  
  29. if (user != null) {
  30. loggedInUser = user;
  31. print(loggedInUser.email);
  32. }
  33. } catch (e) {
  34. print(e);
  35. }
  36. }
  37.  
  38. // void getMessages() async {
  39. // final messages = await _firestore.collection('messages').get();
  40. // for (var message in messages.docs) {
  41. // print(message.data());
  42. // }
  43. // }
  44. void messagesStream() async {
  45. await for (var snapshot in _firestore.collection('messages').snapshots()) {
  46. for (var message in snapshot.docs) {
  47. print(message.data());
  48. }
  49. }
  50. }
  51.  
  52. @override
  53. Widget build(BuildContext context) {
  54. return Scaffold(
  55. appBar: AppBar(
  56. leading: null,
  57. actions: <Widget>[
  58. IconButton(
  59. icon: Icon(Icons.close),
  60. onPressed: () {
  61. //Implement logout functionality
  62. // _auht.signOut();
  63. // Navigator.pop(context);
  64. messagesStream();
  65. }),
  66. ],
  67. title: Text('⚡️Chat'),
  68. backgroundColor: Colors.lightBlueAccent,
  69. ),
  70. body: SafeArea(
  71. child: Column(
  72. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  73. crossAxisAlignment: CrossAxisAlignment.stretch,
  74. children: <Widget>[
  75. StreamBuilder<QuerySnapshot>(
  76. stream: _firestore.collection('messages').snapshots(),
  77. builder: (context, snapshot) {
  78. List<Text> messageWidgets = [];
  79. if (snapshot.hasData) {
  80. final messages = snapshot.data.docs;
  81. for (var message in messages) {
  82. try {
  83. final messageText = (message['text']);
  84. final messageSender = (message['sender']);
  85. final messageWidget =
  86. Text('$messageText from $messageSender');
  87. messageWidgets.add(messageWidget);
  88. } catch (E) {
  89. print(E);
  90. }
  91. }
  92. }
  93. return Column(
  94. children: messageWidgets,
  95. );
  96. },
  97. ),
  98. Container(
  99. decoration: kMessageContainerDecoration,
  100. child: Row(
  101. crossAxisAlignment: CrossAxisAlignment.center,
  102. children: <Widget>[
  103. Expanded(
  104. child: TextField(
  105. onChanged: (value) {
  106. //Do something with the user input.
  107. messageText = value;
  108. },
  109. decoration: kMessageTextFieldDecoration,
  110. ),
  111. ),
  112. FlatButton(
  113. onPressed: () {
  114. //Implement send functionality.
  115. _firestore.collection('messages').add(
  116. {'sender': loggedInUser.email, 'text': messageText});
  117. },
  118. child: Text(
  119. 'Send',
  120. style: kSendButtonTextStyle,
  121. ),
  122. ),
  123. ],
  124. ),
  125. ),
  126. ],
  127. ),
  128. ),
  129. );
  130. }
  131. }
  132.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement