diff --git a/assets/icons/add.svg b/assets/icons/add.svg new file mode 100644 index 0000000..bbd96d7 --- /dev/null +++ b/assets/icons/add.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/features/scene/enum/create_scene_enum.dart b/lib/features/scene/enum/create_scene_enum.dart new file mode 100644 index 0000000..6a65abc --- /dev/null +++ b/lib/features/scene/enum/create_scene_enum.dart @@ -0,0 +1,4 @@ +enum CreateSceneEnum { + tabToRun, + deviceStatusChanges, +} diff --git a/lib/features/scene/view/create_scene_view.dart b/lib/features/scene/view/create_scene_view.dart index 8c3bd95..6d2b46d 100644 --- a/lib/features/scene/view/create_scene_view.dart +++ b/lib/features/scene/view/create_scene_view.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; +import 'package:syncrow_app/features/scene/enum/create_scene_enum.dart'; +import 'package:syncrow_app/features/scene/view/widgets/scene_list_tile.dart'; import 'package:syncrow_app/features/shared_widgets/default_container.dart'; import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart'; -import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; -import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart'; + import 'package:syncrow_app/generated/assets.dart'; -import 'package:syncrow_app/utils/context_extension.dart'; -import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; +import 'package:syncrow_app/navigation/routing_constants.dart'; + import 'package:syncrow_app/utils/resource_manager/strings_manager.dart'; class CreateSceneView extends StatelessWidget { @@ -14,61 +14,41 @@ class CreateSceneView extends StatelessWidget { @override Widget build(BuildContext context) { - return const DefaultScaffold( + return DefaultScaffold( title: StringsManager.createScene, - padding: EdgeInsets.only(top: 24), + padding: const EdgeInsets.only(top: 24), child: Column( children: [ DefaultContainer( width: double.infinity, - margin: EdgeInsets.symmetric(vertical: 4), - child: SceneListTile( + margin: const EdgeInsets.symmetric(vertical: 4), + child: const SceneListTile( assetPath: Assets.handClickIcon, title: StringsManager.tapToRun, subtitle: StringsManager.turnOffAllLights, ), + onTap: () => Navigator.pushNamed( + context, + Routes.sceneTasksRoute, + arguments: CreateSceneEnum.tabToRun, + ), ), DefaultContainer( width: double.infinity, - margin: EdgeInsets.symmetric(vertical: 4), - child: SceneListTile( + margin: const EdgeInsets.symmetric(vertical: 4), + child: const SceneListTile( assetPath: Assets.refreshIcon, title: StringsManager.whenDeviceStatusChanges, subtitle: StringsManager.whenUnusualActivityIsDetected, ), + onTap: () => Navigator.pushNamed( + context, + Routes.sceneTasksRoute, + arguments: CreateSceneEnum.deviceStatusChanges, + ), ), ], ), ); } } - -class SceneListTile extends StatelessWidget { - const SceneListTile({ - super.key, - required this.assetPath, - required this.title, - required this.subtitle, - }); - final String assetPath; - final String title; - final String subtitle; - - @override - Widget build(BuildContext context) { - return ListTile( - minLeadingWidth: 40, - leading: SvgPicture.asset( - assetPath, - width: 20, - height: 32, - ), - title: BodyMedium(text: title), - subtitle: BodySmall( - text: subtitle, - style: context.bodySmall.copyWith( - fontWeight: FontWeight.w400, color: ColorsManager.greyColor), - ), - ); - } -} diff --git a/lib/features/scene/view/scene_add_tasks.dart b/lib/features/scene/view/scene_add_tasks.dart new file mode 100644 index 0000000..2c90173 --- /dev/null +++ b/lib/features/scene/view/scene_add_tasks.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:syncrow_app/features/auth/view/widgets/login_divider.dart'; +import 'package:syncrow_app/features/scene/view/widgets/scene_list_tile.dart'; +import 'package:syncrow_app/features/shared_widgets/default_button.dart'; +import 'package:syncrow_app/features/shared_widgets/default_container.dart'; +import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart'; +import 'package:syncrow_app/generated/assets.dart'; +import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; +import 'package:syncrow_app/utils/resource_manager/strings_manager.dart'; + +class SceneAddTasksView extends StatelessWidget { + const SceneAddTasksView({super.key}); + + @override + Widget build(BuildContext context) { + return DefaultScaffold( + title: StringsManager.createScene, + padding: const EdgeInsets.only(top: 24), + actions: [ + SizedBox( + width: 40, + child: GestureDetector( + child: SvgPicture.asset( + Assets.assetsIconsSettings, + colorFilter: const ColorFilter.mode( + ColorsManager.textPrimaryColor, + BlendMode.srcIn, + ), + ), + ), + ), + ], + child: SingleChildScrollView( + child: Column( + children: [ + DefaultContainer( + padding: EdgeInsets.zero, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const BodyLarge( + text: 'IF', + ), + SvgPicture.asset(Assets.addIcon), + ], + ), + ), + const Divider( + color: ColorsManager.greyColor, + ), + const SceneListTile( + assetPath: Assets.handClickIcon, + title: StringsManager.tapToRun, + ) + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/features/scene/view/widgets/scene_list_tile.dart b/lib/features/scene/view/widgets/scene_list_tile.dart new file mode 100644 index 0000000..79d0b59 --- /dev/null +++ b/lib/features/scene/view/widgets/scene_list_tile.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; +import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart'; +import 'package:syncrow_app/utils/context_extension.dart'; +import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; + +class SceneListTile extends StatelessWidget { + const SceneListTile({ + super.key, + required this.assetPath, + required this.title, + this.subtitle, + }); + final String assetPath; + final String title; + final String? subtitle; + + @override + Widget build(BuildContext context) { + return ListTile( + minLeadingWidth: 40, + leading: SvgPicture.asset( + assetPath, + width: 20, + height: 32, + ), + title: BodyMedium(text: title), + subtitle: subtitle == null + ? null + : BodySmall( + text: subtitle!, + style: context.bodySmall.copyWith( + fontWeight: FontWeight.w400, color: ColorsManager.greyColor), + ), + ); + } +} diff --git a/lib/generated/assets.dart b/lib/generated/assets.dart index 05dca3c..f1893f4 100644 --- a/lib/generated/assets.dart +++ b/lib/generated/assets.dart @@ -692,6 +692,7 @@ class Assets { static const String emptyCheckboxIcon = "assets/icons/empty_checkbox_ic.svg"; static const String handClickIcon = "assets/icons/hand_click.svg"; static const String refreshIcon = "assets/icons/refresh.svg"; + static const String addIcon = "assets/icons/add.svg"; /// Assets for assetsImagesAutomation /// assets/images/automation.jpg diff --git a/lib/navigation/router.dart b/lib/navigation/router.dart index 73d2347..2cbb1b3 100644 --- a/lib/navigation/router.dart +++ b/lib/navigation/router.dart @@ -8,6 +8,7 @@ import 'package:syncrow_app/features/layout/view/layout_view.dart'; import 'package:syncrow_app/features/menu/view/menu_view.dart'; import 'package:syncrow_app/features/menu/view/widgets/create_home/create_home_view.dart'; import 'package:syncrow_app/features/menu/view/widgets/profile/profile_view.dart'; +import 'package:syncrow_app/features/scene/view/scene_add_tasks.dart'; import 'package:syncrow_app/features/scene/view/scene_view.dart'; import 'package:syncrow_app/features/splash/view/splash_view.dart'; import 'routing_constants.dart'; @@ -16,41 +17,55 @@ class Router { static Route generateRoute(RouteSettings settings) { switch (settings.name) { case Routes.splash: - return MaterialPageRoute(builder: (_) => const SplashView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const SplashView(), settings: settings); // case Routes.devicesRoute: // return MaterialPageRoute( // builder: (_) => const DevicesView(), settings: settings); case Routes.profileRoute: - return MaterialPageRoute(builder: (_) => const ProfileView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const ProfileView(), settings: settings); case Routes.sceneRoute: - return MaterialPageRoute(builder: (_) => const SceneView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const SceneView(), settings: settings); case Routes.layoutRoute: - return MaterialPageRoute(builder: (_) => const LayoutPage(), settings: settings); + return MaterialPageRoute( + builder: (_) => const LayoutPage(), settings: settings); case Routes.authLogin: - return MaterialPageRoute(builder: (_) => const LoginView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const LoginView(), settings: settings); case Routes.otpRoute: - return MaterialPageRoute(builder: (_) => const OtpView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const OtpView(), settings: settings); case Routes.authSignUp: - return MaterialPageRoute(builder: (_) => const SignUpView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const SignUpView(), settings: settings); case Routes.dashboardRoute: - return MaterialPageRoute(builder: (_) => const DashboardView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const DashboardView(), settings: settings); case Routes.homeRoute: - return MaterialPageRoute(builder: (_) => const AppLayout(), settings: settings); + return MaterialPageRoute( + builder: (_) => const AppLayout(), settings: settings); case Routes.menuRoute: - return MaterialPageRoute(builder: (_) => const MenuView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const MenuView(), settings: settings); case Routes.createUnit: - return MaterialPageRoute(builder: (_) => const CreateUnitView(), settings: settings); + return MaterialPageRoute( + builder: (_) => const CreateUnitView(), settings: settings); + case Routes.sceneTasksRoute: + return MaterialPageRoute( + builder: (_) => const SceneAddTasksView(), settings: settings); default: return MaterialPageRoute( builder: (_) => Scaffold( diff --git a/lib/navigation/routing_constants.dart b/lib/navigation/routing_constants.dart index 3c644cb..f4ec47e 100644 --- a/lib/navigation/routing_constants.dart +++ b/lib/navigation/routing_constants.dart @@ -17,4 +17,5 @@ class Routes { static const String termsRoute = '/terms'; static const String otpRoute = '/otp'; static const String createUnit = '/create-unit'; + static const String sceneTasksRoute = '/scene-tasks'; }