diff --git a/assets/images/star_empty.svg b/assets/images/star_empty.svg new file mode 100644 index 00000000..03cb916c --- /dev/null +++ b/assets/images/star_empty.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/star_filled.svg b/assets/images/star_filled.svg new file mode 100644 index 00000000..16abaa52 --- /dev/null +++ b/assets/images/star_filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/extensions/context_extension.dart b/lib/extensions/context_extension.dart index 85299f73..82960243 100644 --- a/lib/extensions/context_extension.dart +++ b/lib/extensions/context_extension.dart @@ -19,6 +19,7 @@ extension BuildContextExtension on BuildContext { SettingProvider get settingProvider => Provider.of(this, listen: false); UserProvider get userProvider => Provider.of(this, listen: false); + bool isTablet() { final mediaQueryData = MediaQuery.of(this); final double screenWidth = mediaQueryData.size.width; @@ -27,6 +28,9 @@ extension BuildContextExtension on BuildContext { bool isTablet = (devicePixelRatio < 2 && (screenWidth >= 700 || screenHeight >= 700)) || (devicePixelRatio >= 2 && (screenWidth >= 1000 || screenHeight >= 1000)); return isTablet; } + + + void showConfirmDialog(String message, {String? title, VoidCallback? onTap}) => showDialog( context: this, builder: (BuildContext cxt) => ConfirmDialog(message: message, onTap: onTap, title: title), diff --git a/lib/modules/cx_module/chat/chat_page.dart b/lib/modules/cx_module/chat/chat_page.dart new file mode 100644 index 00000000..64b1f626 --- /dev/null +++ b/lib/modules/cx_module/chat/chat_page.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; +import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; + +class ChatPage extends StatefulWidget { + ChatPage({Key? key}) : super(key: key); + + @override + _ChatPageState createState() { + return _ChatPageState(); + } +} + +class _ChatPageState extends State { + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const DefaultAppBar(title: "Req No. 343443"), + body: Column( + children: [ + + + ], + ), + ); + } +} diff --git a/lib/modules/cx_module/chat/chat_rooms_page.dart b/lib/modules/cx_module/chat/chat_rooms_page.dart new file mode 100644 index 00000000..70883f80 --- /dev/null +++ b/lib/modules/cx_module/chat/chat_rooms_page.dart @@ -0,0 +1,92 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/modules/cx_module/chat/chat_page.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; + +class ChatRoomsPage extends StatefulWidget { + ChatRoomsPage({Key? key}) : super(key: key); + + @override + _ChatPageState createState() { + return _ChatPageState(); + } +} + +class _ChatPageState extends State { + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const DefaultAppBar(title: "Chats"), + body: SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + itemBuilder: (cxt, index) => Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Request No. : 432212", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50, fontWeight: FontWeight.w600), + ), + Text( + "Request No. : 432212", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + ], + ).expanded, + getStatus(), + 8.width, + const Icon( + Icons.arrow_forward_ios_rounded, + size: 12, + color: AppColor.black20, + ), + ], + ).paddingOnly(top: 4, bottom: 4).onPress(() { + Navigator.push(context, CupertinoPageRoute(builder: (context) => ChatPage())); + return; + }), + separatorBuilder: (cxt, index) => const Divider().defaultStyle(context), + itemCount: 10) + .toShadowContainer(context, borderRadius: 20, showShadow: false, padding: 12))); + } + + Widget getStatus() { + Color color = const Color(0xff3B755C); + return Container( + padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 8), + decoration: BoxDecoration( + color: const Color(0xff62BE96).withOpacity(.6), + borderRadius: BorderRadius.circular(4), + ), + child: Text( + "In Progress", + maxLines: 1, + style: AppTextStyles.tinyFont2.copyWith(color: color), + ), + ); + } +} diff --git a/lib/modules/cx_module/survey_page.dart b/lib/modules/cx_module/survey_page.dart new file mode 100644 index 00000000..08c00de0 --- /dev/null +++ b/lib/modules/cx_module/survey_page.dart @@ -0,0 +1,137 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/string_extensions.dart'; +import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; +import 'package:test_sa/modules/cx_module/chat/chat_rooms_page.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; +import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; + +class SurveyPage extends StatefulWidget { + SurveyPage({Key? key}) : super(key: key); + + @override + _SurveyPageState createState() { + return _SurveyPageState(); + } +} + +class _SurveyPageState extends State { + int serviceSatisfiedRating = -1; + int serviceProvidedRating = -1; + String comments = ""; + + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const DefaultAppBar(title: "Survey"), + body: Column( + children: [ + SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "How satisfied are you with our services?", + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), + ), + 12.height, + SizedBox( + height: 32, + child: ListView.separated( + itemBuilder: (cxt, index) => (serviceSatisfiedRating >= index ? 'star_filled'.toSvgAsset() : 'star_empty'.toSvgAsset()).onPress(() { + setState(() { + serviceSatisfiedRating = index; + }); + }), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + separatorBuilder: (cxt, index) => 8.width, + itemCount: 5, + scrollDirection: Axis.horizontal, + ), + ), + 16.height, + Text( + "Was the service provided promptly by our engineer?", + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), + ), + 12.height, + SizedBox( + height: 32, + child: ListView.separated( + itemBuilder: (cxt, index) => (serviceProvidedRating >= index ? 'star_filled'.toSvgAsset() : 'star_empty'.toSvgAsset()).onPress(() { + setState(() { + serviceProvidedRating = index; + }); + }), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + separatorBuilder: (cxt, index) => 8.width, + itemCount: 5, + scrollDirection: Axis.horizontal, + ), + ), + 16.height, + Text( + "Request Type", + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), + ), + 16.height, + AppTextFormField( + initialValue: "", + textInputType: TextInputType.multiline, + alignLabelWithHint: true, + labelText: "Additional Comments", + backgroundColor: AppColor.fieldBgColor(context), + style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)), + labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff767676)), + floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)), + showShadow: false, + onChange: (value) { + comments = value; + }, + ), + ], + ).toShadowContainer(context, borderRadius: 20, showShadow: false)) + .expanded, + FooterActionButton.footerContainer( + context: context, + child: AppFilledButton( + label: context.translation.submit, + buttonColor: AppColor.primary10, + onPressed: () { + Navigator.push(context, MaterialPageRoute(builder: (context) => ChatRoomsPage())); + return; + if (serviceSatisfiedRating < 0) { + "Provide rate services satisfaction".showToast; + return; + } + if (serviceProvidedRating < 0) { + "Provide rate services provided by engineer".showToast; + return; + } + }, + ), + ), + ], + ), + ); + } +} diff --git a/lib/new_views/pages/login_page.dart b/lib/new_views/pages/login_page.dart index 8c54e927..61760688 100644 --- a/lib/new_views/pages/login_page.dart +++ b/lib/new_views/pages/login_page.dart @@ -12,6 +12,7 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/new_models/general_response_model.dart'; +import 'package:test_sa/modules/cx_module/survey_page.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/forget_password_module/forget_passwod_verify_otp.dart'; import 'package:test_sa/new_views/pages/land_page/land_page.dart'; @@ -225,6 +226,9 @@ class _LoginPageState extends State { } Future _login() async { + // Navigator.push(context, MaterialPageRoute(builder: (context) => SurveyPage())); + // + // return; if (!_formKey.currentState!.validate()) return; if (privacyPolicyChecked == false) {