create-flutterinit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/bin/index.ts +3 -0
  2. package/package.json +46 -0
  3. package/templates/base/.cursor/rules/flutter-project.mdc.hbs +132 -0
  4. package/templates/base/AGENTS.md.hbs +137 -0
  5. package/templates/base/DESIGN.md.hbs +149 -0
  6. package/templates/base/README.md.hbs +19 -0
  7. package/templates/base/SETUP.md.hbs +253 -0
  8. package/templates/base/analysis_options.yaml +88 -0
  9. package/templates/base/assets/.keep +1 -0
  10. package/templates/base/assets/icons/apple.svg +1 -0
  11. package/templates/base/assets/icons/facebook.svg +1 -0
  12. package/templates/base/assets/icons/google.svg +1 -0
  13. package/templates/base/assets/images/.gitkeep +0 -0
  14. package/templates/base/flutter_native_splash.yaml.hbs +8 -0
  15. package/templates/base/lib/main.dart.hbs +43 -0
  16. package/templates/base/lib/src/app.dart.hbs +105 -0
  17. package/templates/base/lib/src/config/app_config.dart.hbs +112 -0
  18. package/templates/base/lib/src/extensions/collection_extension.dart.hbs +55 -0
  19. package/templates/base/lib/src/extensions/context_extension.dart.hbs +167 -0
  20. package/templates/base/lib/src/extensions/date_time_extension.dart.hbs +40 -0
  21. package/templates/base/lib/src/extensions/extensions.dart.hbs +6 -0
  22. package/templates/base/lib/src/extensions/num_extension.dart.hbs +14 -0
  23. package/templates/base/lib/src/extensions/string_extension.dart.hbs +91 -0
  24. package/templates/base/lib/src/extensions/widget_extension.dart.hbs +47 -0
  25. package/templates/base/lib/src/imports/core_imports.dart.hbs +50 -0
  26. package/templates/base/lib/src/imports/imports.dart.hbs +2 -0
  27. package/templates/base/lib/src/imports/packages_imports.dart.hbs +110 -0
  28. package/templates/base/lib/src/routing/(isGetX)@app_bindings.dart.hbs +23 -0
  29. package/templates/base/lib/src/routing/app_router.dart.hbs +252 -0
  30. package/templates/base/lib/src/routing/app_routes.dart.hbs +46 -0
  31. package/templates/base/lib/src/routing/global_navigator.dart.hbs +15 -0
  32. package/templates/base/lib/src/services/auth_service.dart.hbs +78 -0
  33. package/templates/base/lib/src/services/copy_service.dart.hbs +16 -0
  34. package/templates/base/lib/src/services/internet_connection_service.dart.hbs +10 -0
  35. package/templates/base/lib/src/services/services.dart.hbs +45 -0
  36. package/templates/base/lib/src/shared/app_assets.dart.hbs +15 -0
  37. package/templates/base/lib/src/shared/enums/app_status.dart.hbs +40 -0
  38. package/templates/base/lib/src/shared/enums/button_enums.dart.hbs +22 -0
  39. package/templates/base/lib/src/shared/enums/enums.dart.hbs +3 -0
  40. package/templates/base/lib/src/shared/enums/snack_bar_type.dart.hbs +22 -0
  41. package/templates/base/lib/src/shared/helpers/format_number.dart.hbs +18 -0
  42. package/templates/base/lib/src/shared/helpers/imports.dart.hbs +3 -0
  43. package/templates/base/lib/src/shared/helpers/show_app_sheet.dart.hbs +42 -0
  44. package/templates/base/lib/src/shared/helpers/show_dialog.dart.hbs +49 -0
  45. package/templates/base/lib/src/shared/helpers/show_toast.dart.hbs +92 -0
  46. package/templates/base/lib/src/shared/hooks/hooks.dart.hbs +13 -0
  47. package/templates/base/lib/src/shared/hooks/use_copy.dart.hbs +41 -0
  48. package/templates/base/lib/src/shared/hooks/use_timer.dart.hbs +158 -0
  49. package/templates/base/lib/src/shared/shared.dart.hbs +12 -0
  50. package/templates/base/lib/src/shared/widgets/app_button.dart.hbs +144 -0
  51. package/templates/base/lib/src/shared/widgets/app_card.dart.hbs +126 -0
  52. package/templates/base/lib/src/shared/widgets/app_divider.dart.hbs +88 -0
  53. package/templates/base/lib/src/shared/widgets/app_empty_state.dart.hbs +73 -0
  54. package/templates/base/lib/src/shared/widgets/app_error_widget.dart.hbs +69 -0
  55. package/templates/base/lib/src/shared/widgets/app_icon.dart.hbs +25 -0
  56. package/templates/base/lib/src/shared/widgets/app_loading.dart.hbs +54 -0
  57. package/templates/base/lib/src/shared/widgets/app_text_field.dart.hbs +89 -0
  58. package/templates/base/lib/src/shared/widgets/app_top_bar.dart.hbs +105 -0
  59. package/templates/base/lib/src/shared/widgets/common_image.dart.hbs +120 -0
  60. package/templates/base/lib/src/shared/widgets/toast/imports.dart.hbs +4 -0
  61. package/templates/base/lib/src/shared/widgets/toast/raw_toast.dart.hbs +109 -0
  62. package/templates/base/lib/src/shared/widgets/toast/toast.dart.hbs +142 -0
  63. package/templates/base/lib/src/shared/widgets/toast/toast_card.dart.hbs +57 -0
  64. package/templates/base/lib/src/shared/widgets/widgets.dart.hbs +14 -0
  65. package/templates/base/lib/src/shared/wrappers/(isRiverpod,isProvider,isBloc,isGetX,isMobX)@state_wrapper.dart.hbs +51 -0
  66. package/templates/base/lib/src/shared/wrappers/(supportsLocalization)@localization_wrapper.dart.hbs +25 -0
  67. package/templates/base/lib/src/shared/wrappers/(usesScreenutil)@screen_util_wrapper.dart.hbs +27 -0
  68. package/templates/base/lib/src/shared/wrappers/(usesSkeletonizer)@skeleton_wrapper.dart.hbs +81 -0
  69. package/templates/base/lib/src/shared/wrappers/session_listener_wrapper.dart.hbs +258 -0
  70. package/templates/base/lib/src/shared/wrappers/wrappers.dart.hbs +15 -0
  71. package/templates/base/lib/src/theme/app_borders.dart.hbs +70 -0
  72. package/templates/base/lib/src/theme/app_curves.dart.hbs +69 -0
  73. package/templates/base/lib/src/theme/app_durations.dart.hbs +48 -0
  74. package/templates/base/lib/src/theme/app_shadows.dart.hbs +73 -0
  75. package/templates/base/lib/src/theme/app_spacing.dart.hbs +80 -0
  76. package/templates/base/lib/src/theme/color_schemes.dart.hbs +126 -0
  77. package/templates/base/lib/src/theme/text_theme.dart.hbs +167 -0
  78. package/templates/base/lib/src/theme/theme.dart.hbs +431 -0
  79. package/templates/base/lib/src/theme/theme_constants.dart.hbs +20 -0
  80. package/templates/base/lib/src/utils/app_utils.dart.hbs +46 -0
  81. package/templates/base/lib/src/utils/debouncer.dart.hbs +31 -0
  82. package/templates/base/lib/src/utils/error_handler.dart.hbs +14 -0
  83. package/templates/base/lib/src/utils/failure.dart.hbs +30 -0
  84. package/templates/base/lib/src/utils/input_formatters.dart.hbs +27 -0
  85. package/templates/base/lib/src/utils/logger.dart.hbs +37 -0
  86. package/templates/base/lib/src/utils/platform_info.dart.hbs +13 -0
  87. package/templates/base/lib/src/utils/task_runner.dart.hbs +42 -0
  88. package/templates/base/lib/src/utils/typedefs.dart.hbs +6 -0
  89. package/templates/base/lib/src/utils/utils.dart.hbs +9 -0
  90. package/templates/base/pubspec.yaml.hbs +256 -0
  91. package/templates/base/test/widget_test.dart.hbs +56 -0
  92. package/templates/overlays/architecture/clean/architecture.md +6 -0
  93. package/templates/overlays/architecture/clean/lib/src/features/auth/data/models/user_model.dart.hbs +1 -0
  94. package/templates/overlays/architecture/clean/lib/src/features/auth/data/repositories/auth_repository_impl.dart.hbs +1 -0
  95. package/templates/overlays/architecture/clean/lib/src/features/auth/domain/entities/user.dart.hbs +1 -0
  96. package/templates/overlays/architecture/clean/lib/src/features/auth/domain/repositories/auth_repository.dart.hbs +1 -0
  97. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isBloc)@auth_bloc.dart.hbs +1 -0
  98. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isBloc)@session_bloc.dart.hbs +1 -0
  99. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isGetX)@auth_controller.dart.hbs +1 -0
  100. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isGetX)@session_controller.dart.hbs +1 -0
  101. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isMobX)@auth_store.dart.hbs +1 -0
  102. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isMobX)@session_store.dart.hbs +1 -0
  103. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isNoneState)@session_manager.dart.hbs +1 -0
  104. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isProvider,isRiverpod)@auth_provider.dart.hbs +1 -0
  105. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/providers/(isProvider,isRiverpod)@session_provider.dart.hbs +1 -0
  106. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/screens/forgot_password_screen.dart.hbs +1 -0
  107. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/screens/login_screen.dart.hbs +1 -0
  108. package/templates/overlays/architecture/clean/lib/src/features/auth/presentation/screens/signup_screen.dart.hbs +1 -0
  109. package/templates/overlays/architecture/clean/lib/src/features/home/presentation/screens/home_page.dart.hbs +1 -0
  110. package/templates/overlays/architecture/clean/lib/src/features/onboarding/presentation/screens/onboarding_page.dart.hbs +1 -0
  111. package/templates/overlays/architecture/feature-first/architecture.md +5 -0
  112. package/templates/overlays/architecture/feature-first/lib/src/features/auth/data/models/user_model.dart.hbs +1 -0
  113. package/templates/overlays/architecture/feature-first/lib/src/features/auth/data/repositories/auth_repository_impl.dart.hbs +1 -0
  114. package/templates/overlays/architecture/feature-first/lib/src/features/auth/domain/entities/user.dart.hbs +1 -0
  115. package/templates/overlays/architecture/feature-first/lib/src/features/auth/domain/repositories/auth_repository.dart.hbs +1 -0
  116. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isBloc)@auth_bloc.dart.hbs +1 -0
  117. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isBloc)@session_bloc.dart.hbs +1 -0
  118. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isGetX)@auth_controller.dart.hbs +1 -0
  119. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isGetX)@session_controller.dart.hbs +1 -0
  120. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isMobX)@auth_store.dart.hbs +1 -0
  121. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isMobX)@session_store.dart.hbs +1 -0
  122. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isNoneState)@session_manager.dart.hbs +1 -0
  123. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isProvider,isRiverpod)@auth_provider.dart.hbs +1 -0
  124. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/providers/(isProvider,isRiverpod)@session_provider.dart.hbs +1 -0
  125. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/screens/forgot_password_screen.dart.hbs +1 -0
  126. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/screens/login_screen.dart.hbs +1 -0
  127. package/templates/overlays/architecture/feature-first/lib/src/features/auth/presentation/screens/signup_screen.dart.hbs +1 -0
  128. package/templates/overlays/architecture/feature-first/lib/src/features/home/presentation/screens/home_page.dart.hbs +1 -0
  129. package/templates/overlays/architecture/feature-first/lib/src/features/onboarding/presentation/screens/onboarding_page.dart.hbs +1 -0
  130. package/templates/overlays/architecture/layer-first/architecture.md +6 -0
  131. package/templates/overlays/architecture/layer-first/lib/src/data/datasources/local/.gitkeep +0 -0
  132. package/templates/overlays/architecture/layer-first/lib/src/data/datasources/remote/.gitkeep +0 -0
  133. package/templates/overlays/architecture/layer-first/lib/src/data/models/user_model.dart.hbs +1 -0
  134. package/templates/overlays/architecture/layer-first/lib/src/data/repositories/auth_repository_impl.dart.hbs +1 -0
  135. package/templates/overlays/architecture/layer-first/lib/src/domain/entities/user.dart.hbs +1 -0
  136. package/templates/overlays/architecture/layer-first/lib/src/domain/repositories/auth_repository.dart.hbs +1 -0
  137. package/templates/overlays/architecture/layer-first/lib/src/domain/usecases/auth/.gitkeep +0 -0
  138. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isBloc)@auth_bloc.dart.hbs +1 -0
  139. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isBloc)@session_bloc.dart.hbs +1 -0
  140. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isGetX)@auth_controller.dart.hbs +1 -0
  141. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isGetX)@session_controller.dart.hbs +1 -0
  142. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isMobX)@auth_store.dart.hbs +1 -0
  143. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isMobX)@session_store.dart.hbs +1 -0
  144. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isNoneState)@auth_view_model.dart.hbs +1 -0
  145. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isNoneState)@session_manager.dart.hbs +1 -0
  146. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isProvider,isRiverpod)@auth_provider.dart.hbs +1 -0
  147. package/templates/overlays/architecture/layer-first/lib/src/presentation/providers/(isProvider,isRiverpod)@session_provider.dart.hbs +1 -0
  148. package/templates/overlays/architecture/layer-first/lib/src/presentation/screens/auth/forgot_password_screen.dart.hbs +1 -0
  149. package/templates/overlays/architecture/layer-first/lib/src/presentation/screens/auth/login_screen.dart.hbs +1 -0
  150. package/templates/overlays/architecture/layer-first/lib/src/presentation/screens/auth/signup_screen.dart.hbs +1 -0
  151. package/templates/overlays/architecture/layer-first/lib/src/presentation/screens/home/home_page.dart.hbs +1 -0
  152. package/templates/overlays/architecture/layer-first/lib/src/presentation/screens/onboarding/onboarding_page.dart.hbs +1 -0
  153. package/templates/overlays/architecture/layer-first/lib/src/presentation/widgets/.gitkeep +0 -0
  154. package/templates/overlays/architecture/mvc/architecture.md +5 -0
  155. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isBloc)@auth_bloc.dart.hbs +1 -0
  156. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isBloc)@session_bloc.dart.hbs +1 -0
  157. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isGetX)@auth_controller.dart.hbs +1 -0
  158. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isGetX)@session_controller.dart.hbs +1 -0
  159. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isMobX)@auth_store.dart.hbs +1 -0
  160. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isMobX)@session_store.dart.hbs +1 -0
  161. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isNoneState)@session_manager.dart.hbs +1 -0
  162. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isProvider,isRiverpod)@auth_provider.dart.hbs +1 -0
  163. package/templates/overlays/architecture/mvc/lib/src/controllers/auth/(isProvider,isRiverpod)@session_provider.dart.hbs +1 -0
  164. package/templates/overlays/architecture/mvc/lib/src/models/user_model.dart.hbs +1 -0
  165. package/templates/overlays/architecture/mvc/lib/src/services/auth_repository.dart.hbs +1 -0
  166. package/templates/overlays/architecture/mvc/lib/src/services/auth_repository_impl.dart.hbs +1 -0
  167. package/templates/overlays/architecture/mvc/lib/src/views/auth/forgot_password_screen.dart.hbs +1 -0
  168. package/templates/overlays/architecture/mvc/lib/src/views/auth/login_screen.dart.hbs +1 -0
  169. package/templates/overlays/architecture/mvc/lib/src/views/auth/signup_screen.dart.hbs +1 -0
  170. package/templates/overlays/architecture/mvc/lib/src/views/home/home_page.dart.hbs +1 -0
  171. package/templates/overlays/architecture/mvc/lib/src/views/onboarding/onboarding_page.dart.hbs +1 -0
  172. package/templates/overlays/architecture/mvvm/architecture.md +6 -0
  173. package/templates/overlays/architecture/mvvm/lib/src/data/models/user_model.dart.hbs +1 -0
  174. package/templates/overlays/architecture/mvvm/lib/src/data/repositories/auth_repository.dart.hbs +1 -0
  175. package/templates/overlays/architecture/mvvm/lib/src/data/repositories/auth_repository_impl.dart.hbs +1 -0
  176. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isBloc)@bloc/auth_bloc.dart.hbs +1 -0
  177. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isBloc)@bloc/session_bloc.dart.hbs +1 -0
  178. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isGetX)@controllers/auth_controller.dart.hbs +1 -0
  179. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isGetX)@controllers/session_controller.dart.hbs +1 -0
  180. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isMobX)@stores/auth_store.dart.hbs +1 -0
  181. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isMobX)@stores/session_store.dart.hbs +1 -0
  182. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isNoneState)@view_models/auth_view_model.dart.hbs +1 -0
  183. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isNoneState)@view_models/session_manager.dart.hbs +1 -0
  184. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isProvider,isRiverpod)@providers/auth_provider.dart.hbs +1 -0
  185. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/(isProvider,isRiverpod)@providers/session_provider.dart.hbs +1 -0
  186. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/forgot_password_screen.dart.hbs +1 -0
  187. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/login_screen.dart.hbs +1 -0
  188. package/templates/overlays/architecture/mvvm/lib/src/ui/auth/signup_screen.dart.hbs +1 -0
  189. package/templates/overlays/architecture/mvvm/lib/src/ui/home/home_page.dart.hbs +1 -0
  190. package/templates/overlays/architecture/mvvm/lib/src/ui/onboarding/onboarding_page.dart.hbs +1 -0
  191. package/templates/overlays/backend/appwrite/lib/src/services/(usesAppwriteAuth)@auth_service.dart.hbs +101 -0
  192. package/templates/overlays/backend/custom/lib/src/services/auth_service.dart.hbs +158 -0
  193. package/templates/overlays/backend/firebase/lib/src/services/(usesFirebaseAuth)@auth_service.dart.hbs +96 -0
  194. package/templates/overlays/backend/supabase/lib/src/services/(usesSupabaseAuth)@auth_service.dart.hbs +97 -0
  195. package/templates/overlays/device/app_version_update/lib/src/services/(usesAppVersionUpdate)@version_update_service.dart.hbs +118 -0
  196. package/templates/overlays/device/device_info/lib/src/services/(usesDeviceInfoPlus)@device_info_service.dart.hbs +54 -0
  197. package/templates/overlays/extras/dotenv/.env.hbs +33 -0
  198. package/templates/overlays/extras/flavors/lib/src/flavors.dart.hbs +15 -0
  199. package/templates/overlays/extras/localization/assets/translations/en.json.hbs +47 -0
  200. package/templates/overlays/media/lib/src/services/(usesImagePicker,usesFilePicker)@media_service.dart.hbs +148 -0
  201. package/templates/overlays/networking/cached_image/lib/src/shared/widgets/app_cached_image.dart.hbs +160 -0
  202. package/templates/overlays/networking/dio/lib/src/services/(usesDio)@dio_service.dart.hbs +50 -0
  203. package/templates/overlays/networking/http/lib/src/services/(usesHttp)@http_service.dart.hbs +82 -0
  204. package/templates/overlays/storage/hive/lib/src/services/(usesHive)@hive_service.dart.hbs +59 -0
  205. package/templates/overlays/storage/secure_storage/lib/src/services/(usesSecureStorage)@secure_storage_service.dart.hbs +39 -0
  206. package/templates/overlays/storage/shared_preferences/lib/src/services/(usesSharedPreferences)@storage_service.dart.hbs +53 -0
  207. package/templates/overlays/utilities/geolocator/lib/src/services/(usesGeolocator)@location_service.dart.hbs +78 -0
  208. package/templates/overlays/utilities/path_provider/lib/src/services/(usesPathProvider)@path_service.dart.hbs +30 -0
  209. package/templates/overlays/utilities/permission_handler/lib/src/services/(usesPermissionHandler)@permission_service.dart.hbs +28 -0
  210. package/templates/overlays/utilities/permission_handler/lib/src/shared/hooks/use_permission.dart.hbs +44 -0
  211. package/templates/overlays/utilities/share_plus/lib/src/services/(usesSharePlus)@share_service.dart.hbs +22 -0
  212. package/templates/overlays/utilities/share_plus/lib/src/shared/hooks/use_share.dart.hbs +26 -0
  213. package/templates/overlays/utilities/url_launcher/lib/src/services/(usesUrlLauncher)@url_launcher_service.dart.hbs +37 -0
  214. package/templates/overlays/utilities/url_launcher/lib/src/shared/hooks/use_launch_url.dart.hbs +52 -0
  215. package/templates/partials/features/auth/auth_logic.hbs +611 -0
  216. package/templates/partials/features/auth/auth_repository.hbs +32 -0
  217. package/templates/partials/features/auth/auth_repository_impl.hbs +116 -0
  218. package/templates/partials/features/auth/forgot_password_screen.hbs +368 -0
  219. package/templates/partials/features/auth/login_screen.hbs +540 -0
  220. package/templates/partials/features/auth/session_provider.hbs +437 -0
  221. package/templates/partials/features/auth/signup_screen.hbs +511 -0
  222. package/templates/partials/features/auth/user_model.hbs +23 -0
  223. package/templates/partials/features/home/home_page.hbs +156 -0
  224. package/templates/partials/features/onboarding/onboarding_page.hbs +264 -0
  225. package/templates/partials/llm/add-feature-workflow.hbs +38 -0
  226. package/templates/partials/llm/architecture-rules.hbs +92 -0
  227. package/templates/partials/llm/backend-rules.hbs +30 -0
  228. package/templates/partials/llm/build-runner-note.hbs +15 -0
  229. package/templates/partials/llm/design-quick-ref.hbs +14 -0
  230. package/templates/partials/llm/design-quick-reference.hbs +14 -0
  231. package/templates/partials/llm/navigation-rules.hbs +27 -0
  232. package/templates/partials/llm/networking-rules.hbs +16 -0
  233. package/templates/partials/llm/packages-list.hbs +26 -0
  234. package/templates/partials/llm/services-conventions.hbs +20 -0
  235. package/templates/partials/llm/stack-summary.hbs +22 -0
  236. package/templates/partials/llm/state-management-rules.hbs +40 -0
  237. package/templates/partials/state_label.hbs +1 -0
@@ -0,0 +1,167 @@
1
+ import 'package:flutter/material.dart';
2
+ {{#if (eq flags.routerPackage "go_router")}}
3
+ import 'package:go_router/go_router.dart';
4
+ {{/if}}
5
+
6
+ import '../theme/color_schemes.dart';
7
+ import '../theme/theme.dart';
8
+ import '../shared/enums/snack_bar_type.dart';
9
+
10
+ extension ContextExtension on BuildContext {
11
+ // ── Theme shortcuts ──────────────────────────────────────────────────────
12
+ ThemeData get theme => Theme.of(this);
13
+ TextTheme get typography => theme.textTheme;
14
+ TextTheme get textTheme => theme.textTheme;
15
+ ColorScheme get colors => theme.colorScheme;
16
+ bool get isDarkMode => theme.brightness == Brightness.dark;
17
+
18
+ /// Semantic/custom colors (success, warning, info).
19
+ AppColorsExtension get appColors =>
20
+ theme.extension<AppColorsExtension>() ?? (isDarkMode ? AppPalettes.dark : AppPalettes.light);
21
+
22
+ /// Design tokens (spacing, border radii, elevation defaults).
23
+ AppDesignTokens get designTokens =>
24
+ theme.extension<AppDesignTokens>() ?? AppDesignTokens.fallback;
25
+
26
+ // ── MediaQuery shortcuts ─────────────────────────────────────────────────
27
+ Size get mediaQuerySize => MediaQuery.sizeOf(this);
28
+ Size get screenSize => mediaQuerySize;
29
+ double get width => mediaQuerySize.width;
30
+ double get height => mediaQuerySize.height;
31
+
32
+ /// Safe-area insets for the current view.
33
+ EdgeInsets get safeArea => MediaQuery.paddingOf(this);
34
+
35
+ // ── Keyboard ──────────────────────────────────────────────────────────────
36
+ bool get isKeyboardVisible => MediaQuery.viewInsetsOf(this).bottom > 0;
37
+ void hideKeyboard() => FocusScope.of(this).unfocus();
38
+
39
+ // ── Platform ─────────────────────────────────────────────────────────────
40
+ bool get isIOS => theme.platform == TargetPlatform.iOS;
41
+ bool get isAndroid => theme.platform == TargetPlatform.android;
42
+
43
+ // ── Overlays ─────────────────────────────────────────────────────────────
44
+ void showSnackBar(
45
+ String message, {
46
+ SnackBarAction? action,
47
+ Duration duration = const Duration(seconds: 3),
48
+ }) {
49
+ ScaffoldMessenger.of(this)
50
+ ..clearSnackBars()
51
+ ..showSnackBar(
52
+ SnackBar(
53
+ content: Text(message),
54
+ action: action,
55
+ duration: duration,
56
+ ),
57
+ );
58
+ }
59
+
60
+ void showSuccessSnackBar(String message) {
61
+ ScaffoldMessenger.of(this)
62
+ ..clearSnackBars()
63
+ ..showSnackBar(
64
+ SnackBar(
65
+ content: Text(message),
66
+ backgroundColor: appColors.success,
67
+ ),
68
+ );
69
+ }
70
+
71
+ void showErrorSnackBar(String message) {
72
+ ScaffoldMessenger.of(this)
73
+ ..clearSnackBars()
74
+ ..showSnackBar(
75
+ SnackBar(
76
+ content: Text(message),
77
+ backgroundColor: colors.error,
78
+ ),
79
+ );
80
+ }
81
+
82
+ Future<T?> showAppBottomSheet<T>({
83
+ required WidgetBuilder builder,
84
+ bool isScrollControlled = true,
85
+ bool useSafeArea = true,
86
+ }) {
87
+ return showModalBottomSheet<T>(
88
+ context: this,
89
+ builder: builder,
90
+ isScrollControlled: isScrollControlled,
91
+ useSafeArea: useSafeArea,
92
+ );
93
+ }
94
+
95
+ Future<T?> showAppDialog<T>({required WidgetBuilder builder}) {
96
+ return showDialog<T>(
97
+ context: this,
98
+ builder: builder,
99
+ );
100
+ }
101
+
102
+ /// Shows a snackbar with a colour driven by [SnackBarType].
103
+ ///
104
+ /// ```dart
105
+ /// context.showTypedSnackBar('Saved!', type: SnackBarType.success);
106
+ /// ```
107
+ void showTypedSnackBar(
108
+ String message, {
109
+ SnackBarType type = SnackBarType.info,
110
+ Duration duration = const Duration(seconds: 3),
111
+ }) {
112
+ final bg = switch (type) {
113
+ SnackBarType.success => appColors.success,
114
+ SnackBarType.warning => appColors.warning,
115
+ SnackBarType.error => colors.error,
116
+ SnackBarType.info => colors.inverseSurface,
117
+ };
118
+ ScaffoldMessenger.of(this)
119
+ ..clearSnackBars()
120
+ ..showSnackBar(
121
+ SnackBar(
122
+ content: Text(message),
123
+ backgroundColor: bg,
124
+ duration: duration,
125
+ ),
126
+ );
127
+ }
128
+
129
+ // ── Routing shortcuts ────────────────────────────────────────────────────
130
+ {{#if (eq flags.routerPackage "go_router")}}
131
+ String get currentRoute {
132
+ final router = GoRouter.of(this);
133
+ final RouteMatch lastMatch = router.routerDelegate.currentConfiguration.last;
134
+ final RouteMatchList matchList = lastMatch is ImperativeRouteMatch
135
+ ? lastMatch.matches
136
+ : router.routerDelegate.currentConfiguration;
137
+ return matchList.uri.toString();
138
+ }
139
+ {{/if}}
140
+
141
+ {{#unless flags.routerPackage}}
142
+ void pop<T extends Object?>([T? result]) => Navigator.of(this).pop<T>(result);
143
+
144
+ Future<T?> push<T extends Object?>(Route<T> route) {
145
+ return Navigator.of(this).push<T>(route);
146
+ }
147
+
148
+ Future<T?> pushNamed<T extends Object?>(
149
+ String routeName, {
150
+ Object? arguments,
151
+ }) {
152
+ return Navigator.of(this).pushNamed<T>(routeName, arguments: arguments);
153
+ }
154
+
155
+ Future<T?> pushReplacementNamed<T extends Object?, TO extends Object?>(
156
+ String routeName, {
157
+ TO? result,
158
+ Object? arguments,
159
+ }) {
160
+ return Navigator.of(this).pushReplacementNamed<T, TO>(
161
+ routeName,
162
+ result: result,
163
+ arguments: arguments,
164
+ );
165
+ }
166
+ {{/unless}}
167
+ }
@@ -0,0 +1,40 @@
1
+ extension DateTimeExtension on DateTime {
2
+ bool get isToday {
3
+ final now = DateTime.now();
4
+ return year == now.year && month == now.month && day == now.day;
5
+ }
6
+
7
+ bool get isYesterday {
8
+ final yesterday = DateTime.now().subtract(const Duration(days: 1));
9
+ return year == yesterday.year && month == yesterday.month && day == yesterday.day;
10
+ }
11
+
12
+ bool isSameDay(DateTime other) {
13
+ return year == other.year && month == other.month && day == other.day;
14
+ }
15
+
16
+ String get toIso8601DateOnly {
17
+ return '${year.toString().padLeft(4, '0')}-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
18
+ }
19
+
20
+ String timeAgo() {
21
+ final now = DateTime.now();
22
+ final difference = now.difference(this);
23
+
24
+ if (difference.inDays > 365) {
25
+ return '${(difference.inDays / 365).floor()} years ago';
26
+ } else if (difference.inDays > 30) {
27
+ return '${(difference.inDays / 30).floor()} months ago';
28
+ } else if (difference.inDays > 7) {
29
+ return '${(difference.inDays / 7).floor()} weeks ago';
30
+ } else if (difference.inDays >= 1) {
31
+ return '${difference.inDays} days ago';
32
+ } else if (difference.inHours >= 1) {
33
+ return '${difference.inHours} hours ago';
34
+ } else if (difference.inMinutes >= 1) {
35
+ return '${difference.inMinutes} minutes ago';
36
+ } else {
37
+ return 'just now';
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,6 @@
1
+ export 'collection_extension.dart';
2
+ export 'context_extension.dart';
3
+ export 'date_time_extension.dart';
4
+ export 'num_extension.dart';
5
+ export 'string_extension.dart';
6
+ export 'widget_extension.dart';
@@ -0,0 +1,14 @@
1
+ import 'package:flutter/material.dart';
2
+
3
+ extension NumExtension on num {
4
+ // SizedBox generators
5
+ Widget get kH => SizedBox(height: toDouble());
6
+ Widget get kW => SizedBox(width: toDouble());
7
+
8
+ // BorderRadius helpers
9
+ BorderRadius get radius => BorderRadius.circular(toDouble());
10
+
11
+ // Duration helpers
12
+ Duration get ms => Duration(milliseconds: toInt());
13
+ Duration get seconds => Duration(seconds: toInt());
14
+ }
@@ -0,0 +1,91 @@
1
+ extension StringExtension on String {
2
+ // Validators
3
+ bool get isValidEmail {
4
+ return RegExp(
5
+ r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9]+\.[a-zA-Z]+",
6
+ ).hasMatch(this);
7
+ }
8
+
9
+ bool get isValidPhoneNumber {
10
+ if (length > 16 || length < 9) return false;
11
+ return RegExp(r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$').hasMatch(this);
12
+ }
13
+
14
+ bool get isValidUrl {
15
+ return RegExp(
16
+ r"^((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\://)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&amp;%\$#\=~_\-]+))*$",
17
+ ).hasMatch(this);
18
+ }
19
+
20
+ // Formatters
21
+ String get capitalizeFirst {
22
+ if (isEmpty) return this;
23
+ return this[0].toUpperCase() + substring(1).toLowerCase();
24
+ }
25
+
26
+ String get toTitleCase {
27
+ if (isEmpty) return this;
28
+ return split(' ').map((str) => str.capitalizeFirst).join(' ');
29
+ }
30
+
31
+ String toK() {
32
+ final value = double.tryParse(this);
33
+ if (value == null) return this;
34
+ if (value >= 1000000) {
35
+ return '${(value / 1000000).toStringAsFixed(value % 1000000 == 0 ? 0 : 1)}M';
36
+ } else if (value >= 1000) {
37
+ return '${(value / 1000).toStringAsFixed(value % 1000 == 0 ? 0 : 1)}k';
38
+ }
39
+ return this;
40
+ }
41
+
42
+ // Safe Parsers
43
+ int? get toIntOrNull => int.tryParse(this);
44
+ double? get toDoubleOrNull => double.tryParse(this);
45
+
46
+ // Localization markers
47
+ String get hardcoded => this;
48
+
49
+ // Aliases for validation
50
+ bool get isPhoneNumber => isValidPhoneNumber;
51
+ bool get isURL => isValidUrl;
52
+ bool get isEmail => isValidEmail;
53
+
54
+ // Privacy helpers
55
+ String get maskEmail {
56
+ if (!isEmail) return this;
57
+ final parts = split('@');
58
+ final name = parts[0];
59
+ final domain = parts[1];
60
+ if (name.length <= 2) return this;
61
+ return '${name.substring(0, 2)}****@$domain';
62
+ }
63
+
64
+ String maskCenter([int visibleChars = 4]) {
65
+ if (length <= visibleChars) return this;
66
+ final maskedLength = length - visibleChars;
67
+ final start = (length - maskedLength) ~/ 2;
68
+ return replaceRange(start, start + maskedLength, '*' * maskedLength);
69
+ }
70
+
71
+ // UI Helpers
72
+ /// Converts hex string to Color object
73
+ /// Supports: #RRGGBB, RRGGBB, #AARRGGBB, AARRGGBB
74
+ dynamic toColor() {
75
+ // Note: dynamic return to avoid importing Material in this logic-only file
76
+ // The user can cast it to Color or we can import material here
77
+ var hexColor = replaceAll('#', '');
78
+ if (hexColor.length == 6) {
79
+ hexColor = 'FF$hexColor';
80
+ }
81
+ if (hexColor.length == 8) {
82
+ return int.parse('0x$hexColor');
83
+ }
84
+ return null;
85
+ }
86
+ }
87
+
88
+ extension StringOptionalExtension on String? {
89
+ bool get isNullOrEmpty => this == null || this!.trim().isEmpty;
90
+ bool get isNotNullOrEmpty => !isNullOrEmpty;
91
+ }
@@ -0,0 +1,47 @@
1
+ import '../imports/imports.dart';
2
+
3
+ extension WidgetExtension on Widget {
4
+ /// Wrap the widget with Padding
5
+ Widget paddingAll(double value) => Padding(
6
+ padding: EdgeInsets.all(value),
7
+ child: this,
8
+ );
9
+
10
+ Widget paddingSymmetric({double horizontal = 0, double vertical = 0}) => Padding(
11
+ padding: EdgeInsets.symmetric(horizontal: horizontal, vertical: vertical),
12
+ child: this,
13
+ );
14
+
15
+ Widget paddingOnly({
16
+ double left = 0,
17
+ double top = 0,
18
+ double right = 0,
19
+ double bottom = 0,
20
+ }) =>
21
+ Padding(
22
+ padding: EdgeInsets.only(left: left, top: top, right: right, bottom: bottom),
23
+ child: this,
24
+ );
25
+
26
+ /// Wrap the widget with Opacity
27
+ Widget opacity(double value) => Opacity(opacity: value, child: this);
28
+
29
+ /// Wrap the widget with Visibility
30
+ Widget visible(bool visible, {Widget fallback = const SizedBox.shrink()}) =>
31
+ visible ? this : fallback;
32
+
33
+ /// Wrap the widget with Center
34
+ Widget get center => Center(child: this);
35
+
36
+ /// Wrap the widget with Expanded
37
+ Widget get expanded => Expanded(child: this);
38
+
39
+ /// Wrap the widget with FittedBox
40
+ Widget get fitted => FittedBox(child: this);
41
+
42
+ /// Wrap the widget with Hero
43
+ Widget hero(Object tag) => Hero(tag: tag, child: this);
44
+
45
+ /// Wrap the widget with InkWell
46
+ Widget tooltip(String message) => Tooltip(message: message, child: this);
47
+ }
@@ -0,0 +1,50 @@
1
+ // Flutter SDK
2
+ export 'package:flutter/material.dart';
3
+ export 'package:flutter/cupertino.dart' hide RefreshCallback;
4
+ export 'package:flutter/foundation.dart';
5
+ export 'package:flutter/services.dart';
6
+ {{#if flags.usesFlutterNativeSplash}}
7
+ export 'package:flutter_native_splash/flutter_native_splash.dart';
8
+ {{/if}}
9
+
10
+ {{#if flags.supportsLocalization}}
11
+ export 'package:easy_localization/easy_localization.dart' hide TextDirection, MapExtension;
12
+ {{/if}}
13
+
14
+ // Project Core — everything exported through shared.dart (theme, extensions,
15
+ // utils, widgets, enums) plus routing and services.
16
+ export '../config/app_config.dart';
17
+ export '../routing/app_router.dart';
18
+ export '../routing/app_routes.dart';
19
+ export '../routing/global_navigator.dart';
20
+ {{#if flags.isGetX}}
21
+ export '../routing/app_bindings.dart';
22
+ {{/if}}
23
+ export '../services/services.dart';
24
+ export '../shared/shared.dart';
25
+
26
+ {{#if (eq architecture "layer-first")}}
27
+ export '../presentation/screens/auth/login_screen.dart';
28
+ export '../presentation/screens/auth/signup_screen.dart';
29
+ export '../presentation/screens/auth/forgot_password_screen.dart';
30
+ export '../presentation/screens/home/home_page.dart';
31
+ export '../presentation/screens/onboarding/onboarding_page.dart';
32
+ {{else if (eq architecture "mvc")}}
33
+ export '../views/auth/login_screen.dart';
34
+ export '../views/auth/signup_screen.dart';
35
+ export '../views/auth/forgot_password_screen.dart';
36
+ export '../views/home/home_page.dart';
37
+ export '../views/onboarding/onboarding_page.dart';
38
+ {{else if (eq architecture "mvvm")}}
39
+ export '../ui/auth/login_screen.dart';
40
+ export '../ui/auth/signup_screen.dart';
41
+ export '../ui/auth/forgot_password_screen.dart';
42
+ export '../ui/home/home_page.dart';
43
+ export '../ui/onboarding/onboarding_page.dart';
44
+ {{else}}
45
+ export '../features/auth/presentation/screens/login_screen.dart';
46
+ export '../features/auth/presentation/screens/signup_screen.dart';
47
+ export '../features/auth/presentation/screens/forgot_password_screen.dart';
48
+ export '../features/home/presentation/screens/home_page.dart';
49
+ export '../features/onboarding/presentation/screens/onboarding_page.dart';
50
+ {{/if}}
@@ -0,0 +1,2 @@
1
+ export 'core_imports.dart';
2
+ export 'packages_imports.dart';
@@ -0,0 +1,110 @@
1
+ export 'package:fpdart/fpdart.dart' hide State;
2
+ export 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
3
+ {{#if flags.usesScreenutil}}
4
+ export 'package:flutter_screenutil/flutter_screenutil.dart';
5
+ {{/if}}
6
+ {{#if flags.usesFlutterHooks}}
7
+ export 'package:flutter_hooks/flutter_hooks.dart';
8
+ {{/if}}
9
+ export 'package:equatable/equatable.dart';
10
+ {{#if flags.isRiverpod}}
11
+ export 'package:flutter_riverpod/flutter_riverpod.dart';
12
+ export 'package:flutter_riverpod/legacy.dart';
13
+ {{#if flags.usesFlutterHooks}}
14
+ export 'package:hooks_riverpod/hooks_riverpod.dart';
15
+ export 'package:hooks_riverpod/legacy.dart';
16
+ {{/if}}
17
+ {{/if}}
18
+ {{#if (or flags.isProvider flags.isMobX)}}
19
+ export 'package:provider/provider.dart' hide Dispose;
20
+ {{/if}}
21
+ {{#if flags.isBloc}}
22
+ export 'package:flutter_bloc/flutter_bloc.dart';
23
+ {{/if}}
24
+ {{#if (or flags.isGetX (eq flags.routerPackage "getx"))}}
25
+ // For Navigation
26
+ export 'package:get/get_navigation/get_navigation.dart' hide GetContextExtensions;
27
+ // For State Management (.obs, GetxController, Obx)
28
+ {{#if flags.isGetX}}
29
+ export 'package:get/get_state_manager/get_state_manager.dart';
30
+ // For Dependency Management (Get.put, Get.find)
31
+ export 'package:get/get_instance/get_instance.dart';
32
+ {{/if}}
33
+ {{/if}}
34
+ {{#if flags.isMobX}}
35
+ export 'package:mobx/mobx.dart' hide version, StringExtension, Action, Listener, Listenable, Interceptor, Interceptors;
36
+ export 'package:flutter_mobx/flutter_mobx.dart' hide version;
37
+ {{/if}}
38
+ {{#if (eq flags.routerPackage "go_router")}}
39
+ export 'package:{{flags.routerPackage}}/{{flags.routerPackage}}.dart';
40
+ {{else if (eq flags.routerPackage "auto_route")}}
41
+ export 'package:auto_route/auto_route.dart' hide kCupertinoModalBarrierColor, CupertinoPageTransition, CupertinoFullscreenDialogTransition;
42
+ {{/if}}
43
+ {{#if flags.usesDio}}
44
+ export 'package:dio/dio.dart';
45
+ {{/if}}
46
+ {{#if flags.usesHttp}}
47
+ export 'package:http/http.dart'{{#if flags.usesDio}} hide MultipartFile, Response{{/if}};
48
+ {{/if}}
49
+ {{#if flags.usesCachedNetworkImage}}
50
+ export 'package:cached_network_image/cached_network_image.dart';
51
+ {{/if}}
52
+ {{#if flags.usesFlutterSvg}}
53
+ export 'package:flutter_svg/flutter_svg.dart';
54
+ {{/if}}
55
+ {{#if flags.usesIconsaxPlus}}
56
+ export 'package:iconsax_plus/iconsax_plus.dart';
57
+ {{/if}}
58
+ {{#if flags.usesFlutterRemix}}
59
+ export 'package:flutter_remix/flutter_remix.dart';
60
+ {{/if}}
61
+ {{#if flags.usesHugeicons}}
62
+ export 'package:hugeicons/hugeicons.dart';
63
+ {{/if}}
64
+ {{#if flags.usesSkeletonizer}}
65
+ export 'package:skeletonizer/skeletonizer.dart';
66
+ {{/if}}
67
+ export 'package:flutter_animate/flutter_animate.dart' hide ShimmerEffect;
68
+ export 'package:smooth_page_indicator/smooth_page_indicator.dart' hide ScaleEffect, SlideEffect, SwapEffect;
69
+ export 'package:flutter_dotenv/flutter_dotenv.dart';
70
+ {{#if flags.usesHive}}
71
+ export 'package:hive_ce_flutter/hive_ce_flutter.dart';
72
+ {{/if}}
73
+ {{#if flags.usesSharedPreferences}}
74
+ export 'package:shared_preferences/shared_preferences.dart';
75
+ {{/if}}
76
+ {{#if flags.usesSecureStorage}}
77
+ export 'package:flutter_secure_storage/flutter_secure_storage.dart';
78
+ {{/if}}
79
+ {{#if flags.usesLogger}}
80
+ export 'package:logger/logger.dart';
81
+ {{/if}}
82
+ {{#if flags.usesImagePicker}}
83
+ export 'package:image_picker/image_picker.dart';
84
+ {{/if}}
85
+ {{#if flags.usesFilePicker}}
86
+ export 'package:file_picker/file_picker.dart';
87
+ {{/if}}
88
+ {{#if flags.usesPathProvider}}
89
+ export 'package:path_provider/path_provider.dart';
90
+ {{/if}}
91
+ {{#if flags.usesUrlLauncher}}
92
+ export 'package:url_launcher/url_launcher.dart';
93
+ {{/if}}
94
+ {{#if flags.usesSharePlus}}
95
+ export 'package:share_plus/share_plus.dart';
96
+ {{/if}}
97
+ {{#if flags.usesPermissionHandler}}
98
+ export 'package:permission_handler/permission_handler.dart';
99
+ {{/if}}
100
+ {{#if flags.usesGeolocator}}
101
+ export 'package:geolocator/geolocator.dart' hide ServiceStatus;
102
+ {{/if}}
103
+ {{#if flags.usesDeviceInfoPlus}}
104
+ export 'package:device_info_plus/device_info_plus.dart';
105
+ {{/if}}
106
+ {{#if flags.usesAppVersionUpdate}}
107
+ export 'package:app_version_update/app_version_update.dart';
108
+ {{/if}}
109
+
110
+
@@ -0,0 +1,23 @@
1
+ import 'package:get/get.dart';
2
+ import 'package:{{flags.appSnake}}/src/{{#if (eq architecture "layer-first")}}data/repositories/{{else if (eq architecture "mvc")}}services/{{else if (eq architecture "mvvm")}}data/repositories/{{else}}features/auth/data/repositories/{{/if}}auth_repository_impl.dart';
3
+
4
+ {{#if (eq architecture "layer-first")}}
5
+ import 'package:{{flags.appSnake}}/src/presentation/controllers/auth/auth_controller.dart';
6
+ {{else if (eq architecture "mvc")}}
7
+ import 'package:{{flags.appSnake}}/src/controllers/auth/auth_controller.dart';
8
+ {{else if (eq architecture "mvvm")}}
9
+ import 'package:{{flags.appSnake}}/src/ui/auth/controllers/auth_controller.dart';
10
+ {{else}}
11
+ import 'package:{{flags.appSnake}}/src/features/auth/presentation/controllers/auth_controller.dart';
12
+ {{/if}}
13
+
14
+ class AppBindings implements Bindings {
15
+ @override
16
+ void dependencies() {
17
+ {{#if flags.isGetX}}
18
+ Get.lazyPut<AuthController>(
19
+ () => AuthController(repository: AuthRepositoryImpl()),
20
+ );
21
+ {{/if}}
22
+ }
23
+ }