/* * @Author : Linloir * @Date : 2022-10-11 11:05:08 * @LastEditTime : 2022-10-19 11:08:50 * @Description : */ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:tcp_client/home/cubit/home_cubit.dart'; import 'package:tcp_client/home/cubit/home_state.dart'; import 'package:tcp_client/home/view/contact_page/contact_page.dart'; import 'package:tcp_client/home/view/contact_page/cubit/contact_cubit.dart'; import 'package:tcp_client/home/view/message_page/cubit/msg_list_cubit.dart'; import 'package:tcp_client/home/view/message_page/mesage_page.dart'; import 'package:tcp_client/home/view/profile_page/profile_page.dart'; import 'package:tcp_client/repositories/local_service_repository/local_service_repository.dart'; import 'package:tcp_client/repositories/tcp_repository/tcp_repository.dart'; import 'package:tcp_client/repositories/user_repository/user_repository.dart'; import 'package:tcp_client/search/search_page.dart'; import 'package:window_manager/window_manager.dart'; class HomePage extends StatelessWidget with WindowListener { const HomePage({ required this.userID, required this.localServiceRepository, required this.tcpRepository, super.key }); //TODO: listen to file storage final int userID; final LocalServiceRepository localServiceRepository; final TCPRepository tcpRepository; static Route route({ required int userID, required LocalServiceRepository localServiceRepository, required TCPRepository tcpRepository }) => MaterialPageRoute(builder: (context) => HomePage( userID: userID, localServiceRepository: localServiceRepository, tcpRepository: tcpRepository, )); @override Widget build(BuildContext context) { return MultiRepositoryProvider( providers: [ RepositoryProvider( create: (context) => UserRepository( localServiceRepository: localServiceRepository, tcpRepository: tcpRepository ), ), RepositoryProvider.value(value: localServiceRepository), RepositoryProvider.value(value: tcpRepository), ], child: MultiBlocProvider( providers: [ BlocProvider( create: (context) => MessageListCubit( localServiceRepository: localServiceRepository, tcpRepository: tcpRepository ), ), BlocProvider( create: (context) => ContactCubit( localServiceRepository: localServiceRepository, tcpRepository: tcpRepository ), ), BlocProvider( create: (context) => HomeCubit( localServiceRepository: localServiceRepository, tcpRepository: tcpRepository, pageController: PageController() ), ) ], child: HomePageView(userID: userID,), ), ); } } class HomePageView extends StatelessWidget { const HomePageView({ required this.userID, super.key }); final int userID; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: BlocBuilder( builder: (context, state) { return Text( state.page.literal, style: const TextStyle( fontWeight: FontWeight.bold ), ); }, ), actions: [ IconButton( icon: const Icon(Icons.search_rounded), onPressed: () { Navigator.of(context).push(SearchPage.route( localServiceRepository: context.read(), tcpRepository: context.read(), userRepository: context.read() )); }, ) ], ), body: Center( child: BlocBuilder( builder:(context, state) => PageView( controller: context.read().pageController, children: [ MessagePage(), const ContactPage(), MyProfilePage(userID: userID) ], ), ), ), bottomNavigationBar: BlocBuilder( builder: (context, state) => BottomNavigationBar( items: const [ BottomNavigationBarItem( activeIcon: Icon(Icons.message_rounded), icon: Icon(Icons.message_outlined), label: 'Message' ), BottomNavigationBarItem( activeIcon: Icon(Icons.contacts_rounded), icon: Icon(Icons.contacts_outlined), label: 'Contacts' ), BottomNavigationBarItem( activeIcon: Icon(Icons.person_rounded), icon: Icon(Icons.person_outline_rounded), label: 'Me' ), ], currentIndex: state.page.value, onTap: (value) => context.read().switchPage(HomePagePosition.fromValue(value)) ), ) ); } }