finished if scene design

This commit is contained in:
ashrafzarkanisala
2024-06-12 18:40:34 +03:00
parent 1045d72bbe
commit bfbc2e55ce
8 changed files with 164 additions and 52 deletions

3
assets/icons/add.svg Normal file
View File

@ -0,0 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.21875 13.5149V10.7805H6.48438C6.05286 10.7805 5.70312 10.4308 5.70312 9.99924C5.70312 9.56787 6.05286 9.21799 6.48438 9.21799H9.21875V6.48361C9.21875 6.05225 9.56848 5.70236 10 5.70236C10.4315 5.70236 10.7812 6.05225 10.7812 6.48361V9.21799H13.5156C13.9471 9.21799 14.2969 9.56787 14.2969 9.99924C14.2969 10.4308 13.9471 10.7805 13.5156 10.7805H10.7812V13.5149C10.7812 13.9464 10.4315 14.2961 10 14.2961C9.56848 14.2961 9.21875 13.9464 9.21875 13.5149ZM17.0711 2.92892C15.1823 1.04019 12.6711 0 10 0C7.32895 0 4.81766 1.04019 2.92892 2.92892C1.04019 4.81766 0 7.32895 0 10C0 12.6711 1.04019 15.1823 2.92892 17.0711C4.81766 18.9598 7.32895 20 10 20C11.8286 20 13.6179 19.5016 15.1743 18.5588C15.5434 18.3353 15.6613 17.8549 15.4378 17.486C15.2142 17.1169 14.7337 16.9989 14.3648 17.2224C13.0525 18.0173 11.5431 18.4375 10 18.4375C5.3476 18.4375 1.5625 14.6524 1.5625 10C1.5625 5.3476 5.3476 1.5625 10 1.5625C14.6524 1.5625 18.4375 5.3476 18.4375 10C18.4375 11.6637 17.9428 13.2829 17.0068 14.6831C16.767 15.0417 16.8634 15.5269 17.2221 15.7668C17.5807 16.0065 18.0659 15.91 18.3058 15.5515C19.4141 13.8936 20 11.9739 20 10C20 7.32895 18.9598 4.81766 17.0711 2.92892Z" fill="#999999"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,4 @@
enum CreateSceneEnum {
tabToRun,
deviceStatusChanges,
}

View File

@ -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),
),
);
}
}

View File

@ -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,
)
],
),
),
],
),
),
);
}
}

View File

@ -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),
),
);
}
}

View File

@ -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

View File

@ -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<dynamic> 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(

View File

@ -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';
}