11import 'package:auth/src/features/auth/logic/cubit/auth_cubit.dart' ;
22import 'package:auth/src/features/auth/logic/models/user.dart' ;
33import 'package:auth/src/features/room/logic/bloc/rooms_bloc.dart' ;
4+ import 'package:auth/src/features/room/logic/cubit/cubit/room_cubit.dart' ;
45import 'package:auth/src/features/room/logic/repository/room_repository.dart' ;
6+ import 'package:auth/src/features/room/views/screens/room_screen.dart' ;
7+ import 'package:auth/src/features/room/views/widgets/dialog/join_room_dialog.dart' ;
58import 'package:auth/src/features/room/views/widgets/room_tile.dart' ;
69import 'package:auth/src/features/room/views/widgets/dialog/upsert_room_dialog.dart' ;
710import 'package:flutter/material.dart' ;
@@ -11,14 +14,23 @@ class RoomsScreen extends StatelessWidget {
1114 static const String routeName = '/rooms' ;
1215
1316 static route () {
14- return MaterialPageRoute (
15- builder: (context) => BlocProvider (
16- create: (context) => RoomsBloc (
17- repository: RoomRepository (),
18- )..add (RoomsLoaded ()),
17+ return MaterialPageRoute (builder: (context) {
18+ final repository = RoomRepository ();
19+
20+ return MultiBlocProvider (
21+ providers: [
22+ BlocProvider (
23+ create: (_) => RoomsBloc (
24+ repository: repository,
25+ )..add (RoomsLoaded ()),
26+ ),
27+ BlocProvider (
28+ create: (_) => RoomCubit (repository: repository),
29+ )
30+ ],
1931 child: RoomsScreen (),
20- ),
21- );
32+ );
33+ } );
2234 }
2335
2436 RoomsScreen ({Key ? key}) : super (key: key);
@@ -48,6 +60,18 @@ class RoomsScreen extends StatelessWidget {
4860 SizedBox (
4961 height: 16 ,
5062 ),
63+ BlocListener <RoomCubit , RoomState >(
64+ listenWhen: (_, curr) =>
65+ curr is RoomJoinSuccess && ! curr.isDialog,
66+ listener: (context, state) {
67+ Navigator .pushNamed (
68+ context,
69+ RoomScreen .routeName,
70+ arguments: (state as RoomJoinSuccess ).roomId,
71+ );
72+ },
73+ child: Container (),
74+ ),
5175 BlocBuilder <RoomsBloc , RoomsState >(
5276 builder: (context, state) {
5377 if (state is RoomsLoadInProgress ) {
@@ -165,7 +189,7 @@ class _RoomsActions extends StatelessWidget {
165189 ),
166190 ),
167191 TextButton (
168- onPressed: () => {} ,
192+ onPressed: () => _showJoinDialog (context) ,
169193 child: Text (
170194 'Join Room' ,
171195 style: TextStyle (
@@ -189,4 +213,11 @@ class _RoomsActions extends StatelessWidget {
189213 builder: (_) => UpsertRoomDialog (bloc: context.read <RoomsBloc >()),
190214 );
191215 }
216+
217+ _showJoinDialog (BuildContext context) {
218+ return showDialog (
219+ context: context,
220+ builder: (_) => JoinRoomDialog (cubit: context.read <RoomCubit >()),
221+ );
222+ }
192223}
0 commit comments