diff --git a/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart b/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart index e69de29b..47ed9dec 100644 --- a/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart +++ b/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart @@ -0,0 +1,20 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; +import '/core/app_export.dart'; +import 'package:eatvio_app/presentation/chat/chat_screen/models/chat_model.dart'; +part 'chat_event.dart'; +part 'chat_state.dart'; + +/// A bloc that manages the state of a Chat according to the event that is dispatched to it. +class ChatBloc extends Bloc { + ChatBloc(ChatState initialState) : super(initialState) { + on(_onInitialize); + } + + _onInitialize( + ChatInitialEvent event, + Emitter emit, + ) async { + emit(state.copyWith(chatModelObj: state.chatModelObj?.copyWith())); + } +} diff --git a/lib/presentation/chat/chat_screen/bloc/chat_event.dart b/lib/presentation/chat/chat_screen/bloc/chat_event.dart index e69de29b..a3778f98 100644 --- a/lib/presentation/chat/chat_screen/bloc/chat_event.dart +++ b/lib/presentation/chat/chat_screen/bloc/chat_event.dart @@ -0,0 +1,28 @@ +// ignore_for_file: must_be_immutable + +part of 'chat_bloc.dart'; + +/// Abstract class for all events that can be dispatched from the +///Chat widget. +/// +/// Events must be immutable and implement the [Equatable] interface. +@immutable +abstract class ChatEvent extends Equatable {} + +/// Event that is dispatched when the Chat widget is first created. +class ChatInitialEvent extends ChatEvent { + @override + List get props => []; +} + +///event for dropdown selection +class ChangeDropDownEvent extends ChatEvent { + ChangeDropDownEvent({required this.value}); + + SelectionPopupModel value; + + @override + List get props => [ + value, + ]; +} diff --git a/lib/presentation/chat/chat_screen/bloc/chat_state.dart b/lib/presentation/chat/chat_screen/bloc/chat_state.dart index e69de29b..20be159f 100644 --- a/lib/presentation/chat/chat_screen/bloc/chat_state.dart +++ b/lib/presentation/chat/chat_screen/bloc/chat_state.dart @@ -0,0 +1,31 @@ +// ignore_for_file: must_be_immutable + +part of 'chat_bloc.dart'; + +/// Represents the state of Chat in the application. +class ChatState extends Equatable { + ChatState({ + this.selectedDropDownValue, + this.chatModelObj, + }); + + SelectionPopupModel? selectedDropDownValue; + + ChatModel? chatModelObj; + + @override + List get props => [ + selectedDropDownValue, + chatModelObj, + ]; + ChatState copyWith({ + SelectionPopupModel? selectedDropDownValue, + ChatModel? chatModelObj, + }) { + return ChatState( + selectedDropDownValue: + selectedDropDownValue ?? this.selectedDropDownValue, + chatModelObj: chatModelObj ?? this.chatModelObj, + ); + } +} diff --git a/lib/presentation/chat/chat_screen/chat_screen.dart b/lib/presentation/chat/chat_screen/chat_screen.dart index e69de29b..e78a8f38 100644 --- a/lib/presentation/chat/chat_screen/chat_screen.dart +++ b/lib/presentation/chat/chat_screen/chat_screen.dart @@ -0,0 +1,20 @@ +import 'bloc/chat_bloc.dart'; +import 'models/chat_model.dart'; +import 'package:eatvio_app/core/app_export.dart'; +import 'package:flutter/material.dart'; + +class ChatScreen extends StatelessWidget { + const ChatScreen({Key? key}) : super(key: key); + static Widget builder(BuildContext context) { + return BlocProvider( + create: (context) => ChatBloc(ChatState(chatModelObj: ChatModel())) + ..add(ChatInitialEvent()), + child: ChatScreen()); + } + + @override + Widget build(BuildContext context) { + mediaQueryData = MediaQuery.of(context); + return Container(); + } +} diff --git a/lib/presentation/chat/chat_screen/models/chat_model.dart b/lib/presentation/chat/chat_screen/models/chat_model.dart index e69de29b..0e74b3ee 100644 --- a/lib/presentation/chat/chat_screen/models/chat_model.dart +++ b/lib/presentation/chat/chat_screen/models/chat_model.dart @@ -0,0 +1,16 @@ +// ignore_for_file: must_be_immutable + +import 'package:equatable/equatable.dart'; + +/// This class defines the variables used in the [chat_screen], +/// and is typically used to hold data that is passed between different parts of the application. +class ChatModel extends Equatable { + ChatModel(); + + ChatModel copyWith() { + return ChatModel(); + } + + @override + List get props => []; +}