refactor: manage HomeViewModel lifecycle in StatefulWidget

pull/2838/head
Harsh Yadav 2 weeks ago
parent 93d3dfaf5c
commit c82e3b52ff

@ -13,8 +13,7 @@ import '../ui/auth/login/view_models/login_viewmodel.dart';
import '../ui/auth/login/widgets/login_screen.dart';
import '../ui/booking/view_models/booking_viewmodel.dart';
import '../ui/booking/widgets/booking_screen.dart';
import '../ui/home/view_models/home_viewmodel.dart';
import '../ui/home/widgets/home_screen.dart';
import '../ui/home/widgets/home_screen_container.dart';
import '../ui/results/view_models/results_viewmodel.dart';
import '../ui/results/widgets/results_screen.dart';
import '../ui/search_form/view_models/search_form_viewmodel.dart';
@ -42,21 +41,7 @@ GoRouter router(AuthRepository authRepository) => GoRouter(
GoRoute(
path: Routes.home,
builder: (context, state) {
// NOTE:
// HomeViewModel is created here and is not disposed.
// This is safe in this sample because HomeViewModel does not
// manage any resources that require disposal.
//
// In real applications, if a ViewModel manages streams,
// controllers, or subscriptions, it should be properly disposed.
// This can be handled using state management solutions such as
// Provider or Riverpod, or by managing lifecycle within a
// StatefulWidget.
final viewModel = HomeViewModel(
bookingRepository: context.read(),
userRepository: context.read(),
);
return HomeScreen(viewModel: viewModel);
return const HomeScreenContainer();
},
routes: [
GoRoute(

@ -0,0 +1,39 @@
import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart';
import '../../../data/repositories/booking/booking_repository.dart';
import '../../../data/repositories/user/user_repository.dart';
import '../view_models/home_viewmodel.dart';
import 'home_screen.dart';
class HomeScreenContainer extends StatefulWidget {
const HomeScreenContainer({super.key});
@override
State<HomeScreenContainer> createState() => _HomeScreenContainerState();
}
class _HomeScreenContainerState extends State<HomeScreenContainer> {
late final HomeViewModel _viewModel;
@override
void initState() {
super.initState();
_viewModel = HomeViewModel(
bookingRepository: context.read<BookingRepository>(),
userRepository: context.read<UserRepository>(),
);
}
@override
void dispose() {
_viewModel.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return HomeScreen(viewModel: _viewModel);
}
}
Loading…
Cancel
Save