From 93d3dfaf5cbe4c0b941e927c7b06dd36c9967486 Mon Sep 17 00:00:00 2001 From: harshyadavDeveloper Date: Thu, 30 Apr 2026 12:18:36 +0530 Subject: [PATCH 1/2] docs: clarify HomeViewModel lifecycle in Compass sample --- compass_app/app/lib/routing/router.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/compass_app/app/lib/routing/router.dart b/compass_app/app/lib/routing/router.dart index 1ed94ed021e..381a3945f2e 100644 --- a/compass_app/app/lib/routing/router.dart +++ b/compass_app/app/lib/routing/router.dart @@ -42,6 +42,16 @@ 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(), From c82e3b52ffaef04a419ab967dd355eeb4f43fce4 Mon Sep 17 00:00:00 2001 From: Harsh Yadav Date: Thu, 14 May 2026 10:08:59 +0530 Subject: [PATCH 2/2] refactor: manage HomeViewModel lifecycle in StatefulWidget --- compass_app/app/lib/routing/router.dart | 19 +-------- .../home/widgets/home_screen_container.dart | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 compass_app/app/lib/ui/home/widgets/home_screen_container.dart diff --git a/compass_app/app/lib/routing/router.dart b/compass_app/app/lib/routing/router.dart index 381a3945f2e..a942db0d356 100644 --- a/compass_app/app/lib/routing/router.dart +++ b/compass_app/app/lib/routing/router.dart @@ -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( diff --git a/compass_app/app/lib/ui/home/widgets/home_screen_container.dart b/compass_app/app/lib/ui/home/widgets/home_screen_container.dart new file mode 100644 index 00000000000..529e067a1a7 --- /dev/null +++ b/compass_app/app/lib/ui/home/widgets/home_screen_container.dart @@ -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 createState() => _HomeScreenContainerState(); +} + +class _HomeScreenContainerState extends State { + late final HomeViewModel _viewModel; + + @override + void initState() { + super.initState(); + + _viewModel = HomeViewModel( + bookingRepository: context.read(), + userRepository: context.read(), + ); + } + + @override + void dispose() { + _viewModel.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return HomeScreen(viewModel: _viewModel); + } +}