Skip to content
Snippets Groups Projects
Commit b90a821c authored by Israel Breta's avatar Israel Breta
Browse files

In bound and out bound messages DONE! Without filters yet

parent 9d09d2e1
Branches main
No related tags found
No related merge requests found
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'messages.freezed.dart';
......@@ -10,7 +11,18 @@ class Messages with _$Messages {
required int id,
required int receiver_id,
required int sender_id,
@TimestampSerializer() required DateTime timestamp,
}) = _Messages;
factory Messages.fromJson(json) => _$MessagesFromJson(json);
factory Messages.fromJson(Map<String, dynamic> json) => _$MessagesFromJson(json);
}
class TimestampSerializer implements JsonConverter<DateTime, dynamic> {
const TimestampSerializer();
@override
DateTime fromJson(dynamic timestamp) => timestamp.toDate();
@override
Timestamp toJson(DateTime date) => Timestamp.fromDate(date);
}
......@@ -24,6 +24,8 @@ mixin _$Messages {
int get id => throw _privateConstructorUsedError;
int get receiver_id => throw _privateConstructorUsedError;
int get sender_id => throw _privateConstructorUsedError;
@TimestampSerializer()
DateTime get timestamp => throw _privateConstructorUsedError;
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
......@@ -36,7 +38,12 @@ abstract class $MessagesCopyWith<$Res> {
factory $MessagesCopyWith(Messages value, $Res Function(Messages) then) =
_$MessagesCopyWithImpl<$Res, Messages>;
@useResult
$Res call({String content, int id, int receiver_id, int sender_id});
$Res call(
{String content,
int id,
int receiver_id,
int sender_id,
@TimestampSerializer() DateTime timestamp});
}
/// @nodoc
......@@ -56,6 +63,7 @@ class _$MessagesCopyWithImpl<$Res, $Val extends Messages>
Object? id = null,
Object? receiver_id = null,
Object? sender_id = null,
Object? timestamp = null,
}) {
return _then(_value.copyWith(
content: null == content
......@@ -74,6 +82,10 @@ class _$MessagesCopyWithImpl<$Res, $Val extends Messages>
? _value.sender_id
: sender_id // ignore: cast_nullable_to_non_nullable
as int,
timestamp: null == timestamp
? _value.timestamp
: timestamp // ignore: cast_nullable_to_non_nullable
as DateTime,
) as $Val);
}
}
......@@ -86,7 +98,12 @@ abstract class _$$MessagesImplCopyWith<$Res>
__$$MessagesImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({String content, int id, int receiver_id, int sender_id});
$Res call(
{String content,
int id,
int receiver_id,
int sender_id,
@TimestampSerializer() DateTime timestamp});
}
/// @nodoc
......@@ -104,6 +121,7 @@ class __$$MessagesImplCopyWithImpl<$Res>
Object? id = null,
Object? receiver_id = null,
Object? sender_id = null,
Object? timestamp = null,
}) {
return _then(_$MessagesImpl(
content: null == content
......@@ -122,6 +140,10 @@ class __$$MessagesImplCopyWithImpl<$Res>
? _value.sender_id
: sender_id // ignore: cast_nullable_to_non_nullable
as int,
timestamp: null == timestamp
? _value.timestamp
: timestamp // ignore: cast_nullable_to_non_nullable
as DateTime,
));
}
}
......@@ -133,7 +155,8 @@ class _$MessagesImpl implements _Messages {
{required this.content,
required this.id,
required this.receiver_id,
required this.sender_id});
required this.sender_id,
@TimestampSerializer() required this.timestamp});
factory _$MessagesImpl.fromJson(Map<String, dynamic> json) =>
_$$MessagesImplFromJson(json);
......@@ -146,10 +169,13 @@ class _$MessagesImpl implements _Messages {
final int receiver_id;
@override
final int sender_id;
@override
@TimestampSerializer()
final DateTime timestamp;
@override
String toString() {
return 'Messages(content: $content, id: $id, receiver_id: $receiver_id, sender_id: $sender_id)';
return 'Messages(content: $content, id: $id, receiver_id: $receiver_id, sender_id: $sender_id, timestamp: $timestamp)';
}
@override
......@@ -162,13 +188,15 @@ class _$MessagesImpl implements _Messages {
(identical(other.receiver_id, receiver_id) ||
other.receiver_id == receiver_id) &&
(identical(other.sender_id, sender_id) ||
other.sender_id == sender_id));
other.sender_id == sender_id) &&
(identical(other.timestamp, timestamp) ||
other.timestamp == timestamp));
}
@JsonKey(ignore: true)
@override
int get hashCode =>
Object.hash(runtimeType, content, id, receiver_id, sender_id);
Object.hash(runtimeType, content, id, receiver_id, sender_id, timestamp);
@JsonKey(ignore: true)
@override
......@@ -186,10 +214,12 @@ class _$MessagesImpl implements _Messages {
abstract class _Messages implements Messages {
const factory _Messages(
{required final String content,
required final int id,
required final int receiver_id,
required final int sender_id}) = _$MessagesImpl;
{required final String content,
required final int id,
required final int receiver_id,
required final int sender_id,
@TimestampSerializer() required final DateTime timestamp}) =
_$MessagesImpl;
factory _Messages.fromJson(Map<String, dynamic> json) =
_$MessagesImpl.fromJson;
......@@ -203,6 +233,9 @@ abstract class _Messages implements Messages {
@override
int get sender_id;
@override
@TimestampSerializer()
DateTime get timestamp;
@override
@JsonKey(ignore: true)
_$$MessagesImplCopyWith<_$MessagesImpl> get copyWith =>
throw _privateConstructorUsedError;
......
......@@ -12,6 +12,7 @@ _$MessagesImpl _$$MessagesImplFromJson(Map<String, dynamic> json) =>
id: (json['id'] as num).toInt(),
receiver_id: (json['receiver_id'] as num).toInt(),
sender_id: (json['sender_id'] as num).toInt(),
timestamp: const TimestampSerializer().fromJson(json['timestamp']),
);
Map<String, dynamic> _$$MessagesImplToJson(_$MessagesImpl instance) =>
......@@ -20,4 +21,5 @@ Map<String, dynamic> _$$MessagesImplToJson(_$MessagesImpl instance) =>
'id': instance.id,
'receiver_id': instance.receiver_id,
'sender_id': instance.sender_id,
'timestamp': const TimestampSerializer().toJson(instance.timestamp),
};
import 'package:chat_app/entities/messages/messages.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class ChatIn extends StatelessWidget {
const ChatIn({super.key});
const ChatIn({super.key, required this.message});
final Messages message;
@override
Widget build(BuildContext context) {
return Row(
......@@ -17,17 +18,17 @@ class ChatIn extends StatelessWidget {
borderRadius: BorderRadius.circular(8),
border: Border.all(color: Theme.of(context).colorScheme.primary, width: 2),
),
child: const Padding(
padding: EdgeInsets.fromLTRB(20, 12, 20, 12),
child: Padding(
padding: const EdgeInsets.fromLTRB(20, 12, 20, 12),
child: Text(
'Im Chatting from in bound Lorem ut dolore fugiat cupidatat nulla dolore. Proident consequat commod',
style: TextStyle(color: Colors.black, fontSize: 20),
message.content,
style: const TextStyle(color: Colors.black, fontSize: 20),
),
),
),
const SizedBox(height: 4),
Text(
'18:29',
message.timestamp.toString(),
style: Theme.of(context).textTheme.displaySmall,
),
],
......
import 'package:chat_app/entities/messages/messages.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
class ChatOut extends StatelessWidget {
const ChatOut({super.key});
const ChatOut({super.key, required this.message});
final Messages message;
@override
Widget build(BuildContext context) {
return Row(
......@@ -23,14 +24,14 @@ class ChatOut extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.fromLTRB(20, 12, 20, 12),
child: Text(
'Im Chatting Outbound Nulla in excepteur id aute cupidatat do pariatur non occaecat nostrud irure. Aute incididunt qui ea mollit sit cillum eu quis laborum in ullamco veniam irure velit. Anim consequat nisi eiusmod consequat anim laboris exercitation consectetur tempor deserunt excepteur. Anim Lorem dolor deserunt ea est eu commodo aute velit commodo excepteur. Sunt ea duis proident eiusmod dolore consequat esse magna non tempor commodo pariatur qui nulla. Ut aliqua exercitation do irure occaecat commodo id sint eiusmod eiusmod. Nisi et dolor ex commodo occaecat et eu ipsum laboris.',
message.content,
style: Theme.of(context).textTheme.displayMedium,
),
),
),
const SizedBox(height: 4),
Text(
'18:29',
message.timestamp.toString(),
style: Theme.of(context).textTheme.displaySmall,
),
],
......
import 'package:chat_app/entities/messages/messages.dart';
import 'package:chat_app/entities/user/user_data.dart';
import 'package:chat_app/presentation/chats/widgets/chat_in.dart';
import 'package:chat_app/presentation/chats/widgets/chat_out.dart';
......@@ -18,36 +19,44 @@ class ChatContainer extends StatelessWidget {
return Column(
children: <Widget>[
Expanded(
child: SingleChildScrollView(
reverse: true,
child: Padding(
padding: const EdgeInsets.all(12),
child: StreamBuilder<QuerySnapshot<Object?>>(
stream: firestore.collection('Messages').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot<Object?>> snapshot) {
if (snapshot.hasError) {
child: Padding(
padding: const EdgeInsets.all(12),
child: StreamBuilder<QuerySnapshot<Object?>>(
stream: firestore.collection('Messages').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot<Object?>> snapshot) {
if (snapshot.hasError) {
return const HasError();
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const Connecting();
}
// if (snapshot.data!.docs.isEmpty) {
// return const NoData();
// }
return ListView.builder(
scrollDirection: Axis.vertical,
itemCount: snapshot.data!.docs.length,
itemBuilder: (BuildContext context, int index) {
Map<String, dynamic> chatData = snapshot.data!.docs[index].data() as Map<String, dynamic>;
print('index :$index');
try {
Messages message = Messages.fromJson(chatData);
if (message.sender_id == activeUserId) {
return ChatIn(
message: message,
);
} else {
return ChatOut(message: message);
}
} catch (e) {
return const HasError();
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const Connecting();
}
// if (snapshot.data!.docs.isEmpty) {
// return const NoData();
// }
for (int i = 0; i < snapshot.data!.docs.length; i++) {
final Object? chatData = snapshot.data!.docs[0].data();
}
final Object? chatData = snapshot.data!.docs[0].data();
print('Snapshots: ${chatData.toString()}');
return const Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
ChatOut(),
ChatIn(),
],
);
}),
)),
return null;
// return const ChatOut();
},
);
}),
),
),
Padding(
padding: const EdgeInsets.all(12),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment