From f65a8e37a49ad1220c5d67205623057a6525070a Mon Sep 17 00:00:00 2001 From: MarkG Date: Thu, 13 May 2021 14:00:04 +0700 Subject: [PATCH] feat: create ui for survey detail (#27) --- assets/l10n/app_en.arb | 3 +- assets/l10n/app_vi.arb | 3 +- .../survey_detail/components/content.dart | 67 +++++++++++++++++++ .../survey_detail_interactor.dart | 8 +++ .../survey_detail/survey_detail_module.dart | 26 +++++-- .../survey_detail_presenter.dart | 7 ++ .../survey_detail/survey_detail_router.dart | 5 ++ .../survey_detail/survey_detail_view.dart | 20 ++++++ lib/services/locator/locator_service.dart | 1 + .../locator/locator_service_register.dart | 7 ++ 10 files changed, 138 insertions(+), 9 deletions(-) create mode 100644 lib/modules/survey_detail/components/content.dart create mode 100644 lib/modules/survey_detail/survey_detail_interactor.dart create mode 100644 lib/modules/survey_detail/survey_detail_presenter.dart create mode 100644 lib/modules/survey_detail/survey_detail_router.dart create mode 100644 lib/modules/survey_detail/survey_detail_view.dart diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index cd5492b..e4227b9 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -7,5 +7,6 @@ "loginScreenEmailTextFieldPlaceholderText": "Email", "loginScreenPasswordTextFieldPlaceholderText": "Password", "homeScreenTodayText": "Today", - "sideMenuLogoutButtonTitle": "Logout" + "sideMenuLogoutButtonTitle": "Logout", + "surveyDetailScreenStartSurveyButtonTitle": "Start Survey" } diff --git a/assets/l10n/app_vi.arb b/assets/l10n/app_vi.arb index c1837f8..c85540d 100644 --- a/assets/l10n/app_vi.arb +++ b/assets/l10n/app_vi.arb @@ -8,5 +8,6 @@ "loginScreenEmailTextFieldPlaceholderText": "Email", "loginScreenPasswordTextFieldPlaceholderText": "Mật khẩu", "homeScreenTodayText": "Hôm nay", - "sideMenuLogoutButtonTitle": "Đăng xuất" + "sideMenuLogoutButtonTitle": "Đăng xuất", + "surveyDetailScreenStartSurveyButtonTitle": "Bắt đầu khảm sát" } diff --git a/lib/modules/survey_detail/components/content.dart b/lib/modules/survey_detail/components/content.dart new file mode 100644 index 0000000..75462d3 --- /dev/null +++ b/lib/modules/survey_detail/components/content.dart @@ -0,0 +1,67 @@ +part of '../survey_detail_module.dart'; + +class Content extends StatelessWidget { + const Content({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Screen( + body: Stack( + fit: StackFit.expand, + children: [ + Image( + image: Assets.images.mainBackgroundDimmed, + fit: BoxFit.fill, + ), + SafeArea( + child: Column( + children: [ + NavigationBar(), + Expanded( + child: Container( + margin: const EdgeInsets.fromLTRB(20, 0, 20, 0), + child: Column( + children: [ + const Text( + "Working from home Check-In", + style: TextStyle( + color: Colors.white, + fontSize: 34, + ), + ), + const SizedBox( + height: 17, + ), + Text( + "We would like to know how you feel about our work from home (WFH) experience.", + style: TextStyle( + color: Colors.white.withOpacity(0.7), + fontSize: 17, + ), + ), + Expanded(child: Container()), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ConstrainedBox( + constraints: const BoxConstraints( + minWidth: 140, + ), + child: Button( + title: AppLocalizations.of(context)! + .surveyDetailScreenStartSurveyButtonTitle, + ), + ), + ]), + ], + ), + ), + ), + ], + ), + ), + ], + ), + ); + } +} diff --git a/lib/modules/survey_detail/survey_detail_interactor.dart b/lib/modules/survey_detail/survey_detail_interactor.dart new file mode 100644 index 0000000..6209706 --- /dev/null +++ b/lib/modules/survey_detail/survey_detail_interactor.dart @@ -0,0 +1,8 @@ +part of 'survey_detail_module.dart'; + +abstract class SurveyDetailInteractorDelegate {} + +abstract class SurveyDetailInteractor + extends Interactor {} + +class SurveyDetailInteractorImpl extends SurveyDetailInteractor {} diff --git a/lib/modules/survey_detail/survey_detail_module.dart b/lib/modules/survey_detail/survey_detail_module.dart index e339ba6..bfc6093 100644 --- a/lib/modules/survey_detail/survey_detail_module.dart +++ b/lib/modules/survey_detail/survey_detail_module.dart @@ -1,16 +1,28 @@ -import 'package:flutter/widgets.dart'; +import 'package:flutter/material.dart' hide Router; +import 'package:flutter/widgets.dart' hide Router; +import 'package:survey/components/button/button.dart'; +import 'package:survey/components/navigation_bar/navigation_bar.dart'; import 'package:survey/core/viper/module.dart'; +import 'package:survey/gen/assets.gen.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:survey/modules/screen.dart'; -class SurveyDetailModule extends Module { +part 'survey_detail_view.dart'; + +part 'survey_detail_interactor.dart'; + +part 'survey_detail_presenter.dart'; + +part 'survey_detail_router.dart'; + +part 'components/content.dart'; + +class SurveyDetailModule extends Module { static const routePath = "/survey/detail"; @override Widget build(BuildContext context) { - return const Screen( - body: Center( - child: Text("Survey Detail"), - ), - ); + return const SurveyDetailViewImpl(); } } diff --git a/lib/modules/survey_detail/survey_detail_presenter.dart b/lib/modules/survey_detail/survey_detail_presenter.dart new file mode 100644 index 0000000..0e5155f --- /dev/null +++ b/lib/modules/survey_detail/survey_detail_presenter.dart @@ -0,0 +1,7 @@ +part of 'survey_detail_module.dart'; + +abstract class SurveyDetailPresenter extends Presenter {} + +class SurveyDetailPresenterImpl extends SurveyDetailPresenter + implements SurveyDetailViewDelegate, SurveyDetailInteractorDelegate {} diff --git a/lib/modules/survey_detail/survey_detail_router.dart b/lib/modules/survey_detail/survey_detail_router.dart new file mode 100644 index 0000000..1a5259e --- /dev/null +++ b/lib/modules/survey_detail/survey_detail_router.dart @@ -0,0 +1,5 @@ +part of 'survey_detail_module.dart'; + +abstract class SurveyDetailRouter extends Router {} + +class SurveyDetailRouterImpl extends SurveyDetailRouter {} diff --git a/lib/modules/survey_detail/survey_detail_view.dart b/lib/modules/survey_detail/survey_detail_view.dart new file mode 100644 index 0000000..d77600c --- /dev/null +++ b/lib/modules/survey_detail/survey_detail_view.dart @@ -0,0 +1,20 @@ +part of 'survey_detail_module.dart'; + +abstract class SurveyDetailViewDelegate {} + +abstract class SurveyDetailView extends View {} + +class SurveyDetailViewImpl extends StatefulWidget { + const SurveyDetailViewImpl({Key? key}) : super(key: key); + + @override + _SurveyDetailViewImplState createState() => _SurveyDetailViewImplState(); +} + +class _SurveyDetailViewImplState extends ViewState implements SurveyDetailView { + @override + Widget build(BuildContext context) { + return const Content(); + } +} diff --git a/lib/services/locator/locator_service.dart b/lib/services/locator/locator_service.dart index fcc993a..a2d1dd6 100644 --- a/lib/services/locator/locator_service.dart +++ b/lib/services/locator/locator_service.dart @@ -4,6 +4,7 @@ import 'package:survey/modules/home/home_module.dart'; import 'package:survey/modules/landing/landing_module.dart'; import 'package:survey/modules/login/login_module.dart'; import 'package:survey/modules/side_menu/side_menu_module.dart'; +import 'package:survey/modules/survey_detail/survey_detail_module.dart'; import 'package:survey/repositories/survey_repository.dart'; import 'package:survey/services/api/api_service.dart'; import 'package:survey/services/api/auth/auth_api_service.dart'; diff --git a/lib/services/locator/locator_service_register.dart b/lib/services/locator/locator_service_register.dart index 406e584..daf6f70 100644 --- a/lib/services/locator/locator_service_register.dart +++ b/lib/services/locator/locator_service_register.dart @@ -38,5 +38,12 @@ class LocatorServiceRegister { locator.registerFactory(() => SideMenuInteractorImpl()); locator.registerFactory(() => SideMenuRouterImpl()); locator.registerFactory(() => SideMenuPresenterImpl()); + + // Survey Detail + locator.registerFactory( + () => SurveyDetailInteractorImpl()); + locator.registerFactory(() => SurveyDetailRouterImpl()); + locator.registerFactory( + () => SurveyDetailPresenterImpl()); } }