feat(chat): add init and dispose chat, typing info, receive a messages

This commit is contained in:
alex
2024-07-03 16:50:09 +03:00
parent 424ce3cb34
commit 4c7519ee4c
27 changed files with 553 additions and 167 deletions

View File

@@ -9,7 +9,7 @@ class ChatMessageModel with _$ChatMessageModel {
const factory ChatMessageModel({
required int id,
required String data,
@JsonKey(name: 'media_data') required List<dynamic> mediaData,
@JsonKey(name: 'media_data') required List<dynamic>? mediaData,
@JsonKey(name: 'author_id') required int authorId,
@JsonKey(name: 'updated_at') required String updatedAt,
}) = _ChatMessageModel;

View File

@@ -23,7 +23,7 @@ mixin _$ChatMessageModel {
int get id => throw _privateConstructorUsedError;
String get data => throw _privateConstructorUsedError;
@JsonKey(name: 'media_data')
List<dynamic> get mediaData => throw _privateConstructorUsedError;
List<dynamic>? get mediaData => throw _privateConstructorUsedError;
@JsonKey(name: 'author_id')
int get authorId => throw _privateConstructorUsedError;
@JsonKey(name: 'updated_at')
@@ -44,7 +44,7 @@ abstract class $ChatMessageModelCopyWith<$Res> {
$Res call(
{int id,
String data,
@JsonKey(name: 'media_data') List<dynamic> mediaData,
@JsonKey(name: 'media_data') List<dynamic>? mediaData,
@JsonKey(name: 'author_id') int authorId,
@JsonKey(name: 'updated_at') String updatedAt});
}
@@ -64,7 +64,7 @@ class _$ChatMessageModelCopyWithImpl<$Res, $Val extends ChatMessageModel>
$Res call({
Object? id = null,
Object? data = null,
Object? mediaData = null,
Object? mediaData = freezed,
Object? authorId = null,
Object? updatedAt = null,
}) {
@@ -77,10 +77,10 @@ class _$ChatMessageModelCopyWithImpl<$Res, $Val extends ChatMessageModel>
? _value.data
: data // ignore: cast_nullable_to_non_nullable
as String,
mediaData: null == mediaData
mediaData: freezed == mediaData
? _value.mediaData
: mediaData // ignore: cast_nullable_to_non_nullable
as List<dynamic>,
as List<dynamic>?,
authorId: null == authorId
? _value.authorId
: authorId // ignore: cast_nullable_to_non_nullable
@@ -104,7 +104,7 @@ abstract class _$$ChatMessageModelImplCopyWith<$Res>
$Res call(
{int id,
String data,
@JsonKey(name: 'media_data') List<dynamic> mediaData,
@JsonKey(name: 'media_data') List<dynamic>? mediaData,
@JsonKey(name: 'author_id') int authorId,
@JsonKey(name: 'updated_at') String updatedAt});
}
@@ -122,7 +122,7 @@ class __$$ChatMessageModelImplCopyWithImpl<$Res>
$Res call({
Object? id = null,
Object? data = null,
Object? mediaData = null,
Object? mediaData = freezed,
Object? authorId = null,
Object? updatedAt = null,
}) {
@@ -135,10 +135,10 @@ class __$$ChatMessageModelImplCopyWithImpl<$Res>
? _value.data
: data // ignore: cast_nullable_to_non_nullable
as String,
mediaData: null == mediaData
mediaData: freezed == mediaData
? _value._mediaData
: mediaData // ignore: cast_nullable_to_non_nullable
as List<dynamic>,
as List<dynamic>?,
authorId: null == authorId
? _value.authorId
: authorId // ignore: cast_nullable_to_non_nullable
@@ -157,7 +157,7 @@ class _$ChatMessageModelImpl implements _ChatMessageModel {
const _$ChatMessageModelImpl(
{required this.id,
required this.data,
@JsonKey(name: 'media_data') required final List<dynamic> mediaData,
@JsonKey(name: 'media_data') required final List<dynamic>? mediaData,
@JsonKey(name: 'author_id') required this.authorId,
@JsonKey(name: 'updated_at') required this.updatedAt})
: _mediaData = mediaData;
@@ -169,13 +169,15 @@ class _$ChatMessageModelImpl implements _ChatMessageModel {
final int id;
@override
final String data;
final List<dynamic> _mediaData;
final List<dynamic>? _mediaData;
@override
@JsonKey(name: 'media_data')
List<dynamic> get mediaData {
List<dynamic>? get mediaData {
final value = _mediaData;
if (value == null) return null;
if (_mediaData is EqualUnmodifiableListView) return _mediaData;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_mediaData);
return EqualUnmodifiableListView(value);
}
@override
@@ -229,7 +231,7 @@ abstract class _ChatMessageModel implements ChatMessageModel {
const factory _ChatMessageModel(
{required final int id,
required final String data,
@JsonKey(name: 'media_data') required final List<dynamic> mediaData,
@JsonKey(name: 'media_data') required final List<dynamic>? mediaData,
@JsonKey(name: 'author_id') required final int authorId,
@JsonKey(name: 'updated_at') required final String updatedAt}) =
_$ChatMessageModelImpl;
@@ -243,7 +245,7 @@ abstract class _ChatMessageModel implements ChatMessageModel {
String get data;
@override
@JsonKey(name: 'media_data')
List<dynamic> get mediaData;
List<dynamic>? get mediaData;
@override
@JsonKey(name: 'author_id')
int get authorId;

View File

@@ -11,7 +11,7 @@ _$ChatMessageModelImpl _$$ChatMessageModelImplFromJson(
_$ChatMessageModelImpl(
id: (json['id'] as num).toInt(),
data: json['data'] as String,
mediaData: json['media_data'] as List<dynamic>,
mediaData: json['media_data'] as List<dynamic>?,
authorId: (json['author_id'] as num).toInt(),
updatedAt: json['updated_at'] as String,
);

View File

@@ -0,0 +1,16 @@
import 'package:eatvio_app/features/chat/models/chat_message_model.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'chat_messages_model.freezed.dart';
part 'chat_messages_model.g.dart';
@freezed
class ChatMessagesModel with _$ChatMessagesModel {
const factory ChatMessagesModel({
@JsonKey(name: 'data')
required List<ChatMessageModel> messagesList,
}) = _ChatMessagesModel;
factory ChatMessagesModel.fromJson(Map<String, Object?> json) => _$ChatMessagesModelFromJson(json);
}

View File

@@ -0,0 +1,168 @@
// coverage:ignore-file
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
part of 'chat_messages_model.dart';
// **************************************************************************
// FreezedGenerator
// **************************************************************************
T _$identity<T>(T value) => value;
final _privateConstructorUsedError = UnsupportedError(
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
ChatMessagesModel _$ChatMessagesModelFromJson(Map<String, dynamic> json) {
return _ChatMessagesModel.fromJson(json);
}
/// @nodoc
mixin _$ChatMessagesModel {
@JsonKey(name: 'data')
List<ChatMessageModel> get messagesList => throw _privateConstructorUsedError;
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
$ChatMessagesModelCopyWith<ChatMessagesModel> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $ChatMessagesModelCopyWith<$Res> {
factory $ChatMessagesModelCopyWith(
ChatMessagesModel value, $Res Function(ChatMessagesModel) then) =
_$ChatMessagesModelCopyWithImpl<$Res, ChatMessagesModel>;
@useResult
$Res call({@JsonKey(name: 'data') List<ChatMessageModel> messagesList});
}
/// @nodoc
class _$ChatMessagesModelCopyWithImpl<$Res, $Val extends ChatMessagesModel>
implements $ChatMessagesModelCopyWith<$Res> {
_$ChatMessagesModelCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
@pragma('vm:prefer-inline')
@override
$Res call({
Object? messagesList = null,
}) {
return _then(_value.copyWith(
messagesList: null == messagesList
? _value.messagesList
: messagesList // ignore: cast_nullable_to_non_nullable
as List<ChatMessageModel>,
) as $Val);
}
}
/// @nodoc
abstract class _$$ChatMessagesModelImplCopyWith<$Res>
implements $ChatMessagesModelCopyWith<$Res> {
factory _$$ChatMessagesModelImplCopyWith(_$ChatMessagesModelImpl value,
$Res Function(_$ChatMessagesModelImpl) then) =
__$$ChatMessagesModelImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({@JsonKey(name: 'data') List<ChatMessageModel> messagesList});
}
/// @nodoc
class __$$ChatMessagesModelImplCopyWithImpl<$Res>
extends _$ChatMessagesModelCopyWithImpl<$Res, _$ChatMessagesModelImpl>
implements _$$ChatMessagesModelImplCopyWith<$Res> {
__$$ChatMessagesModelImplCopyWithImpl(_$ChatMessagesModelImpl _value,
$Res Function(_$ChatMessagesModelImpl) _then)
: super(_value, _then);
@pragma('vm:prefer-inline')
@override
$Res call({
Object? messagesList = null,
}) {
return _then(_$ChatMessagesModelImpl(
messagesList: null == messagesList
? _value._messagesList
: messagesList // ignore: cast_nullable_to_non_nullable
as List<ChatMessageModel>,
));
}
}
/// @nodoc
@JsonSerializable()
class _$ChatMessagesModelImpl implements _ChatMessagesModel {
const _$ChatMessagesModelImpl(
{@JsonKey(name: 'data')
required final List<ChatMessageModel> messagesList})
: _messagesList = messagesList;
factory _$ChatMessagesModelImpl.fromJson(Map<String, dynamic> json) =>
_$$ChatMessagesModelImplFromJson(json);
final List<ChatMessageModel> _messagesList;
@override
@JsonKey(name: 'data')
List<ChatMessageModel> get messagesList {
if (_messagesList is EqualUnmodifiableListView) return _messagesList;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_messagesList);
}
@override
String toString() {
return 'ChatMessagesModel(messagesList: $messagesList)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$ChatMessagesModelImpl &&
const DeepCollectionEquality()
.equals(other._messagesList, _messagesList));
}
@JsonKey(ignore: true)
@override
int get hashCode => Object.hash(
runtimeType, const DeepCollectionEquality().hash(_messagesList));
@JsonKey(ignore: true)
@override
@pragma('vm:prefer-inline')
_$$ChatMessagesModelImplCopyWith<_$ChatMessagesModelImpl> get copyWith =>
__$$ChatMessagesModelImplCopyWithImpl<_$ChatMessagesModelImpl>(
this, _$identity);
@override
Map<String, dynamic> toJson() {
return _$$ChatMessagesModelImplToJson(
this,
);
}
}
abstract class _ChatMessagesModel implements ChatMessagesModel {
const factory _ChatMessagesModel(
{@JsonKey(name: 'data')
required final List<ChatMessageModel> messagesList}) =
_$ChatMessagesModelImpl;
factory _ChatMessagesModel.fromJson(Map<String, dynamic> json) =
_$ChatMessagesModelImpl.fromJson;
@override
@JsonKey(name: 'data')
List<ChatMessageModel> get messagesList;
@override
@JsonKey(ignore: true)
_$$ChatMessagesModelImplCopyWith<_$ChatMessagesModelImpl> get copyWith =>
throw _privateConstructorUsedError;
}

View File

@@ -0,0 +1,21 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'chat_messages_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
_$ChatMessagesModelImpl _$$ChatMessagesModelImplFromJson(
Map<String, dynamic> json) =>
_$ChatMessagesModelImpl(
messagesList: (json['data'] as List<dynamic>)
.map((e) => ChatMessageModel.fromJson(e as Map<String, dynamic>))
.toList(),
);
Map<String, dynamic> _$$ChatMessagesModelImplToJson(
_$ChatMessagesModelImpl instance) =>
<String, dynamic>{
'data': instance.messagesList,
};

View File

@@ -1,4 +1,3 @@
import 'package:eatvio_app/features/chat/models/chat_message_model.dart';
import 'package:eatvio_app/features/chat/models/chat_room_settings_model.dart';
import 'package:eatvio_app/features/chat/models/chat_user_model.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
@@ -12,7 +11,6 @@ class ChatRoomModel with _$ChatRoomModel {
const factory ChatRoomModel({
required String id,
@JsonKey(name: 'chat_room_setting') required ChatRoomSettingsModel chatRoomSettings,
required List<ChatMessageModel> messages,
required Map<String, ChatUserModel> users,
}) = _ChatRoomModel;

View File

@@ -24,7 +24,6 @@ mixin _$ChatRoomModel {
@JsonKey(name: 'chat_room_setting')
ChatRoomSettingsModel get chatRoomSettings =>
throw _privateConstructorUsedError;
List<ChatMessageModel> get messages => throw _privateConstructorUsedError;
Map<String, ChatUserModel> get users => throw _privateConstructorUsedError;
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@@ -43,7 +42,6 @@ abstract class $ChatRoomModelCopyWith<$Res> {
{String id,
@JsonKey(name: 'chat_room_setting')
ChatRoomSettingsModel chatRoomSettings,
List<ChatMessageModel> messages,
Map<String, ChatUserModel> users});
$ChatRoomSettingsModelCopyWith<$Res> get chatRoomSettings;
@@ -64,7 +62,6 @@ class _$ChatRoomModelCopyWithImpl<$Res, $Val extends ChatRoomModel>
$Res call({
Object? id = null,
Object? chatRoomSettings = null,
Object? messages = null,
Object? users = null,
}) {
return _then(_value.copyWith(
@@ -76,10 +73,6 @@ class _$ChatRoomModelCopyWithImpl<$Res, $Val extends ChatRoomModel>
? _value.chatRoomSettings
: chatRoomSettings // ignore: cast_nullable_to_non_nullable
as ChatRoomSettingsModel,
messages: null == messages
? _value.messages
: messages // ignore: cast_nullable_to_non_nullable
as List<ChatMessageModel>,
users: null == users
? _value.users
: users // ignore: cast_nullable_to_non_nullable
@@ -109,7 +102,6 @@ abstract class _$$ChatRoomModelImplCopyWith<$Res>
{String id,
@JsonKey(name: 'chat_room_setting')
ChatRoomSettingsModel chatRoomSettings,
List<ChatMessageModel> messages,
Map<String, ChatUserModel> users});
@override
@@ -129,7 +121,6 @@ class __$$ChatRoomModelImplCopyWithImpl<$Res>
$Res call({
Object? id = null,
Object? chatRoomSettings = null,
Object? messages = null,
Object? users = null,
}) {
return _then(_$ChatRoomModelImpl(
@@ -141,10 +132,6 @@ class __$$ChatRoomModelImplCopyWithImpl<$Res>
? _value.chatRoomSettings
: chatRoomSettings // ignore: cast_nullable_to_non_nullable
as ChatRoomSettingsModel,
messages: null == messages
? _value._messages
: messages // ignore: cast_nullable_to_non_nullable
as List<ChatMessageModel>,
users: null == users
? _value._users
: users // ignore: cast_nullable_to_non_nullable
@@ -159,10 +146,8 @@ class _$ChatRoomModelImpl implements _ChatRoomModel {
const _$ChatRoomModelImpl(
{required this.id,
@JsonKey(name: 'chat_room_setting') required this.chatRoomSettings,
required final List<ChatMessageModel> messages,
required final Map<String, ChatUserModel> users})
: _messages = messages,
_users = users;
: _users = users;
factory _$ChatRoomModelImpl.fromJson(Map<String, dynamic> json) =>
_$$ChatRoomModelImplFromJson(json);
@@ -172,14 +157,6 @@ class _$ChatRoomModelImpl implements _ChatRoomModel {
@override
@JsonKey(name: 'chat_room_setting')
final ChatRoomSettingsModel chatRoomSettings;
final List<ChatMessageModel> _messages;
@override
List<ChatMessageModel> get messages {
if (_messages is EqualUnmodifiableListView) return _messages;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_messages);
}
final Map<String, ChatUserModel> _users;
@override
Map<String, ChatUserModel> get users {
@@ -190,7 +167,7 @@ class _$ChatRoomModelImpl implements _ChatRoomModel {
@override
String toString() {
return 'ChatRoomModel(id: $id, chatRoomSettings: $chatRoomSettings, messages: $messages, users: $users)';
return 'ChatRoomModel(id: $id, chatRoomSettings: $chatRoomSettings, users: $users)';
}
@override
@@ -201,17 +178,12 @@ class _$ChatRoomModelImpl implements _ChatRoomModel {
(identical(other.id, id) || other.id == id) &&
(identical(other.chatRoomSettings, chatRoomSettings) ||
other.chatRoomSettings == chatRoomSettings) &&
const DeepCollectionEquality().equals(other._messages, _messages) &&
const DeepCollectionEquality().equals(other._users, _users));
}
@JsonKey(ignore: true)
@override
int get hashCode => Object.hash(
runtimeType,
id,
chatRoomSettings,
const DeepCollectionEquality().hash(_messages),
int get hashCode => Object.hash(runtimeType, id, chatRoomSettings,
const DeepCollectionEquality().hash(_users));
@JsonKey(ignore: true)
@@ -233,7 +205,6 @@ abstract class _ChatRoomModel implements ChatRoomModel {
{required final String id,
@JsonKey(name: 'chat_room_setting')
required final ChatRoomSettingsModel chatRoomSettings,
required final List<ChatMessageModel> messages,
required final Map<String, ChatUserModel> users}) = _$ChatRoomModelImpl;
factory _ChatRoomModel.fromJson(Map<String, dynamic> json) =
@@ -245,8 +216,6 @@ abstract class _ChatRoomModel implements ChatRoomModel {
@JsonKey(name: 'chat_room_setting')
ChatRoomSettingsModel get chatRoomSettings;
@override
List<ChatMessageModel> get messages;
@override
Map<String, ChatUserModel> get users;
@override
@JsonKey(ignore: true)

View File

@@ -11,9 +11,6 @@ _$ChatRoomModelImpl _$$ChatRoomModelImplFromJson(Map<String, dynamic> json) =>
id: json['id'] as String,
chatRoomSettings: ChatRoomSettingsModel.fromJson(
json['chat_room_setting'] as Map<String, dynamic>),
messages: (json['messages'] as List<dynamic>)
.map((e) => ChatMessageModel.fromJson(e as Map<String, dynamic>))
.toList(),
users: (json['users'] as Map<String, dynamic>).map(
(k, e) =>
MapEntry(k, ChatUserModel.fromJson(e as Map<String, dynamic>)),
@@ -24,6 +21,5 @@ Map<String, dynamic> _$$ChatRoomModelImplToJson(_$ChatRoomModelImpl instance) =>
<String, dynamic>{
'id': instance.id,
'chat_room_setting': instance.chatRoomSettings,
'messages': instance.messages,
'users': instance.users,
};