From b0642c3ea56ad141247de2bc370e38c6d53c852b Mon Sep 17 00:00:00 2001 From: Shubhamshirva Date: Thu, 11 Jul 2024 17:15:41 +0530 Subject: [PATCH 1/2] signup onboarding pages done including business and individual --- lib/Common/api_urls.dart | 24 + .../controller/data/network/network_api.dart | 73 +- lib/Global.dart | 2 + .../Individual/CommunitiesModel.dart | 76 ++ .../Onboarding/Individual/GroupModel.dart | 72 ++ .../Model/Onboarding/IndividualModel.dart | 54 ++ .../View/Individual/step2Selectactivity.dart | 752 +++++++++-------- .../View/Individual/step3Selectyourgroup.dart | 602 ++++++++------ .../Individual/step4Selectyourcommunity.dart | 365 +++++--- .../View/Individual/tellusindividual.dart | 684 ++++++++------- lib/onboarding/Signup/View/signupscreen.dart | 777 ++++++++++-------- lib/onboarding/Signup/View/verifyuser.dart | 104 ++- .../Signup/view_model/getmethod.dart | 65 ++ .../Signup/view_model/postmethod.dart | 85 ++ pubspec.lock | 8 + pubspec.yaml | 1 + 16 files changed, 2395 insertions(+), 1349 deletions(-) create mode 100644 lib/onboarding/Signup/Model/Onboarding/Individual/CommunitiesModel.dart create mode 100644 lib/onboarding/Signup/Model/Onboarding/Individual/GroupModel.dart create mode 100644 lib/onboarding/Signup/Model/Onboarding/IndividualModel.dart create mode 100644 lib/onboarding/Signup/view_model/getmethod.dart create mode 100644 lib/onboarding/Signup/view_model/postmethod.dart diff --git a/lib/Common/api_urls.dart b/lib/Common/api_urls.dart index 541750c..78b8a4d 100644 --- a/lib/Common/api_urls.dart +++ b/lib/Common/api_urls.dart @@ -8,4 +8,28 @@ class ApiUrls { static const getlogin = "${baseUrl}login"; + static const registeration = "${baseUrl}send_otp"; + + static const verifyregisteration = "${baseUrl}verify_otp"; + + static const tellusIndividual = "${baseUrl}add_profile"; + + static const getIndividualactivity = "${baseUrl}fetch-interests"; + + static const postindividualactivity = "${baseUrl}select-interests"; + + static const getgroups = "${baseUrl}fetch-groups"; + + static const postgroups = "${baseUrl}select-groups"; + + static const getcommunities = "${baseUrl}fetch-communities"; + + static const postcommunities = "${baseUrl}select-communities"; + + + + + + + } diff --git a/lib/Common/controller/data/network/network_api.dart b/lib/Common/controller/data/network/network_api.dart index 5de863b..b7ec9b8 100644 --- a/lib/Common/controller/data/network/network_api.dart +++ b/lib/Common/controller/data/network/network_api.dart @@ -13,34 +13,62 @@ import 'package:http/http.dart' as http; import '../../entry_point_controller.dart'; class NetworkApiServices { + Dio dio = Dio(); + final controllerEntryPoint = Get.put(EntryPointController()); + String basicAuth = 'Basic ' + base64.encode( utf8.encode('RegroupUserName:71%@L%es^bUX94`J9XT*@bh,._WWM{\$%^^&&')); - Dio dio = Dio(); - final controllerEntryPoint = Get.put(EntryPointController()); - - String basicAuth = 'Basic ' + - base64.encode(utf8.encode('RegroupUserName:71%@L%es^bUX94`J9XT*@bh,._WWM{\$%^^&&')); - - Future getApi(String url) async { + Future getApi(String url, {bool optionalpar = false}) async { if (kDebugMode) { print("api url is >>> $url"); } Response response; SharedPreferences prefs = await SharedPreferences.getInstance(); token = prefs.getString('token'); + print("url is $url"); + log(token.toString()); try { - response = await dio.get(url, - options: Options(headers: { - "authorization": "Bearer $token", - 'content-Type': 'application/json', - })); - } on Exception catch (_) { + response = await dio.get( + url, + options: + // Options(headers: { + // "authorization": "Bearer $token", + // 'content-Type': 'application/json', + // }) + optionalpar + ? Options( + headers: { + "authorization": basicAuth, + }, + ) + : Options( + headers: { + 'authorization': basicAuth, + 'access-token': token + }, + ), + ); + } on Exception catch (e) { + log(e.toString()); return ResponseData( 'Oops something Went Wrong', ResponseStatus.FAILED); } + // on Exception catch (e) { + // if (e is DioException) { + // if (e.response!.statusCode == 403) { + // return ResponseData( + // e.response!.data['message'][0]!, ResponseStatus.FAILED, + // data: e.response!.data); + // } + // } + // return ResponseData( + // 'Oops something Went Wrong', + // ResponseStatus.FAILED, + // ); + // } if (response.statusCode == 200) { return ResponseData("success", ResponseStatus.SUCCESS, data: response.data); @@ -76,7 +104,7 @@ class NetworkApiServices { // try { // response = await dio.post(url, // data: data, - // options: optionalpar + // options: optionalpar // ? // Options( // headers: { @@ -118,11 +146,10 @@ class NetworkApiServices { // } // } // } - //New post api - @override + @override Future postApi(data, String url, {bool optionalpar = false}) async { if (kDebugMode) { @@ -132,7 +159,7 @@ class NetworkApiServices { Response response; SharedPreferences prefs = await SharedPreferences.getInstance(); - String? token = prefs.getString('accessToken'); + String? token = prefs.getString('token'); log(token.toString()); try { response = await dio.post( @@ -152,9 +179,15 @@ class NetworkApiServices { } on Exception catch (e) { if (e is DioException) { if (e.response!.statusCode == 403) { - return ResponseData( - e.response!.statusMessage!, ResponseStatus.FAILED, - data: e.response!.data); + if (e.response!.data['message'] is List) { + return ResponseData( + e.response!.data['message'][0]!, ResponseStatus.FAILED, + data: e.response!.data); + } else { + return ResponseData( + e.response!.data['message'], ResponseStatus.FAILED, + data: e.response!.data); + } } } return ResponseData( diff --git a/lib/Global.dart b/lib/Global.dart index cbfdae5..2d66269 100644 --- a/lib/Global.dart +++ b/lib/Global.dart @@ -4,6 +4,8 @@ import 'package:get/get.dart'; String? myusername; String? token; +String? emailid; +int? isprofileupdated; String? phonenumber; bool pindialog = false; bool storagedialog = false; diff --git a/lib/onboarding/Signup/Model/Onboarding/Individual/CommunitiesModel.dart b/lib/onboarding/Signup/Model/Onboarding/Individual/CommunitiesModel.dart new file mode 100644 index 0000000..cd7bcd7 --- /dev/null +++ b/lib/onboarding/Signup/Model/Onboarding/Individual/CommunitiesModel.dart @@ -0,0 +1,76 @@ +class GetcommunitiesModel { + String? status; + int? statusCode; + String? message; + List? data; + + GetcommunitiesModel({this.status, this.statusCode, this.message, this.data}); + + GetcommunitiesModel.fromJson(Map json) { + status = json['status']; + statusCode = json['status_code']; + message = json['message']; + if (json['data'] != null) { + data = []; + json['data'].forEach((v) { + data!.add(new Data.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['status'] = this.status; + data['status_code'] = this.statusCode; + data['message'] = this.message; + if (this.data != null) { + data['data'] = this.data!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class Data { + int? id; + String? communityProfilePhoto; + String? communityBannerImage; + String? communityName; + String? communityLocation; + String? communityDescription; + int? communityTypeXid; + int? activityXid; + + Data( + {this.id, + this.communityProfilePhoto, + this.communityBannerImage, + this.communityName, + this.communityLocation, + this.communityDescription, + this.communityTypeXid, + this.activityXid}); + + Data.fromJson(Map json) { + id = json['id']; + communityProfilePhoto = json['community_profile_photo']; + communityBannerImage = json['community_banner_image']; + communityName = json['community_name']; + communityLocation = json['community_location']; + communityDescription = json['community_description']; + communityTypeXid = json['community_type_xid']; + activityXid = json['activity_xid']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['community_profile_photo'] = this.communityProfilePhoto; + data['community_banner_image'] = this.communityBannerImage; + data['community_name'] = this.communityName; + data['community_location'] = this.communityLocation; + data['community_description'] = this.communityDescription; + data['community_type_xid'] = this.communityTypeXid; + data['activity_xid'] = this.activityXid; + return data; + } +} diff --git a/lib/onboarding/Signup/Model/Onboarding/Individual/GroupModel.dart b/lib/onboarding/Signup/Model/Onboarding/Individual/GroupModel.dart new file mode 100644 index 0000000..80751eb --- /dev/null +++ b/lib/onboarding/Signup/Model/Onboarding/Individual/GroupModel.dart @@ -0,0 +1,72 @@ +class GrouplistModel { + String? status; + int? statusCode; + String? message; + List? data; + + GrouplistModel({this.status, this.statusCode, this.message, this.data}); + + GrouplistModel.fromJson(Map json) { + status = json['status']; + statusCode = json['status_code']; + message = json['message']; + if (json['data'] != null) { + data = []; + json['data'].forEach((v) { + data!.add(new Data.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['status'] = this.status; + data['status_code'] = this.statusCode; + data['message'] = this.message; + if (this.data != null) { + data['data'] = this.data!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class Data { + int? id; + String? title; + String? backgroundImage; + String? groupImage; + String? location; + String? link; + String? description; + + Data( + {this.id, + this.title, + this.backgroundImage, + this.groupImage, + this.location, + this.link, + this.description}); + + Data.fromJson(Map json) { + id = json['id']; + title = json['title']; + backgroundImage = json['background_image']; + groupImage = json['group_image']; + location = json['location']; + link = json['link']; + description = json['description']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['title'] = this.title; + data['background_image'] = this.backgroundImage; + data['group_image'] = this.groupImage; + data['location'] = this.location; + data['link'] = this.link; + data['description'] = this.description; + return data; + } +} diff --git a/lib/onboarding/Signup/Model/Onboarding/IndividualModel.dart b/lib/onboarding/Signup/Model/Onboarding/IndividualModel.dart new file mode 100644 index 0000000..9f8c823 --- /dev/null +++ b/lib/onboarding/Signup/Model/Onboarding/IndividualModel.dart @@ -0,0 +1,54 @@ +class GetIndividualactivityModel { + String? status; + int? statusCode; + String? message; + List? data; + + GetIndividualactivityModel( + {this.status, this.statusCode, this.message, this.data}); + + GetIndividualactivityModel.fromJson(Map json) { + status = json['status']; + statusCode = json['status_code']; + message = json['message']; + if (json['data'] != null) { + data = []; + json['data'].forEach((v) { + data!.add(new Data.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['status'] = this.status; + data['status_code'] = this.statusCode; + data['message'] = this.message; + if (this.data != null) { + data['data'] = this.data!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class Data { + int? id; + String? name; + String? image; + + Data({this.id, this.name, this.image}); + + Data.fromJson(Map json) { + id = json['id']; + name = json['name']; + image = json['image']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + data['image'] = this.image; + return data; + } +} diff --git a/lib/onboarding/Signup/View/Individual/step2Selectactivity.dart b/lib/onboarding/Signup/View/Individual/step2Selectactivity.dart index 456b0e5..9ccccf1 100644 --- a/lib/onboarding/Signup/View/Individual/step2Selectactivity.dart +++ b/lib/onboarding/Signup/View/Individual/step2Selectactivity.dart @@ -1,15 +1,22 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:glassmorphism/glassmorphism.dart'; import 'package:regroup/Common/CommonDropDown.dart'; +import 'package:regroup/Common/base_manager.dart'; import 'package:regroup/Utils/Common/CommonDropdown.dart'; import 'package:regroup/Utils/Common/CustomNextButton.dart'; +import 'package:regroup/Utils/Common/CustomTextformfield.dart'; import 'package:regroup/Utils/Common/blureffect.dart'; import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/dialogs.dart'; import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/onboarding/Signup/view_model/getmethod.dart'; +import 'package:regroup/onboarding/Signup/view_model/postmethod.dart'; import 'package:regroup/resources/routes/route_name.dart'; +import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart'; class SelectIndividualActivity extends StatefulWidget { const SelectIndividualActivity({super.key}); @@ -21,351 +28,431 @@ class SelectIndividualActivity extends StatefulWidget { class _SelectIndividualActivityState extends State { final List _selectedIndices = []; + TextEditingController otheractivitycontroller = TextEditingController(); - void _onContainerTap(int index) { +// to select only two containers + // void _onContainerTap(int index) { + // setState(() { + // if (_selectedIndices.contains(index)) { + // _selectedIndices.remove(index); + // } else { + // if (_selectedIndices.length < 2) { + // _selectedIndices.add(index); + // } else { + // _selectedIndices[1] = index; + // } + // } + // }); + // } + + void _onContainerTap(int id) { setState(() { - if (_selectedIndices.contains(index)) { - _selectedIndices.remove(index); + if (_selectedIndices.contains(id)) { + _selectedIndices.remove(id); } else { - if (_selectedIndices.length < 2) { - _selectedIndices.add(index); - } else { - _selectedIndices[1] = index; - } + _selectedIndices.add(id); } }); } - Color _getGradientColor(int index) { - if (_selectedIndices.isEmpty) { - return Colors.transparent; - } else if (_selectedIndices.length == 1 && - _selectedIndices.contains(index)) { - return Color(0XFFD90B2E); - } else if (_selectedIndices.length == 2) { - if (_selectedIndices[0] == index) { - return Color(0XFFD90B2E); - } else if (_selectedIndices[1] == index) { - return Color(0xFF009DAB); - } +// to give two different colors for selectedd two containers + // Color _getGradientColor(int index) { + // if (_selectedIndices.isEmpty) { + // return Colors.transparent; + // } else if (_selectedIndices.length == 1 && + // _selectedIndices.contains(index)) { + // return Color(0XFFD90B2E); + // } else if (_selectedIndices.length == 2) { + // if (_selectedIndices[0] == index) { + // return Color(0XFFD90B2E); + // } else if (_selectedIndices[1] == index) { + // return Color(0xFF009DAB); + // } + // } + // return Colors.transparent; + // } + + Color _getGradientColor(int id) { + if (_selectedIndices.contains(id)) { + return Color(0XFFD90B2E); // Selected color + } + return Colors.transparent; // Default color + } + + Uploadata() async { + utils.loader(); + String selectedIndicesString = '[${_selectedIndices.join(',')}]'; + print('Selected Indices: $selectedIndicesString'); + Map updata = { + "manage_interest_xid": selectedIndicesString, + "other_interest": otheractivitycontroller.text, + }; + print('Payload: $updata'); + + final data = await Onboard().PostIndividualActivity(updata); + if (data.status == ResponseStatus.SUCCESS) { + Get.back(); + print("Activities selected"); + Get.toNamed(RouteName.individualgroupstep3); + + return utils.showToast(data.message); + } else { + Get.back(); + print("Not done"); + return utils.showToast(data.message); } - return Colors.transparent; } @override Widget build(BuildContext context) { - return Scaffold( + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( backgroundColor: Color.fromARGB(255, 18, 32, 47), - body: Stack( - children: [ - Positioned(top: 220, left: -30, child: CommonBlurLeftSecond()), - Positioned(top: 450, right: -30, child: CommonBlurRightSecond()), - Positioned(top: 530, left: -30, child: CommonBlurLeftBlue()), - GlassmorphicContainer( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height, - borderRadius: 2, - blur: 6, - alignment: Alignment.bottomLeft, - border: 2, - linearGradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), + bottomNavigationBar: Padding( + padding: const EdgeInsets.only(bottom: 10, left: 16, right: 16), + child: CustomButton( + text: "Continue", + onPressed: () { + if (_selectedIndices.isEmpty && + otheractivitycontroller.text.isEmpty) { + utils.showToast('Please select activity'); + } else { + print(_selectedIndices.toString()); + // String selectedIndicesString = + // _selectedIndices.join(','); + // print( + // 'Selected Indices: [$selectedIndicesString]'); + Uploadata(); + } + // Get.toNamed( + // RouteName.individualgroupstep3); + }), + ), + body: FutureBuilder( + future: Getonboard().getIndividualactivity(), + builder: (ctx, snapshot) { + if (snapshot.data == null) { + return const Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [Center(child: CircularProgressIndicator())], + ); + } + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.hasError) { + return Center( + child: Text( + '${snapshot.error} occured', + style: TextStyle(fontSize: 18.spMin), + ), + ); + } + } - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - ], - ), - borderGradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - Color(0XFF222935).withOpacity(0.60), + return Stack( + children: [ + Positioned(top: 220, left: -30, child: CommonBlurLeftSecond()), + Positioned( + top: 450, right: -30, child: CommonBlurRightSecond()), + Positioned(top: 530, left: -30, child: CommonBlurLeftBlue()), + GlassmorphicContainer( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + borderRadius: 2, + blur: 6, + alignment: Alignment.bottomLeft, + border: 2, + linearGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - ], - ), - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 50.h), - child: Expanded( - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Align( - alignment: Alignment.topRight, - child: GestureDetector( - onTap: () { - Get.toNamed(RouteName.communitycommitscreen); - }, - child: Text( - 'Skip', - style: TextStyle( - color: Colors.white, - fontSize: 16.sp, - fontFamily: 'Helvetica', - fontWeight: FontWeight.w400, - decoration: TextDecoration.underline, - decorationColor: Colors.white), - ), - ), - ), - sizedBoxHeight(30.h), - Align( - alignment: Alignment.center, - child: text16400white('Step 2 of 4')), - sizedBoxHeight(20.h), - Container( - width: double.infinity, - height: 25.h, - decoration: ShapeDecoration( - shape: RoundedRectangleBorder( - side: BorderSide( - width: 1, color: Color(0xFF434A53)), - borderRadius: BorderRadius.circular(30), - ), - ), - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: 8.w, vertical: 2.h), - child: Row( - children: [ - Container( - width: 120.w, - height: 15.h, - decoration: ShapeDecoration( - gradient: LinearGradient( - begin: Alignment(0.98, -0.21), - end: Alignment(-0.98, 0.21), - colors: [ - Color(0xA5D90B2E), - Color(0x42D90B2E) - ], - ), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30), - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Container( - width: 15, - height: 15, - decoration: ShapeDecoration( - gradient: LinearGradient( - begin: Alignment(0.98, -0.21), - end: Alignment(-0.98, 0.21), - colors: [ - Color(0xFFD90B2E), - Color(0x60D90B2E) - ], - ), - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(30), - ), - ), - ) - ], - )) - ], - ), - ), - ), - sizedBoxHeight(40.h), - Center( - child: _selectedIndices.isEmpty - ? text20400white('What is your main activity ?') - : text20400white('What else do you do?')), - sizedBoxHeight(10.w), - Center( - child: Container( - width: 154.w, - decoration: ShapeDecoration( - shape: RoundedRectangleBorder( - side: BorderSide( - width: 1, - strokeAlign: BorderSide.strokeAlignCenter, - color: Color(0xFF858585), - ), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + ], + ), + borderGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + Color(0XFF222935).withOpacity(0.60), + + Color(0XFF222935).withOpacity(0.60), + ], + ), + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 16.w, vertical: 0.h), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topRight, + child: GestureDetector( + onTap: () { + Get.toNamed(RouteName.communitycommitscreen); + }, + child: Text( + 'Skip', + style: TextStyle( + color: Colors.white, + fontSize: 16.sp, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w400, + decoration: TextDecoration.underline, + decorationColor: Colors.white), ), ), ), - ), - sizedBoxHeight(30.h), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - ActivityContainer( - index: 0, - titleString: 'Rowing', - image: 'assets/images/svg/individualact1.svg', - isSelected: _selectedIndices.contains(0), - gradientColor: _getGradientColor(0), - onTap: _onContainerTap, - ), - ActivityContainer( - index: 1, - titleString: 'Badminton', - image: 'assets/images/svg/badminton.svg', - isSelected: _selectedIndices.contains(1), - gradientColor: _getGradientColor(1), - onTap: _onContainerTap, - ), - ActivityContainer( - index: 2, - titleString: 'Cycling', - image: 'assets/images/svg/individualact2.svg', - isSelected: _selectedIndices.contains(2), - gradientColor: _getGradientColor(2), - onTap: _onContainerTap, - ), - ], + sizedBoxHeight(30.h), + Align( + alignment: Alignment.center, + child: text16400white('Step 1 of 3')), + sizedBoxHeight(20.h), + Container( + width: double.infinity, + height: 25.h, + decoration: ShapeDecoration( + shape: RoundedRectangleBorder( + side: BorderSide( + width: 1, color: Color(0xFF434A53)), + borderRadius: BorderRadius.circular(30), + ), ), - SizedBox(height: 20.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - ActivityContainer( - index: 3, - titleString: 'Football', - image: 'assets/images/svg/individualact7.svg', - isSelected: _selectedIndices.contains(3), - gradientColor: _getGradientColor(3), - onTap: _onContainerTap, - ), - ActivityContainer( - index: 4, - titleString: 'Weightlifting', - image: 'assets/images/svg/weightlifting.svg', - isSelected: _selectedIndices.contains(4), - gradientColor: _getGradientColor(4), - onTap: _onContainerTap, - ), - ActivityContainer( - index: 5, - titleString: 'Running', - image: 'assets/images/svg/individualact3.svg', - isSelected: _selectedIndices.contains(5), - gradientColor: _getGradientColor(5), - onTap: _onContainerTap, - ), - ], + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 8.w, vertical: 2.h), + child: Row( + children: [ + Container( + width: 120.w, + height: 15.h, + decoration: ShapeDecoration( + gradient: LinearGradient( + begin: Alignment(0.98, -0.21), + end: Alignment(-0.98, 0.21), + colors: [ + Color(0xA5D90B2E), + Color(0x42D90B2E) + ], + ), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(30), + ), + ), + child: Row( + mainAxisAlignment: + MainAxisAlignment.end, + children: [ + Container( + width: 15, + height: 15, + decoration: ShapeDecoration( + gradient: LinearGradient( + begin: Alignment(0.98, -0.21), + end: Alignment(-0.98, 0.21), + colors: [ + Color(0xFFD90B2E), + Color(0x60D90B2E) + ], + ), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(30), + ), + ), + ) + ], + )) + ], + ), ), - SizedBox(height: 20.h), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - ActivityContainer( - index: 6, - titleString: 'Social', - image: 'assets/images/svg/individualact7.svg', - isSelected: _selectedIndices.contains(6), - gradientColor: _getGradientColor(6), - onTap: _onContainerTap, - ), - SizedBox(width: 20.w), - ActivityContainer( - index: 7, - titleString: 'Special Interest (Societies)', - image: - 'assets/images/svg/special interest.svg', - isSelected: _selectedIndices.contains(7), - gradientColor: _getGradientColor(7), - onTap: _onContainerTap, - ), - ], - ), - ], - ), - sizedBoxHeight(30.h), - text20400FCFCFC("Select other activity"), - sizedBoxHeight(25.h), - CustomDropDownRadio( - header: "", - title: "", - listData: [ - "American football", - "Archery", - "Athletics", - "Baseball", - "Basketball", - "Boxing", - "Canoeing", - "Clay pigeon shooting", - "Climbing", - "Combat sports", - "Cricket", - "Dodgeball", - "Equestrian", - "Fencing", - "Gaelic football", - "Golf", - "Gymnastics", - "Handball", - "Hockey", - "Lacrosse", - "Modern biathlon and pentathlon", - "Netball", - "Orienteering", - "Pool and snooker", - "Powerlifting", - "Rifle", - "Rugby league", - "Rugby union", - "Sailing", - "Snowsports", - "Squash", - "Surfing", - "Swimming", - "Softball", - "Table tennis", - "Tennis", - "Touch rugby", - "Trampoline", - "Triathlon", - "Ultimate frisbee", - "Volleyball", - "Water polo", - "Windsurfing" - ], - onItemSelected: (p0) {}, - leadingImage: SizedBox()), - // Spacer(flex: 1), - sizedBoxHeight(35.h), - CustomButton( - text: "Continue", - onPressed: () { - Get.toNamed(RouteName.individualgroupstep3); - }) - ], + ), + sizedBoxHeight(40.h), + indiactivityobj!.data == null || + indiactivityobj!.data!.isEmpty + ? _buildNoDataBody(context) + : Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Center( + child: _selectedIndices.isEmpty + ? text20400white( + 'What is your main activity ?') + : text20400white( + 'What else do you do?')), + sizedBoxHeight(10.w), + Center( + child: Container( + width: 154.w, + decoration: ShapeDecoration( + shape: RoundedRectangleBorder( + side: BorderSide( + width: 1, + strokeAlign: + BorderSide.strokeAlignCenter, + color: Color(0xFF858585), + ), + ), + ), + ), + ), + sizedBoxHeight(30.h), + GridView.builder( + physics: ScrollPhysics(), + shrinkWrap: true, + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: + 3, // Number of items in each row + crossAxisSpacing: 12 + .w, // Horizontal spacing between items + mainAxisSpacing: 12 + .h, // Vertical spacing between items + ), + itemCount: indiactivityobj!.data!.length, + itemBuilder: (context, index) { + return ActivityContainer( + index: + indiactivityobj!.data![index].id!, + titleString: indiactivityobj! + .data![index].name!, + image: indiactivityobj! + .data![index].image, + // 'assets/images/svg/individualact7.svg', + isSelected: _selectedIndices.contains( + indiactivityobj! + .data![index].id!), + gradientColor: _getGradientColor( + indiactivityobj! + .data![index].id!), + onTap: _onContainerTap, + ); + }, + ), + + sizedBoxHeight(30.h), + text20400FCFCFC("Add other activity"), + sizedBoxHeight(25.h), + CustomTextFormField( + textEditingController: + otheractivitycontroller, + texttype: TextInputType.text, + hintText: "Enter other activity", + // leadingIcon: + // // const Icon(Icons.mail_outline), + // Image.asset( + // width: 22.w, + // height: 17.h, + // 'assets/images/png/user.png', + // ), + // validatorText: "Enter your full name", + validator: (value) { + if (value!.isEmpty) { + return 'Enter your full name '; + } + return null; + }, + inputFormatters: [ + // LengthLimitingTextInputFormatter(20), + RemoveEmojiInputFormatter(), + FilteringTextInputFormatter.allow( + RegExp('[a-zA-Z ]')) + ], + ), + // CustomDropDownRadio( + // header: "", + // title: "", + // listData: [ + // "American football", + // "Archery", + // "Athletics", + // "Baseball", + // "Basketball", + // "Boxing", + // "Canoeing", + // "Clay pigeon shooting", + // "Climbing", + // "Combat sports", + // "Cricket", + // "Dodgeball", + // "Equestrian", + // "Fencing", + // "Gaelic football", + // "Golf", + // "Gymnastics", + // "Handball", + // "Hockey", + // "Lacrosse", + // "Modern biathlon and pentathlon", + // "Netball", + // "Orienteering", + // "Pool and snooker", + // "Powerlifting", + // "Rifle", + // "Rugby league", + // "Rugby union", + // "Sailing", + // "Snowsports", + // "Squash", + // "Surfing", + // "Swimming", + // "Softball", + // "Table tennis", + // "Tennis", + // "Touch rugby", + // "Trampoline", + // "Triathlon", + // "Ultimate frisbee", + // "Volleyball", + // "Water polo", + // "Windsurfing" + // ], + // onItemSelected: (p0) {}, + // leadingImage: SizedBox()), + // // Spacer(flex: 1), + + sizedBoxHeight(35.h), + ], + ) + ], + ), ), ), - ), - ), - ) - ], - )); + ) + ], + ); + }, + ), + + // + ), + ); + } + + Widget _buildNoDataBody(context) { + return const Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [Text("No Data Found")], + ); } } class ActivityContainer extends StatelessWidget { final int index; final String titleString; - final String image; + final String? image; final bool isSelected; final Color gradientColor; final Function(int) onTap; @@ -412,12 +499,31 @@ class ActivityContainer extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - SvgPicture.asset( - image, - width: 50.w, - height: 50.h, - ), - SizedBox(height: 10.h), + // image.isEmpty + // ? SvgPicture.asset( + // "assets/images/svg/individualact7.svg", + // width: 50.w, + // height: 50.h, + // ) + // : Image.network(image), + image == null || image!.isEmpty + ? Image.asset( + 'assets/images/png/redregroup.png', + color: Colors.white, + width: 50.w, + height: 50.h, + ) + // SvgPicture.asset( + // "assets/images/svg/individualact7.svg", + // width: 50.w, + // height: 50.h, + // ) + : Image.network( + image!, + width: 50.w, + height: 50.h, + ), + Spacer(flex: 3), SizedBox( child: Text( titleString, diff --git a/lib/onboarding/Signup/View/Individual/step3Selectyourgroup.dart b/lib/onboarding/Signup/View/Individual/step3Selectyourgroup.dart index 1c7c207..4cdbf5b 100644 --- a/lib/onboarding/Signup/View/Individual/step3Selectyourgroup.dart +++ b/lib/onboarding/Signup/View/Individual/step3Selectyourgroup.dart @@ -1,14 +1,20 @@ +import 'dart:async'; + import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:glassmorphism/glassmorphism.dart'; +import 'package:regroup/Common/base_manager.dart'; import 'package:regroup/Utils/Common/CustomNextButton.dart'; import 'package:regroup/Utils/Common/CustomTextformfield.dart'; import 'package:regroup/Utils/Common/blureffect.dart'; import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/dialogs.dart'; import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/onboarding/Signup/Model/Onboarding/Individual/GroupModel.dart'; +import 'package:regroup/onboarding/Signup/view_model/getmethod.dart'; +import 'package:regroup/onboarding/Signup/view_model/postmethod.dart'; import 'package:regroup/resources/routes/route_name.dart'; import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart'; @@ -20,250 +26,371 @@ class SelectIndividualGroup extends StatefulWidget { } class _SelectIndividualGroupState extends State { - TextEditingController searchcontroller = TextEditingController(); - // StreamController blogsController = StreamController(); + StreamController searchcontroller = StreamController(); + + @override + void initState() { + var updata = ""; + Getonboard().getGroupsearch(updata, streamController: searchcontroller); + + super.initState(); + } + + @override + void dispose() { + searchcontroller.close(); + super.dispose(); + } + + final List _selectedIndices = []; + + void _onContainerTap(int id) { + setState(() { + if (_selectedIndices.contains(id)) { + _selectedIndices.remove(id); + } else { + _selectedIndices.add(id); + } + }); + } + + Uploadata() async { + utils.loader(); + String selectedIndicesString = '[${_selectedIndices.join(',')}]'; + print('Selected Indices: $selectedIndicesString'); + Map updata = { + "manage_group_xid": selectedIndicesString, + }; + print('Payload: $updata'); + + final data = await Onboard().postGroups(updata); + if (data.status == ResponseStatus.SUCCESS) { + Get.back(); + print("groups selected"); + Get.toNamed(RouteName.individualcommunitystep4); + + return utils.showToast(data.message); + } else { + Get.back(); + print("Not done"); + return utils.showToast(data.message); + } + } @override Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Color.fromARGB(255, 18, 32, 47), - body: Stack( - children: [ - Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()), - Positioned(top: 400, right: -30, child: CommonBlurRightSecond()), - Positioned(top: 630, left: -30, child: CommonBlurLeftBlue()), - SingleChildScrollView( - child: GlassmorphicContainer( - width: MediaQuery.of(context).size.width, - height: - // 500.h, - MediaQuery.of(context).size.height, - borderRadius: 2, - blur: 6, - alignment: Alignment.bottomLeft, - border: 2, - linearGradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + backgroundColor: Color.fromARGB(255, 18, 32, 47), + bottomNavigationBar: Padding( + padding: const EdgeInsets.only(bottom: 10, left: 16, right: 16), + child: CustomButton( + text: "Continue", + onPressed: () { + // Get.toNamed(RouteName.individualcommunitystep4); + if (_selectedIndices.isEmpty) { + utils.showToast('Please select activity'); + } else { + print(_selectedIndices.toString()); + // String selectedIndicesString = + // _selectedIndices.join(','); + // print( + // 'Selected Indices: [$selectedIndicesString]'); + Uploadata(); + } + }, + ), + ), + body: Stack( + children: [ + Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()), + Positioned(top: 400, right: -30, child: CommonBlurRightSecond()), + Positioned(top: 630, left: -30, child: CommonBlurLeftBlue()), + SingleChildScrollView( + child: GlassmorphicContainer( + width: MediaQuery.of(context).size.width, + height: + // 500.h, + MediaQuery.of(context).size.height, + borderRadius: 2, + blur: 6, + alignment: Alignment.bottomLeft, + border: 2, + linearGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - ], - ), - borderGradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - Color(0XFF222935).withOpacity(0.60), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + ], + ), + borderGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - ], - ), - child: Padding( - padding: - EdgeInsets.symmetric(horizontal: 16.w, vertical: 50.h), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Align( - alignment: Alignment.topRight, - child: GestureDetector( - onTap: () { - Get.toNamed(RouteName.communitycommitscreen); - }, - child: Text( - 'Skip', - style: TextStyle( - color: Colors.white, - fontSize: 16.sp, - fontFamily: 'Helvetica', - fontWeight: FontWeight.w400, - decoration: TextDecoration.underline, - decorationColor: Colors.white), + Color(0XFF222935).withOpacity(0.60), + ], + ), + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 16.w, vertical: 50.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topRight, + child: GestureDetector( + onTap: () { + Get.toNamed(RouteName.communitycommitscreen); + }, + child: Text( + 'Skip', + style: TextStyle( + color: Colors.white, + fontSize: 16.sp, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w400, + decoration: TextDecoration.underline, + decorationColor: Colors.white), + ), ), ), - ), - sizedBoxHeight(30.h), - Align( - alignment: Alignment.center, - child: text16400white('Step 3 of 4')), - sizedBoxHeight(20.h), - Container( - width: double.infinity, - height: 25.h, - decoration: ShapeDecoration( - shape: RoundedRectangleBorder( - side: BorderSide( - width: 1, color: Color(0xFF434A53)), - borderRadius: BorderRadius.circular(30), - ), - ), - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: 8.w, vertical: 2.h), - child: Row( - children: [ - Container( - width: 240.w, - height: 15.h, - decoration: ShapeDecoration( - gradient: LinearGradient( - begin: Alignment(0.98, -0.21), - end: Alignment(-0.98, 0.21), - colors: [ - Color(0xA5D90B2E), - Color(0x42D90B2E) - ], - ), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30), - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Container( - width: 15, - height: 15, - decoration: ShapeDecoration( - gradient: LinearGradient( - begin: Alignment(0.98, -0.21), - end: Alignment(-0.98, 0.21), - colors: [ - Color(0xFFD90B2E), - Color(0x60D90B2E) - ], - ), - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(30), - ), - ), - ) - ], - )) - ], - ), - ), - ), - sizedBoxHeight(40.h), - Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - text20400white('Find your group'), - sizedBoxWidth(5.w), - Image.asset('assets/images/png/informationicon.png') - ], - )), - sizedBoxHeight(10.w), - Center( - child: Container( - width: 108.w, + sizedBoxHeight(30.h), + Align( + alignment: Alignment.center, + child: text16400white('Step 2 of 3')), + sizedBoxHeight(20.h), + Container( + width: double.infinity, + height: 25.h, decoration: ShapeDecoration( shape: RoundedRectangleBorder( side: BorderSide( - width: 1, - strokeAlign: BorderSide.strokeAlignCenter, - color: Color(0xFF858585), + width: 1, color: Color(0xFF434A53)), + borderRadius: BorderRadius.circular(30), + ), + ), + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 8.w, vertical: 2.h), + child: Row( + children: [ + Container( + width: 216.w, + height: 15.h, + decoration: ShapeDecoration( + gradient: LinearGradient( + begin: Alignment(0.98, -0.21), + end: Alignment(-0.98, 0.21), + colors: [ + Color(0xA5D90B2E), + Color(0x42D90B2E) + ], + ), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(30), + ), + ), + child: Row( + mainAxisAlignment: + MainAxisAlignment.end, + children: [ + Container( + width: 15, + height: 15, + decoration: ShapeDecoration( + gradient: LinearGradient( + begin: Alignment(0.98, -0.21), + end: Alignment(-0.98, 0.21), + colors: [ + Color(0xFFD90B2E), + Color(0x60D90B2E) + ], + ), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(30), + ), + ), + ) + ], + )) + ], + ), + ), + ), + sizedBoxHeight(40.h), + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + text20400white('Find your group'), + sizedBoxWidth(5.w), + Image.asset( + 'assets/images/png/informationicon.png') + ], + )), + sizedBoxHeight(10.w), + Center( + child: Container( + width: 108.w, + decoration: ShapeDecoration( + shape: RoundedRectangleBorder( + side: BorderSide( + width: 1, + strokeAlign: BorderSide.strokeAlignCenter, + color: Color(0xFF858585), + ), ), ), ), ), - ), - sizedBoxHeight(30.h), - CustomTextFormField( - textEditingController: searchcontroller, - texttype: TextInputType.text, - hintText: "Search groups", - leadingIcon: - // const Icon(Icons.mail_outline), - // SvgPicture.asset( - // // width: 23.w, - // // height: 23.h, - // 'assets/images/svg/search.svg', - // ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Icon( - Icons.search, - size: 35, - color: Colors.white, + sizedBoxHeight(30.h), + CustomTextFormField( + // textEditingController: searchcontroller, + texttype: TextInputType.text, + hintText: "Search groups", + leadingIcon: + // const Icon(Icons.mail_outline), + // SvgPicture.asset( + // // width: 23.w, + // // height: 23.h, + // 'assets/images/svg/search.svg', + // ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Icon( + Icons.search, + size: 35, + color: Colors.white, + ), ), + // validatorText: "Enter your full name", + inputFormatters: [ + // LengthLimitingTextInputFormatter(20), + RemoveEmojiInputFormatter(), + ], + onInput: (value) { + // Onboard().postGroupsearch({"search": value}, + // streamController: searchcontroller); + // searchGroups(value!); + Getonboard().getGroupsearch(value, + streamController: searchcontroller); + }, ), - // validatorText: "Enter your full name", - inputFormatters: [ - // LengthLimitingTextInputFormatter(20), - RemoveEmojiInputFormatter(), - ], - ), - sizedBoxHeight(30.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - GroupSelect( - titleString: 'Cambridge university Boat ..', - image: 'assets/images/png/groupindividual.png'), - GroupSelect( - titleString: 'Liverpool FC', - image: - 'assets/images/png/groupindividual2.png'), - ], - ), - sizedBoxHeight(30.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - GroupSelect( - titleString: 'Cambridge rugby Club', - image: - 'assets/images/png/groupindividual3.png'), - GroupSelect( - titleString: 'Cambridge university Boat ..', - image: 'assets/images/png/groupindividual.png'), - ], - ), - Spacer(flex: 1), - CustomButton( - text: "Continue", - onPressed: () { - Get.toNamed(RouteName.individualcommunitystep4); - }) - ], - ), - )), - ), - ], - )); + sizedBoxHeight(30.h), + StreamBuilder( + stream: searchcontroller.stream, + builder: (ctx, snapshot) { + if (snapshot.connectionState == + ConnectionState.waiting) { + // Display shimmer effect while waiting for data + return Center( + child: CircularProgressIndicator()); + } else if (snapshot.hasError) { + // Handle error state + return Center( + child: Text( + '${snapshot.error} occurred', + style: TextStyle(fontSize: 18), + ), + ); + } else { + // Data has been loaded, show actual UI + return grouplistobj!.data!.isEmpty + ? _buildNoDataBody(context) + : Expanded( + child: GridView.builder( + physics: ScrollPhysics(), + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 12.0, + mainAxisSpacing: 12.0, + ), + itemCount: grouplistobj!.data!.length, + itemBuilder: (context, index) { + return SizedBox( + height: + 150.0, // Adjust this height according to your design + child: GroupSelect( + titleString: grouplistobj! + .data![index].title!, + image: grouplistobj + ?.data?[index] + ?.groupImage ?? + '', + index: grouplistobj! + .data![index].id!, + isSelected: _selectedIndices + .contains(grouplistobj! + .data![index].id!), + onTap: _onContainerTap, + ), + ); + }, + ), + ); + } + }, + ), + ], + ), + )), + ), + ], + )), + ); + } + + Widget _buildNoDataBody(context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + "No Data Found", + style: TextStyle( + color: Colors.white, + fontSize: 16.sp, + fontWeight: FontWeight.w600), + ) + ], + ), + ); } } -class GroupSelect extends StatefulWidget { +class GroupSelect extends StatelessWidget { final String titleString; - final String image; + final String? image; + final int index; + final Function(int) onTap; + final bool isSelected; GroupSelect({ Key? key, required this.titleString, required this.image, + required this.index, + required this.onTap, + required this.isSelected, }) : super(key: key); - @override - State createState() => _GroupSelectState(); -} - -class _GroupSelectState extends State { - bool _text = false; - @override Widget build(BuildContext context) { return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -271,24 +398,29 @@ class _GroupSelectState extends State { width: 169, height: 74, decoration: ShapeDecoration( - image: DecorationImage( - image: AssetImage( - // "https://via.placeholder.com/169x74" - widget.image), - fit: BoxFit.fill, - ), + image: image == null || image!.isEmpty + ? DecorationImage( + image: AssetImage("assets/images/png/groupindividual3.png"), + fit: BoxFit.fill, + ) + : DecorationImage( + image: NetworkImage(image!), + fit: BoxFit.fill, + ), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)), ), ), - sizedBoxHeight(15.h), - text12400white(widget.titleString), - sizedBoxHeight(15.h), + SizedBox(height: 15.0), + Text( + titleString, + style: TextStyle( + color: Colors.white, + fontSize: 12.0, + overflow: TextOverflow.ellipsis), + ), + SizedBox(height: 15.0), GestureDetector( - onTap: () { - setState(() { - _text = !_text; - }); - }, + onTap: () => onTap(index), child: Container( width: 169, height: 23, @@ -301,7 +433,11 @@ class _GroupSelectState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - _text ? text10400white('Regrouping') : text10400white('Join') + isSelected + ? Text('Regrouping', + style: TextStyle(color: Colors.white, fontSize: 10.0)) + : Text('Join', + style: TextStyle(color: Colors.white, fontSize: 10.0)) ], ), ), diff --git a/lib/onboarding/Signup/View/Individual/step4Selectyourcommunity.dart b/lib/onboarding/Signup/View/Individual/step4Selectyourcommunity.dart index 850735b..7d8f6d5 100644 --- a/lib/onboarding/Signup/View/Individual/step4Selectyourcommunity.dart +++ b/lib/onboarding/Signup/View/Individual/step4Selectyourcommunity.dart @@ -1,13 +1,20 @@ +import 'dart:async'; + import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:glassmorphism/glassmorphism.dart'; +import 'package:regroup/Common/base_manager.dart'; import 'package:regroup/Utils/Common/CustomNextButton.dart'; import 'package:regroup/Utils/Common/CustomTextformfield.dart'; import 'package:regroup/Utils/Common/blureffect.dart'; import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/dialogs.dart'; import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/onboarding/Signup/Model/Onboarding/Individual/CommunitiesModel.dart'; +import 'package:regroup/onboarding/Signup/view_model/getmethod.dart'; +import 'package:regroup/onboarding/Signup/view_model/postmethod.dart'; import 'package:regroup/resources/routes/route_name.dart'; import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart'; @@ -20,58 +27,126 @@ class SelectIndividualCommunity extends StatefulWidget { } class _SelectIndividualCommunityState extends State { - TextEditingController searchcontroller = TextEditingController(); - // StreamController blogsController = StreamController(); + StreamController searchcontroller = StreamController(); + + @override + void initState() { + var updata = ""; + Getonboard().getCommunitysearch(updata, streamController: searchcontroller); + + super.initState(); + } + + @override + void dispose() { + searchcontroller.close(); + super.dispose(); + } + + final List _selectedIndices = []; + + void _onContainerTap(int id) { + setState(() { + if (_selectedIndices.contains(id)) { + _selectedIndices.remove(id); + } else { + _selectedIndices.add(id); + } + }); + } + + Uploadata() async { + utils.loader(); + String selectedIndicesString = '[${_selectedIndices.join(',')}]'; + print('Selected Indices: $selectedIndicesString'); + Map updata = { + "manage_community_xid": selectedIndicesString, + }; + print('Payload: $updata'); + + final data = await Onboard().postCommunities(updata); + if (data.status == ResponseStatus.SUCCESS) { + // Get.back(); + print("groups selected"); + Get.toNamed(RouteName.communitycommitscreen); + + return utils.showToast(data.message); + } else { + Get.back(); + print("Not done"); + return utils.showToast(data.message); + } + } @override Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Color.fromARGB(255, 18, 32, 47), - body: Stack( - children: [ - Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()), - Positioned(top: 400, right: -30, child: CommonBlurRightSecond()), - Positioned(top: 630, left: -30, child: CommonBlurLeftBlue()), - SingleChildScrollView( - child: GlassmorphicContainer( - width: MediaQuery.of(context).size.width, - height: - // 500.h, - MediaQuery.of(context).size.height, - borderRadius: 2, - blur: 6, - alignment: Alignment.bottomLeft, - border: 2, - linearGradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + backgroundColor: Color.fromARGB(255, 18, 32, 47), + bottomNavigationBar: Padding( + padding: const EdgeInsets.only(bottom: 10, left: 16, right: 16), + child: CustomButton( + text: "Continue", + onPressed: () { + // Get.toNamed(RouteName.individualcommunitystep4); + if (_selectedIndices.isEmpty) { + utils.showToast('Please select activity'); + } else { + print(_selectedIndices.toString()); + // String selectedIndicesString = + // _selectedIndices.join(','); + // print( + // 'Selected Indices: [$selectedIndicesString]'); + Uploadata(); + } + }, + ), + ), + body: Stack( + children: [ + Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()), + Positioned(top: 400, right: -30, child: CommonBlurRightSecond()), + Positioned(top: 630, left: -30, child: CommonBlurLeftBlue()), + SingleChildScrollView( + child: GlassmorphicContainer( + width: MediaQuery.of(context).size.width, + height: + // 500.h, + MediaQuery.of(context).size.height, + borderRadius: 2, + blur: 6, + alignment: Alignment.bottomLeft, + border: 2, + linearGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - ], - ), - borderGradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - Color(0XFF222935).withOpacity(0.60), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + ], + ), + borderGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - ], - ), - child: Padding( - padding: - EdgeInsets.symmetric(horizontal: 16.w, vertical: 50.h), - child: SingleChildScrollView( + Color(0XFF222935).withOpacity(0.60), + ], + ), + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 16.w, vertical: 50.h), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -96,7 +171,7 @@ class _SelectIndividualCommunityState extends State { sizedBoxHeight(30.h), Align( alignment: Alignment.center, - child: text16400white('Step 4 of 4')), + child: text16400white('Step 3 of 3')), sizedBoxHeight(20.h), Container( width: double.infinity, @@ -114,9 +189,8 @@ class _SelectIndividualCommunityState extends State { child: Row( children: [ Expanded( - child: Container( - width: double.infinity, child: Container( + // width: 216.w, height: 15.h, decoration: ShapeDecoration( gradient: LinearGradient( @@ -157,9 +231,7 @@ class _SelectIndividualCommunityState extends State { ), ) ], - )), - ), - ) + ))) ], ), ), @@ -193,7 +265,6 @@ class _SelectIndividualCommunityState extends State { ), sizedBoxHeight(30.h), CustomTextFormField( - textEditingController: searchcontroller, texttype: TextInputType.text, hintText: "Search community", leadingIcon: @@ -216,75 +287,116 @@ class _SelectIndividualCommunityState extends State { // LengthLimitingTextInputFormatter(20), RemoveEmojiInputFormatter(), ], + onInput: (value) { + // Onboard().postGroupsearch({"search": value}, + // streamController: searchcontroller); + // searchGroups(value!); + Getonboard().getCommunitysearch(value, + streamController: searchcontroller); + }, ), sizedBoxHeight(30.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - CommunitySelect( - titleString: 'Liverpool FC ', - image: - 'assets/images/png/groupindividual2.png'), - CommunitySelect( - titleString: 'Cambridge rugby Club', - image: 'assets/images/png/community2.png'), - CommunitySelect( - titleString: 'Cambridge rugby Club', - image: 'assets/images/png/community2.png'), - ], + StreamBuilder( + stream: searchcontroller.stream, + builder: (ctx, snapshot) { + if (snapshot.connectionState == + ConnectionState.waiting) { + // Display shimmer effect while waiting for data + return Center( + child: CircularProgressIndicator()); + } else if (snapshot.hasError) { + // Handle error state + return Center( + child: Text( + '${snapshot.error} occurred', + style: TextStyle(fontSize: 18), + ), + ); + } else { + // Data has been loaded, show actual UI + return communitylistobj!.data!.isEmpty + ? _buildNoDataBody(context) + : Expanded( + child: GridView.builder( + physics: ScrollPhysics(), + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 12.0, + mainAxisSpacing: 12.0, + ), + itemCount: + communitylistobj!.data!.length, + itemBuilder: (context, index) { + return SizedBox( + height: + 150.0, // Adjust this height according to your design + child: CommunitySelect( + titleString: communitylistobj! + .data![index] + .communityName!, + image: communitylistobj + ?.data?[index] + ?.communityProfilePhoto ?? + '', + index: communitylistobj! + .data![index].id!, + isSelected: _selectedIndices + .contains(communitylistobj! + .data![index].id!), + onTap: _onContainerTap, + ), + ); + }, + ), + ); + } + }, ), - sizedBoxHeight(30.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - CommunitySelect( - titleString: 'The athletic town', - image: - 'assets/images/png/groupindividual3.png'), - CommunitySelect( - titleString: 'Football Fever', - image: - 'assets/images/png/groupindividual2.png'), - CommunitySelect( - titleString: 'Football Fever', - image: - 'assets/images/png/groupindividual2.png'), - ], - ), - // Spacer(flex: 1), - sizedBoxHeight(40.h), - CustomButton( - text: "Continue", - onPressed: () { - Get.toNamed(RouteName.communitycommitscreen); - }) ], ), - ), - )), - ), - ], - )); + )), + ), + ], + )), + ); + } + + Widget _buildNoDataBody(context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + "No Data Found", + style: TextStyle( + color: Colors.white, + fontSize: 16.sp, + fontWeight: FontWeight.w600), + ) + ], + ), + ); } } -class CommunitySelect extends StatefulWidget { +class CommunitySelect extends StatelessWidget { final String titleString; - final String image; + final String? image; + final int index; + final Function(int) onTap; + final bool isSelected; CommunitySelect({ Key? key, required this.titleString, required this.image, + required this.index, + required this.onTap, + required this.isSelected, }) : super(key: key); - @override - State createState() => _CommunitySelectState(); -} - -class _CommunitySelectState extends State { - bool _text = false; - @override Widget build(BuildContext context) { return Column(crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -292,29 +404,34 @@ class _CommunitySelectState extends State { width: 73.w, height: 73.h, decoration: ShapeDecoration( - image: DecorationImage( - image: AssetImage( - // "https://via.placeholder.com/169x74" - widget.image), - fit: BoxFit.fill, - ), + image: image == null || image!.isEmpty + ? DecorationImage( + image: AssetImage("assets/images/png/groupindividual2.png"), + fit: BoxFit.fill, + ) + : DecorationImage( + image: NetworkImage(image!), + fit: BoxFit.fill, + ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(100), ), ), ), sizedBoxHeight(15.h), - SizedBox(width: 94.w, child: text12400white(widget.titleString)), + Text( + titleString, + style: TextStyle( + color: Colors.white, + fontSize: 12.0, + overflow: TextOverflow.ellipsis), + ), sizedBoxHeight(15.h), GestureDetector( - onTap: () { - setState(() { - _text = !_text; - }); - }, + onTap: () => onTap(index), child: Container( - width: 100.w, - height: 23.h, + width: 169, + height: 23, decoration: ShapeDecoration( shape: RoundedRectangleBorder( side: BorderSide(width: 1, color: Color(0xFFFF002B)), @@ -324,7 +441,11 @@ class _CommunitySelectState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - _text ? text10400white('Regrouping') : text10400white('Join') + isSelected + ? Text('Regrouping', + style: TextStyle(color: Colors.white, fontSize: 10.0)) + : Text('Join', + style: TextStyle(color: Colors.white, fontSize: 10.0)) ], ), ), diff --git a/lib/onboarding/Signup/View/Individual/tellusindividual.dart b/lib/onboarding/Signup/View/Individual/tellusindividual.dart index bb62941..0b1c65f 100644 --- a/lib/onboarding/Signup/View/Individual/tellusindividual.dart +++ b/lib/onboarding/Signup/View/Individual/tellusindividual.dart @@ -1,11 +1,14 @@ +import 'dart:developer'; import 'dart:io'; +import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:get/get.dart'; +import 'package:get/get.dart' hide MultipartFile, FormData; import 'package:glassmorphism/glassmorphism.dart'; import 'package:regroup/Common/CommonWidget.dart'; +import 'package:regroup/Common/base_manager.dart'; import 'package:regroup/Common/controller/profileimagecontroller.dart'; import 'package:regroup/Utils/Common/CommonDropdown.dart'; import 'package:regroup/Utils/Common/CustomNextButton.dart'; @@ -15,8 +18,10 @@ import 'package:regroup/Utils/Common/blureffect.dart'; import 'package:regroup/Utils/Common/sized_box.dart'; import 'package:regroup/Utils/dialogs.dart'; import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/onboarding/Signup/view_model/postmethod.dart'; import 'package:regroup/resources/routes/route_name.dart'; import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart'; +import 'package:path/path.dart' as path; class TellusaboutIndividual extends StatefulWidget { const TellusaboutIndividual({super.key}); @@ -29,6 +34,8 @@ class _TellusaboutIndividualState extends State { TextEditingController fullNameController = TextEditingController(); TextEditingController userNameController = TextEditingController(); TextEditingController datecontroller = TextEditingController(); + TextEditingController locationcontroller = TextEditingController(); + DateTime? _selectedDate; final photographController = TextEditingController(); @@ -73,27 +80,35 @@ class _TellusaboutIndividualState extends State { ); if (pickedDate != null) { // if (pickedDate.isBefore(eighteenYearsAgo)) { - setState(() { // selectedDate.value = pickedDate; _selectedDate = pickedDate; datecontroller.text = - "${_selectedDate!.day.toString().padLeft(2, '0')}-${_selectedDate!.month.toString().padLeft(2, '0')}-${_selectedDate!.year.toString().padLeft(2, '0')}"; + "${_selectedDate!.year.toString().padLeft(2, '0')}-${_selectedDate!.month.toString().padLeft(2, '0')}-${_selectedDate!.day.toString().padLeft(2, '0')}"; }); - // } - // else { + // // } else { // showDialog( // context: context, // builder: (context) { // return AlertDialog( - // title: const Text("Age Restriction"), - // content: const Text("Sorry, you must be above 18 years age"), + // backgroundColor: Colors.black, + // title: const Text( + // "Age Restriction", + // style: TextStyle(color: Colors.white), + // ), + // content: const Text( + // "Sorry, you must be above 18 years age", + // style: TextStyle(color: Colors.white), + // ), // actions: [ // TextButton( // onPressed: () { // Navigator.of(context).pop(); // }, - // child: const Text("OK"), + // child: const Text( + // "OK", + // style: TextStyle(color: Colors.white), + // ), // ), // ], // ); @@ -113,122 +128,142 @@ class _TellusaboutIndividualState extends State { }); } + void TellusUploadData() async { + utils.loader(); + var imageFile; + if (editProfileImage.profilePicPath.value.isNotEmpty) { + imageFile = await MultipartFile.fromFile( + editProfileImage.profilePicPath.value, + filename: path.basename(editProfileImage.profilePicPath.value), + ); + } + // else { + // imageFile = await Helper.assetImageToMultipartFile( + // "assets/images/png/camera.png", "profile"); + // } + + FormData formData = FormData.fromMap({ + "full_name": fullNameController.text, + "username": userNameController.text, + "date_of_birth": datecontroller.text, + "gender": _selectedgendertype, + 'profile_photo': + // editProfileImage.profilePicPath.value.isNotEmpty ? + imageFile, + // : null, + 'location': locationcontroller.text, + }); + + print("formData is $formData"); + log(formData.toString()); + final data = await Onboard().PosttellusIndividual(formData); + if (data.status == ResponseStatus.SUCCESS) { + utils.showToast("tell us done Successfully!"); + Get.back(); + // Get.toNamed(RouteName.individualprofilestep1); + Get.toNamed(RouteName.individualactivitystep2); + } else { + Get.back(); + return utils.showToast(data.message); + } + } + @override Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Color.fromARGB(255, 18, 32, 47), - body: Stack( - children: [ - Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()), - Positioned(top: 310, right: -30, child: CommonBlurRightSecond()), - Positioned(top: 510, left: -30, child: CommonBlurLeftBlue()), - GlassmorphicContainer( - width: MediaQuery.of(context).size.width, - height: - // 500.h, - MediaQuery.of(context).size.height, - borderRadius: 2, - blur: 6, - alignment: Alignment.bottomLeft, - border: 2, - linearGradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + backgroundColor: Color.fromARGB(255, 18, 32, 47), + body: Stack( + children: [ + Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()), + Positioned(top: 310, right: -30, child: CommonBlurRightSecond()), + Positioned(top: 510, left: -30, child: CommonBlurLeftBlue()), + GlassmorphicContainer( + width: MediaQuery.of(context).size.width, + height: + // 500.h, + MediaQuery.of(context).size.height, + borderRadius: 2, + blur: 6, + alignment: Alignment.bottomLeft, + border: 2, + linearGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), + Color(0XFF222935).withOpacity(0.60), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - ], - ), - borderGradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), - Color(0XFF222935).withOpacity(0.60), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + ], + ), + borderGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + // Color.fromARGB(255, 18, 32, 47).withOpacity(0.50), + Color(0XFF222935).withOpacity(0.60), - Color(0XFF222935).withOpacity(0.60), - ], - ), - child: ListView(physics: ScrollPhysics(), children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // const Spacer(flex: 1), - sizedBoxHeight(50.h), - Center(child: text20400white('Tell us about yourself')), - sizedBoxHeight(10.w), - Center( - child: Container( - width: 154, - decoration: ShapeDecoration( - shape: RoundedRectangleBorder( - side: BorderSide( - width: 1, - strokeAlign: BorderSide.strokeAlignCenter, - color: Color(0xFF858585), - ), - ), - )), - ), - sizedBoxHeight(20.h), - GestureDetector( - onTap: () { - ImageUploadBottomSheet().showModal( - context, - false, - (result) { - print("File path is $result"); - editProfileImage.profilePicPath.value = result; - var filenameresult = extractFileName(result); - print("File name is $filenameresult"); - photographController.text = filenameresult; - }, - ); - }, - child: Center( - child: Column( - children: [ - Stack( - alignment: Alignment.center, - children: [ - // Outer circle - Container( - width: 139.w, - height: 139.h, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Colors.transparent, - border: Border.all( - color: Color(0XFFD90B2E) - .withOpacity(0.50), - width: 2), + Color(0XFF222935).withOpacity(0.60), + ], + ), + child: ListView(physics: ScrollPhysics(), children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // const Spacer(flex: 1), + sizedBoxHeight(50.h), + Center( + child: text20400white('Tell us about yourself')), + sizedBoxHeight(10.w), + Center( + child: Container( + width: 154, + decoration: ShapeDecoration( + shape: RoundedRectangleBorder( + side: BorderSide( + width: 1, + strokeAlign: BorderSide.strokeAlignCenter, + color: Color(0xFF858585), ), ), - // Middle circle - Container( - width: 119.w, - height: 119.h, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Colors.transparent, - border: Border.all( - color: Color(0XFFD90B2E) - .withOpacity(0.50), - width: 2), - ), - ), - // Inner circle - Container( + )), + ), + sizedBoxHeight(20.h), + GestureDetector( + onTap: () { + ImageUploadBottomSheet().showModal( + context, + false, + (result) { + print("File path is $result"); + editProfileImage.profilePicPath.value = + result; + var filenameresult = extractFileName(result); + print("File name is $filenameresult"); + photographController.text = filenameresult; + }, + ); + }, + child: Center( + child: Column( + children: [ + Stack( + alignment: Alignment.center, + children: [ + // Outer circle + Container( + width: 139.w, + height: 139.h, decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.transparent, @@ -237,194 +272,241 @@ class _TellusaboutIndividualState extends State { .withOpacity(0.50), width: 2), ), - child: Obx(() => - // editProfileImage - // .profilePicPath.value != - // '' - // ? - editProfileImage.profilePicPath - .value != - '' - ? ClipOval( - child: SizedBox.fromSize( - size: Size.fromRadius( - 50.r), - child: Image( - image: FileImage( - File( - editProfileImage - .profilePicPath - .value, + ), + // Middle circle + Container( + width: 119.w, + height: 119.h, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.transparent, + border: Border.all( + color: Color(0XFFD90B2E) + .withOpacity(0.50), + width: 2), + ), + ), + // Inner circle + Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.transparent, + border: Border.all( + color: Color(0XFFD90B2E) + .withOpacity(0.50), + width: 2), + ), + child: Obx(() => + // editProfileImage + // .profilePicPath.value != + // '' + // ? + editProfileImage.profilePicPath + .value != + '' + ? ClipOval( + child: + SizedBox.fromSize( + size: Size.fromRadius( + 50.r), + child: Image( + image: FileImage( + File( + editProfileImage + .profilePicPath + .value, + ), ), + fit: BoxFit.cover, + width: 200.w, + height: 200.h, ), - fit: BoxFit.cover, - width: 200.w, - height: 200.h, ), - ), - ) - : Image.asset( - "assets/images/png/camera.png") - // : Image.asset( - // "assets/images/png/camera.png") - )), - // Main button - ], - ), - const SizedBox(height: 9), - text16400white('Add profile picture') - ], - )), - ), - sizedBoxHeight(20.h), - text16400white('Full name'), - sizedBoxHeight(10.h), - CustomTextFormField( - textEditingController: fullNameController, - texttype: TextInputType.text, - hintText: "Enter your full name", - leadingIcon: - // const Icon(Icons.mail_outline), - Image.asset( - width: 22.w, - height: 17.h, - 'assets/images/png/user.png', + ) + : Image.asset( + "assets/images/png/camera.png") + // : Image.asset( + // "assets/images/png/camera.png") + )), + // Main button + ], + ), + const SizedBox(height: 9), + text16400white('Add profile picture') + ], + )), ), - // validatorText: "Enter your full name", - validator: (value) { - if (value!.isEmpty) { - return 'Enter your full name '; - } - return null; - }, - inputFormatters: [ - // LengthLimitingTextInputFormatter(20), - RemoveEmojiInputFormatter(), - FilteringTextInputFormatter.allow( - RegExp('[a-zA-Z ]')) - ], - ), - sizedBoxHeight(0.h), - text16400white('User name'), - sizedBoxHeight(10.h), - CustomTextFormField( - textEditingController: userNameController, - texttype: TextInputType.text, - hintText: "Enter your user name", - leadingIcon: - // const Icon(Icons.mail_outline), - Image.asset( - width: 22.w, - height: 17.h, - 'assets/images/png/user.png', - ), - // validatorText: "Enter your user name", - validator: (value) { - if (value!.isEmpty) { - return 'Enter your user name '; - } - return null; - }, - inputFormatters: [ - // LengthLimitingTextInputFormatter(20), - RemoveEmojiInputFormatter(), - FilteringTextInputFormatter.allow( - RegExp('[a-zA-Z ]')) - ], - ), - sizedBoxHeight(0.h), - text16400white('Date of birth'), - sizedBoxHeight(10.h), - CustomTextFormField( - textEditingController: datecontroller, - readonly: true, - onTap: () { - _selectDate(context); - }, - // texttype: TextInputType.text, - hintText: "Enter your date of birth", - leadingIcon: - // const Icon(Icons.mail_outline), - Image.asset( - width: 22.w, - height: 17.h, - 'assets/images/png/dateimage.png', - ), - // validatorText: "Enter date of birth", - validator: (value) { - if (value!.isEmpty) { - return 'Enter your date of birth'; - } - return null; - }, - ), - sizedBoxHeight(0.h), - text16400white('Gender'), - sizedBoxHeight(10.h), - CustomDropDownWidgetSignup( - header: 'Select gender', - title: '', - listData: _gender, - onItemSelected: _onItemSelected, - leadingImage: - Image.asset('assets/images/png/gendericon.png'), - ), - sizedBoxHeight(20.h), - Row( - children: [ - text16400white('Location'), - sizedBoxWidth(5.w), - Image.asset('assets/images/png/informationicon.png') - ], - ), - sizedBoxHeight(10.h), - CustomTextFormField( - textEditingController: userNameController, - texttype: TextInputType.text, - hintText: "Enter your location", - leadingIcon: - // const Icon(Icons.mail_outline), - Image.asset( - width: 22.w, - height: 17.h, - 'assets/images/png/location.png', - ), - // validatorText: "Enter your location", - validator: (value) { - if (value!.isEmpty) { - return 'Enter your location '; - } - return null; - }, - inputFormatters: [ - // LengthLimitingTextInputFormatter(20), - RemoveEmojiInputFormatter(), - FilteringTextInputFormatter.allow( - RegExp('[a-zA-Z ]')) - ], - ), - sizedBoxHeight(20.h), - CustomButton( - text: "Continue", - onPressed: () { - if (_selectedgendertype.isNotEmpty) { - Get.toNamed(RouteName.individualprofilestep1); - - // Get.to(() => BusinessPage()); - } else { - // Handle case where no selection is made - utils.showToast('Please select an gender type'); + sizedBoxHeight(20.h), + text16400white('Full name'), + sizedBoxHeight(10.h), + CustomTextFormField( + textEditingController: fullNameController, + texttype: TextInputType.text, + hintText: "Enter your full name", + leadingIcon: + // const Icon(Icons.mail_outline), + Image.asset( + width: 22.w, + height: 17.h, + 'assets/images/png/user.png', + ), + // validatorText: "Enter your full name", + validator: (value) { + if (value!.isEmpty) { + return 'Enter your full name '; } - }), - sizedBoxHeight(30.h), - // const Spacer( - // flex: 3, - // ) - ], + return null; + }, + inputFormatters: [ + // LengthLimitingTextInputFormatter(20), + RemoveEmojiInputFormatter(), + FilteringTextInputFormatter.allow( + RegExp('[a-zA-Z ]')) + ], + ), + sizedBoxHeight(10.h), + text16400white('User name'), + sizedBoxHeight(10.h), + CustomTextFormField( + textEditingController: userNameController, + texttype: TextInputType.text, + hintText: "Enter your user name", + leadingIcon: + // const Icon(Icons.mail_outline), + Image.asset( + width: 22.w, + height: 17.h, + 'assets/images/png/user.png', + ), + // validatorText: "Enter your user name", + validator: (value) { + if (value!.isEmpty) { + return 'Enter your user name '; + } + return null; + }, + inputFormatters: [ + // LengthLimitingTextInputFormatter(20), + RemoveEmojiInputFormatter(), + FilteringTextInputFormatter.allow( + RegExp('[a-zA-Z ]')) + ], + ), + sizedBoxHeight(10.h), + text16400white('Date of birth'), + sizedBoxHeight(10.h), + CustomTextFormField( + textEditingController: datecontroller, + readonly: true, + onTap: () { + _selectDate(context); + }, + // texttype: TextInputType.text, + hintText: "Enter your date of birth", + leadingIcon: + // const Icon(Icons.mail_outline), + Image.asset( + width: 22.w, + height: 17.h, + 'assets/images/png/dateimage.png', + ), + // validatorText: "Enter date of birth", + validator: (value) { + if (value!.isEmpty) { + return 'Enter your date of birth'; + } + return null; + }, + ), + sizedBoxHeight(10.h), + text16400white('Gender'), + sizedBoxHeight(10.h), + CustomDropDownWidgetSignup( + header: 'Select gender', + title: '', + listData: _gender, + onItemSelected: _onItemSelected, + leadingImage: + Image.asset('assets/images/png/gendericon.png'), + ), + sizedBoxHeight(10.h), + Row( + children: [ + text16400white('Location'), + sizedBoxWidth(5.w), + Image.asset( + 'assets/images/png/informationicon.png') + ], + ), + sizedBoxHeight(10.h), + CustomTextFormField( + textEditingController: locationcontroller, + texttype: TextInputType.text, + hintText: "Enter your location", + leadingIcon: + // const Icon(Icons.mail_outline), + Image.asset( + width: 22.w, + height: 17.h, + 'assets/images/png/location.png', + ), + // validatorText: "Enter your location", + validator: (value) { + if (value!.isEmpty) { + return 'Enter your location '; + } + return null; + }, + inputFormatters: [ + // LengthLimitingTextInputFormatter(20), + RemoveEmojiInputFormatter(), + FilteringTextInputFormatter.allow( + RegExp('[a-zA-Z ]')) + ], + ), + sizedBoxHeight(20.h), + CustomButton( + text: "Continue", + onPressed: () { + if ( + // isValid! + // fullNameController.text.isBlank! && + // userNameController.text.isBlank! && + // datecontroller.text.isBlank! && + // _selectedgendertype.isEmpty && + // locationcontroller.text.isBlank! && + // editProfileImage.profilePicPath.value == + // '' + fullNameController.text.isBlank! || + userNameController.text.isBlank! || + datecontroller.text.isBlank! || + _selectedgendertype.isEmpty || + locationcontroller.text.isBlank! || + editProfileImage.profilePicPath.value == + '') { + utils.showToast('Please fill all fields'); + } else { + TellusUploadData(); + } + // if (_selectedgendertype.isNotEmpty) { + // Get.toNamed(RouteName.individualprofilestep1); + + // // Get.to(() => BusinessPage()); + // } else { + // // Handle case where no selection is made + // utils.showToast('Please select an gender type'); + // } + }), + sizedBoxHeight(30.h), + // const Spacer( + // flex: 3, + // ) + ], + ), ), - ), - ])), - ], - )); + ])), + ], + )), + ); } } diff --git a/lib/onboarding/Signup/View/signupscreen.dart b/lib/onboarding/Signup/View/signupscreen.dart index 6e170c1..541b15c 100644 --- a/lib/onboarding/Signup/View/signupscreen.dart +++ b/lib/onboarding/Signup/View/signupscreen.dart @@ -2,12 +2,14 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:regroup/Common/base_manager.dart'; import 'package:regroup/Utils/Common/CommonDropdown.dart'; import 'package:regroup/Utils/Common/CustomTextformfield.dart'; import 'package:regroup/Utils/Common/CustomNextButton.dart'; import 'package:regroup/Utils/Common/sized_box.dart'; import 'package:regroup/Utils/dialogs.dart'; import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/onboarding/Signup/view_model/postmethod.dart'; import 'package:regroup/resources/routes/route_name.dart'; import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart'; @@ -23,11 +25,18 @@ class _SignupScreenState extends State { TextEditingController passwordController = TextEditingController(); TextEditingController confirmpasscontroller = TextEditingController(); + final GlobalKey _formKey = GlobalKey(); + List _dropdownProductItems = [ 'Individual', 'Business', ]; + final Map _accountTypeMap = { + 'Individual': 1, + 'Business': 2, + }; + String _selectedAccountType = ''; void _onItemSelected(String value) { @@ -36,363 +45,453 @@ class _SignupScreenState extends State { }); } - void _Signincheck() async { - if (emailidcontroller.text.isBlank! || - passwordController.text.isBlank! || - confirmpasscontroller.text.isBlank!) { - Get.snackbar( - 'Error', - 'Enter your credentials', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - } else if (!emailidcontroller.text.isEmail) { - Get.snackbar( - 'Error', - 'Enter a valid e-mail address', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - } else if (_selectedAccountType == 'Individual') { - print('individual selected'); - Get.toNamed(RouteName.verifyusercreen, arguments: _selectedAccountType); - } else if (_selectedAccountType == 'Business') { - print('business selected'); - Get.toNamed(RouteName.verifyusercreen, arguments: _selectedAccountType); + // void _Signincheck() async { + // if (emailidcontroller.text.isBlank! || + // passwordController.text.isBlank! || + // confirmpasscontroller.text.isBlank!) { + // Get.snackbar( + // 'Error', + // 'Enter your credentials', + // snackPosition: SnackPosition.BOTTOM, + // backgroundColor: Colors.red, + // colorText: Colors.white, + // ); + // } else if (!emailidcontroller.text.isEmail) { + // Get.snackbar( + // 'Error', + // 'Enter a valid e-mail address', + // snackPosition: SnackPosition.BOTTOM, + // backgroundColor: Colors.red, + // colorText: Colors.white, + // ); + // } else if (_selectedAccountType == 'Individual') { + // print('individual selected'); + // Get.toNamed(RouteName.verifyusercreen, arguments: _selectedAccountType); + // } else if (_selectedAccountType == 'Business') { + // print('business selected'); + // Get.toNamed(RouteName.verifyusercreen, arguments: _selectedAccountType); + // } else { + // utils.showToast('Please select an account type'); + // } + // } + + Uploadata() async { + utils.loader(); + int accountTypeValue = _accountTypeMap[_selectedAccountType] ?? 0; + Map updata = { + "email_address": emailidcontroller.text, + "password": passwordController.text, + "account_type": accountTypeValue, + }; + final data = await Onboard().Postregisteration(updata); + if (data.status == ResponseStatus.SUCCESS) { + Get.back(); + print("Sign up done"); + + String selectedCategory = _selectedAccountType; + + Get.toNamed(RouteName.verifyusercreen, + arguments: + { + "emailid" : emailidcontroller.text, + "password" : passwordController.text, + "accounttype" : selectedCategory, + 'accountypenumber' : accountTypeValue + + } + + ); + + // if (selectedCategory == "Individual") { + // Get.toNamed(RouteName.verifyusercreen, + // arguments: + // { + // "emailid" : emailidcontroller.text, + // "password" : passwordController.text, + // "accounttype" : selectedCategory, + // 'accountypenumber' : accountTypeValue + + // } + + // ); + // } else if (selectedCategory == "Individual") { + // Get.toNamed(RouteName.verifyusercreen, + // arguments: + // { + // "emailid" : emailidcontroller.text, + // "password" : passwordController.text, + // "accounttype" : selectedCategory, + // 'accountypenumber' : accountTypeValue + + // } + // ); + // } + + return utils.showToast(data.message); } else { - utils.showToast('Please select an account type'); + Get.back(); + print("registration not done"); + return utils.showToast(data.message); } } @override Widget build(BuildContext context) { - return Scaffold( - resizeToAvoidBottomInset: false, - backgroundColor: const Color.fromARGB(255, 18, 32, 47), - body: Stack( - children: [ - Container( - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/images/png/Choice screen.png"), - fit: BoxFit.fill)), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(top: 150.h), - child: Center(child: text22400white('Create account')), - ), - Expanded( - child: SingleChildScrollView( - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: 16.w, vertical: 30.h), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - text16400white('Email address'), - sizedBoxHeight(10.h), - CustomTextFormField( - textEditingController: emailidcontroller, - hintText: "Enter your email address", - leadingIcon: - // const Icon(Icons.mail_outline), - SizedBox( - width: 22.w, - height: 17.h, - child: Image.asset( - 'assets/images/png/mail.png', - width: 22.w, - height: 17.h, - ), - ), - // validatorText: "Email Id", - validator: (value) { - if (value!.isEmpty) { - return 'Enter your e-mail address'; - } - if (!RegExp( - r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$') - .hasMatch(value)) { - return 'Enter a valid e-mail address'; - } - return null; - }, - inputFormatters: [ - LengthLimitingTextInputFormatter(20), - RemoveEmojiInputFormatter() - ], - ), - sizedBoxHeight(10.h), - text16400white('Password'), - sizedBoxHeight(10.h), - CustomTextFormField( - isInputPassword: true, - textEditingController: passwordController, - hintText: 'Enter your password', - leadingIcon: Image.asset( - 'assets/images/png/lock.png', - width: 22.w, - height: 17.h, - ), - // const Icon(Icons.lock_outline), - // validationMessage: "Enter your password", - validator: (val) { - if (val == null || val.isEmpty) { - return 'Please enter your password'; - } - return null; - }, - inputFormatters: [ - LengthLimitingTextInputFormatter(20), - RemoveEmojiInputFormatter() - ], - ), - sizedBoxHeight(10.h), - text16400white('Confirm password'), - sizedBoxHeight(10.h), - CustomTextFormField( - isInputPassword: true, - textEditingController: confirmpasscontroller, - hintText: "Enter your password", - leadingIcon: Image.asset( - 'assets/images/png/lock.png', - width: 22.w, - height: 17.h, - ), - // const Icon(Icons.lock_outline), - // validatorText: "Enter your password", - validator: (val) { - if (val == null || val.isEmpty) { - return 'Please enter your password'; - } - if (val != passwordController.text) { - return 'Password does not match'; - } - return null; - }, - inputFormatters: [ - LengthLimitingTextInputFormatter(20), - RemoveEmojiInputFormatter() - ], - ), - sizedBoxHeight(10.h), - Row( + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: const Color.fromARGB(255, 18, 32, 47), + body: Stack( + children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: + AssetImage("assets/images/png/Choice screen.png"), + fit: BoxFit.fill)), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(top: 150.h), + child: Center(child: text22400white('Create account')), + ), + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 16.w, vertical: 30.h), + child: Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - text16400white('Account type'), - sizedBoxWidth(5.w), - Image.asset( - 'assets/images/png/informationicon.png') - ], - ), - sizedBoxHeight(10.h), - CustomDropDownRadio( - header: 'Select account type', - title: '', - listData: [ - 'Individual', - 'Business', - ], - onItemSelected: _onItemSelected, - leadingImage: Image.asset( - 'assets/images/png/user.png', - ), - ), - sizedBoxHeight(30.h), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox( - width: 320.w, - height: 42.h, - child: Text.rich( - TextSpan( - children: [ - TextSpan( - text: - 'By signing up to ReGroup you agree to our ', - style: TextStyle( - color: const Color(0xCCFCFCFC), - fontSize: 14.sp, - fontFamily: 'Helvetica', - fontWeight: FontWeight.w400, - ), - ), - TextSpan( - text: 'Terms and Conditions', - style: TextStyle( - color: const Color(0xCCFCFCFC), - fontSize: 14.sp, - fontFamily: 'Helvetica', - fontWeight: FontWeight.w700, - decoration: TextDecoration.underline, - decorationColor: - const Color(0xffFCFCFC) - .withOpacity(0.80), - ), - ), - TextSpan( - text: ' and ', - style: TextStyle( - color: const Color(0xCCFCFCFC), - fontSize: 14.sp, - fontFamily: 'Helvetica', - fontWeight: FontWeight.w400, - ), - ), - TextSpan( - text: 'Privacy Policy', - style: TextStyle( - color: const Color(0xCCFCFCFC), - fontSize: 14.sp, - fontFamily: 'Helvetica', - fontWeight: FontWeight.w700, - decoration: TextDecoration.underline, - decorationColor: - const Color(0xffFCFCFC) - .withOpacity(0.80), - ), - ), - ], - ), - textAlign: TextAlign.center, - ), - ), - ], - ), - sizedBoxHeight(20.h), - CustomButton( - text: "Continue", - onPressed: () { - _Signincheck(); - }), - sizedBoxHeight(20.h), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - width: 160, - decoration: const ShapeDecoration( - shape: RoundedRectangleBorder( - side: BorderSide( - width: 0.50, - strokeAlign: BorderSide.strokeAlignCenter, - color: Color(0xFF434A53), - ), + text16400white('Email address'), + sizedBoxHeight(10.h), + CustomTextFormField( + textEditingController: emailidcontroller, + hintText: "Enter your email address", + leadingIcon: + // const Icon(Icons.mail_outline), + SizedBox( + width: 22.w, + height: 17.h, + child: Image.asset( + 'assets/images/png/mail.png', + width: 22.w, + height: 17.h, ), ), + // validatorText: "Email Id", + validator: (value) { + if (value!.isEmpty) { + return 'Enter your e-mail address'; + } + if (!RegExp( + r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$') + .hasMatch(value)) { + return 'Enter a valid e-mail address'; + } + return null; + }, + inputFormatters: [ + LengthLimitingTextInputFormatter(50), + RemoveEmojiInputFormatter() + ], ), - sizedBoxWidth(6.w), - text14400white('Or'), - sizedBoxWidth(6.w), - Container( - width: 160, - decoration: const ShapeDecoration( - shape: RoundedRectangleBorder( - side: BorderSide( - width: 0.50, - strokeAlign: BorderSide.strokeAlignCenter, - color: Color(0xFF434A53), - ), - ), + sizedBoxHeight(10.h), + text16400white('Password'), + sizedBoxHeight(10.h), + CustomTextFormField( + isInputPassword: true, + textEditingController: passwordController, + hintText: 'Enter your password', + leadingIcon: Image.asset( + 'assets/images/png/lock.png', + width: 22.w, + height: 17.h, ), + // const Icon(Icons.lock_outline), + // validationMessage: "Enter your password", + validator: (val) { + if (val == null || val.isEmpty) { + return 'Please enter your password'; + } + return null; + }, + inputFormatters: [ + LengthLimitingTextInputFormatter(50), + RemoveEmojiInputFormatter() + ], ), - ], - ), - sizedBoxHeight(20.h), - Center( - child: SizedBox( - width: 220.w, - child: Row( + sizedBoxHeight(10.h), + text16400white('Confirm password'), + sizedBoxHeight(10.h), + CustomTextFormField( + isInputPassword: true, + textEditingController: confirmpasscontroller, + hintText: "Enter your password", + leadingIcon: Image.asset( + 'assets/images/png/lock.png', + width: 22.w, + height: 17.h, + ), + // const Icon(Icons.lock_outline), + // validatorText: "Enter your password", + validator: (val) { + if (val == null || val.isEmpty) { + return 'Please enter your password'; + } + if (val != passwordController.text) { + return 'Password does not match'; + } + return null; + }, + inputFormatters: [ + LengthLimitingTextInputFormatter(50), + RemoveEmojiInputFormatter() + ], + ), + sizedBoxHeight(10.h), + Row( children: [ - Container( - width: 55, - height: 55, - decoration: ShapeDecoration( - gradient: LinearGradient( - begin: const Alignment(0.71, -0.70), - end: const Alignment(-0.71, 0.7), - colors: [ - Colors.white.withOpacity( - 0.07999999821186066), - Colors.white.withOpacity( - 0.12999999523162842) - ], - ), - shape: const OvalBorder( - side: BorderSide( - width: 0.50, - color: Color(0xFF434A53)), - ), - image: const DecorationImage( - image: AssetImage( - 'assets/images/png/login2.png'))), - ), - const Spacer(), - Container( - width: 55, - height: 55, - decoration: ShapeDecoration( - gradient: LinearGradient( - begin: const Alignment(0.71, -0.70), - end: const Alignment(-0.71, 0.7), - colors: [ - Colors.white.withOpacity( - 0.07999999821186066), - Colors.white.withOpacity( - 0.12999999523162842) - ], - ), - shape: const OvalBorder( - side: BorderSide( - width: 0.50, - color: Color(0xFF434A53)), - ), - image: const DecorationImage( - image: AssetImage( - 'assets/images/png/login3.png'))), - ), - const Spacer(), - Container( - width: 55, - height: 55, - decoration: ShapeDecoration( - gradient: LinearGradient( - begin: const Alignment(0.71, -0.70), - end: const Alignment(-0.71, 0.7), - colors: [ - Colors.white.withOpacity( - 0.07999999821186066), - Colors.white.withOpacity( - 0.12999999523162842) - ], - ), - shape: const OvalBorder( - side: BorderSide( - width: 0.50, - color: Color(0xFF434A53)), - ), - image: const DecorationImage( - image: AssetImage( - 'assets/images/png/login4.png'))), + text16400white('Account type'), + sizedBoxWidth(5.w), + Image.asset( + 'assets/images/png/informationicon.png') + ], + ), + sizedBoxHeight(10.h), + CustomDropDownRadio( + header: 'Select account type', + title: '', + listData: [ + 'Individual', + 'Business', + ], + onItemSelected: _onItemSelected, + leadingImage: Image.asset( + 'assets/images/png/user.png', + ), + ), + sizedBoxHeight(30.h), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox( + width: 320.w, + height: 42.h, + child: Text.rich( + TextSpan( + children: [ + TextSpan( + text: + 'By signing up to ReGroup you agree to our ', + style: TextStyle( + color: const Color(0xCCFCFCFC), + fontSize: 14.sp, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w400, + ), + ), + TextSpan( + text: 'Terms and Conditions', + style: TextStyle( + color: const Color(0xCCFCFCFC), + fontSize: 14.sp, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w700, + decoration: + TextDecoration.underline, + decorationColor: + const Color(0xffFCFCFC) + .withOpacity(0.80), + ), + ), + TextSpan( + text: ' and ', + style: TextStyle( + color: const Color(0xCCFCFCFC), + fontSize: 14.sp, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w400, + ), + ), + TextSpan( + text: 'Privacy Policy', + style: TextStyle( + color: const Color(0xCCFCFCFC), + fontSize: 14.sp, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w700, + decoration: + TextDecoration.underline, + decorationColor: + const Color(0xffFCFCFC) + .withOpacity(0.80), + ), + ), + ], + ), + textAlign: TextAlign.center, + ), ), ], ), - ), + sizedBoxHeight(20.h), + CustomButton( + text: "Continue", + onPressed: () { + // _Signincheck(); + final isValid = + _formKey.currentState?.validate(); + if ( + // isValid! + emailidcontroller.text.isBlank! && + passwordController.text.isBlank! && + confirmpasscontroller + .text.isBlank! && + _selectedAccountType.isEmpty) { + print(emailidcontroller.text); + print(passwordController.text); + print(_selectedAccountType.toString()); + utils.showToast('Please fill all fields'); + } else { + Uploadata(); + } + }), + sizedBoxHeight(20.h), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: 160, + decoration: const ShapeDecoration( + shape: RoundedRectangleBorder( + side: BorderSide( + width: 0.50, + strokeAlign: + BorderSide.strokeAlignCenter, + color: Color(0xFF434A53), + ), + ), + ), + ), + sizedBoxWidth(6.w), + text14400white('Or'), + sizedBoxWidth(6.w), + Container( + width: 160, + decoration: const ShapeDecoration( + shape: RoundedRectangleBorder( + side: BorderSide( + width: 0.50, + strokeAlign: + BorderSide.strokeAlignCenter, + color: Color(0xFF434A53), + ), + ), + ), + ), + ], + ), + sizedBoxHeight(20.h), + Center( + child: SizedBox( + width: 220.w, + child: Row( + children: [ + Container( + width: 55, + height: 55, + decoration: ShapeDecoration( + gradient: LinearGradient( + begin: + const Alignment(0.71, -0.70), + end: const Alignment(-0.71, 0.7), + colors: [ + Colors.white.withOpacity( + 0.07999999821186066), + Colors.white.withOpacity( + 0.12999999523162842) + ], + ), + shape: const OvalBorder( + side: BorderSide( + width: 0.50, + color: Color(0xFF434A53)), + ), + image: const DecorationImage( + image: AssetImage( + 'assets/images/png/login2.png'))), + ), + const Spacer(), + Container( + width: 55, + height: 55, + decoration: ShapeDecoration( + gradient: LinearGradient( + begin: + const Alignment(0.71, -0.70), + end: const Alignment(-0.71, 0.7), + colors: [ + Colors.white.withOpacity( + 0.07999999821186066), + Colors.white.withOpacity( + 0.12999999523162842) + ], + ), + shape: const OvalBorder( + side: BorderSide( + width: 0.50, + color: Color(0xFF434A53)), + ), + image: const DecorationImage( + image: AssetImage( + 'assets/images/png/login3.png'))), + ), + const Spacer(), + Container( + width: 55, + height: 55, + decoration: ShapeDecoration( + gradient: LinearGradient( + begin: + const Alignment(0.71, -0.70), + end: const Alignment(-0.71, 0.7), + colors: [ + Colors.white.withOpacity( + 0.07999999821186066), + Colors.white.withOpacity( + 0.12999999523162842) + ], + ), + shape: const OvalBorder( + side: BorderSide( + width: 0.50, + color: Color(0xFF434A53)), + ), + image: const DecorationImage( + image: AssetImage( + 'assets/images/png/login4.png'))), + ), + ], + ), + ), + ), + sizedBoxHeight(20.h), + ], ), - sizedBoxHeight(20.h), - ], + ), ), ), - ), - ) - ], - ), - ], - )); + ) + ], + ), + ], + )), + ); } } diff --git a/lib/onboarding/Signup/View/verifyuser.dart b/lib/onboarding/Signup/View/verifyuser.dart index fc1575a..e276bd8 100644 --- a/lib/onboarding/Signup/View/verifyuser.dart +++ b/lib/onboarding/Signup/View/verifyuser.dart @@ -4,13 +4,18 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:glassmorphism/glassmorphism.dart'; import 'package:pin_code_fields/pin_code_fields.dart'; +import 'package:regroup/Common/base_manager.dart'; +import 'package:regroup/Global.dart'; import 'package:regroup/Utils/Common/CommonAppbar.dart'; import 'package:regroup/Utils/Common/CustomNextButton.dart'; import 'package:regroup/Utils/Common/blureffect.dart'; import 'package:regroup/Utils/Common/sized_box.dart'; import 'package:regroup/Utils/dialogs.dart'; import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/onboarding/Signup/view_model/postmethod.dart'; import 'package:regroup/resources/routes/route_name.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:timer_button/timer_button.dart'; class VerifyuserScreenState extends StatefulWidget { const VerifyuserScreenState({super.key}); @@ -20,8 +25,61 @@ class VerifyuserScreenState extends StatefulWidget { } class _VerifyuserScreenStateState extends State { - String accounttype = Get.arguments; - TextEditingController? pincode = TextEditingController(); + // String accounttype = Get.arguments; + TextEditingController pincode = TextEditingController(); + + String email = Get.arguments['emailid']; + String userpassword = Get.arguments['password']; + String accounttype = Get.arguments['accounttype']; + int accounttypenumber = Get.arguments["accountypenumber"]; + + Uploadata() async { + utils.loader(); + Map updata = { + "email_address": email, + "password": userpassword, + "account_type": accounttypenumber, + "otp": pincode.text + }; + final data = await Onboard().Postverifyregisteration(updata); + if (data.status == ResponseStatus.SUCCESS) { + Get.back(); + print("verification done"); + + if (accounttype == 'Individual') { + print('individual selected'); + Get.toNamed(RouteName.tellusindividualscreen); + } else if (accounttype == 'Business') { + print('business selected'); + Get.toNamed(RouteName.tellusbusinessscreen); + } + + return utils.showToast(data.message); + } else { + Get.back(); + print("verification not done"); + return utils.showToast(data.message); + } + } + + Uploadataresendotp() async { + utils.loader(); + Map updata = { + "email_address": email, + "password": userpassword, + "account_type": accounttypenumber, + }; + final data = await Onboard().Postregisteration(updata); + if (data.status == ResponseStatus.SUCCESS) { + Get.back(); + print("resend up done"); + return utils.showToast(data.message); + } else { + Get.back(); + print("resend not done"); + return utils.showToast(data.message); + } + } @override Widget build(BuildContext context) { @@ -80,7 +138,7 @@ class _VerifyuserScreenStateState extends State { text22400white('Check your email'), sizedBoxHeight(10.h), text14400white( - 'Enter the verification code that we sent to loremipsum@gmail.com'), + 'Enter the verification code that we sent to $email'), sizedBoxHeight(40.h), text16400white('Enter code'), sizedBoxHeight(20.h), @@ -141,22 +199,46 @@ class _VerifyuserScreenStateState extends State { }, appContext: context, ), + sizedBoxHeight(10.h), + Center( + child: TimerButton( + disabledTextStyle: TextStyle(color: Colors.red), + activeTextStyle: TextStyle(color: Colors.white), + disabledColor: Color(0XFF222935).withOpacity(0.10), + buttonType: ButtonType.textButton, + label: "Resend OTP", + timeOutInSeconds: 120, + //mobile.text.isEmpty ? 1 : 60, + onPressed: () { + setState(() { + Uploadataresendotp(); + }); + }, + // disabledColor: Colors.white, + color: Color(0XFF222935).withOpacity(0.10), + ), + ), const Spacer( flex: 3, ), CustomButton( text: 'Continue', onPressed: () { - if (pincode!.text.isEmpty) { + if (pincode.text.isEmpty) { utils.showToast('Pin field is empty'); + } else if (pincode.text.length < 4) { + utils.showToast( + 'Pin field must be at least 4 characters long'); } else { - if (accounttype == 'Individual') { - print('individual selected'); - Get.toNamed(RouteName.tellusindividualscreen); - } else if (accounttype == 'Business') { - print('business selected'); - Get.toNamed(RouteName.tellusbusinessscreen); - } + Uploadata(); + + // if (accounttype == 'Individual') { + // print('individual selected'); + // Get.toNamed(RouteName.tellusindividualscreen); + // } else if (accounttype == 'Business') { + // print('business selected'); + // Get.toNamed(RouteName.tellusbusinessscreen); + // } } }), const Spacer( diff --git a/lib/onboarding/Signup/view_model/getmethod.dart b/lib/onboarding/Signup/view_model/getmethod.dart new file mode 100644 index 0000000..9863294 --- /dev/null +++ b/lib/onboarding/Signup/view_model/getmethod.dart @@ -0,0 +1,65 @@ +import 'dart:async'; +import 'dart:developer'; + +import 'package:regroup/Common/api_urls.dart'; +import 'package:regroup/Common/base_manager.dart'; +import 'package:regroup/Common/controller/data/network/network_api.dart'; +import 'package:regroup/onboarding/Signup/Model/Onboarding/Individual/CommunitiesModel.dart'; +import 'package:regroup/onboarding/Signup/Model/Onboarding/Individual/GroupModel.dart'; +import 'package:regroup/onboarding/Signup/Model/Onboarding/IndividualModel.dart'; + + +GetIndividualactivityModel? indiactivityobj; +GrouplistModel? grouplistobj; +GetcommunitiesModel? communitylistobj; + + + + +class Getonboard { + + Future> getIndividualactivity() async { + final response = await NetworkApiServices() + .getApi( + ApiUrls.getIndividualactivity, + // optionalpar: false + ); + if (response.status == ResponseStatus.SUCCESS) { + indiactivityobj = GetIndividualactivityModel.fromJson(response.data); + log(indiactivityobj!.data.toString()); + } + return response; + } + + Future> getGroupsearch(updata, + {required StreamController streamController}) async { + final response = + await NetworkApiServices().getApi( + "${ApiUrls.getgroups}?search_data=$updata", + + ); + + if (response.status == ResponseStatus.SUCCESS) { + grouplistobj = GrouplistModel.fromJson(response.data); + if (!streamController.isClosed) streamController.sink.add(grouplistobj!); + } + return response; + } + + + Future> getCommunitysearch(updata, + {required StreamController streamController}) async { + final response = + await NetworkApiServices().getApi( + "${ApiUrls.getcommunities}?search_data=$updata", + + ); + + if (response.status == ResponseStatus.SUCCESS) { + communitylistobj = GetcommunitiesModel.fromJson(response.data); + if (!streamController.isClosed) streamController.sink.add(communitylistobj!); + } + return response; + } + +} \ No newline at end of file diff --git a/lib/onboarding/Signup/view_model/postmethod.dart b/lib/onboarding/Signup/view_model/postmethod.dart new file mode 100644 index 0000000..2c4c922 --- /dev/null +++ b/lib/onboarding/Signup/view_model/postmethod.dart @@ -0,0 +1,85 @@ +import 'dart:async'; + +import 'package:regroup/Common/api_urls.dart'; +import 'package:regroup/Common/base_manager.dart'; +import 'package:regroup/Common/controller/data/network/network_api.dart'; +import 'package:regroup/Global.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + + + +class Onboard { + Onboard(); + + Future> Postregisteration(updata) async { + print("updata is $updata"); + final response = await NetworkApiServices() + .postApi(updata, ApiUrls.registeration, optionalpar: true); + print("response is ${response.data}"); + print("response message is ${response.message}"); + return response; + } + + Future> Postverifyregisteration(updata) async { + print("updata is $updata"); + final response = await NetworkApiServices() + .postApi(updata, ApiUrls.verifyregisteration, optionalpar: true); + print("response is ${response.data}"); + print("response message is ${response.message}"); + final SharedPreferences prefs = await SharedPreferences.getInstance(); + Map res = response.data; + print("res is $res"); + await prefs.setString('token', res['data']['token']); + await prefs.setString('email', res['data']['email']); + await prefs.setInt('isprofileupdate', res['data']['is_profile_updated']); + + token = res['data']['token']; + emailid = res['data']['email']; + isprofileupdated = res['data']['is_profile_updated']; + + print("token is $token"); + print("email is $emailid"); + print("profile update value is $isprofileupdated"); + + return response; + } + + Future PosttellusIndividual(updata) async { + print("updata is $updata"); + final response = + await NetworkApiServices().postApi(updata, ApiUrls.tellusIndividual); + print("response is ${response.data}"); + print("response message is ${response.message}"); + + return response; + } + + Future> PostIndividualActivity(updata) async { + print("updata is $updata"); + final response = await NetworkApiServices() + .postApi(updata, ApiUrls.postindividualactivity,); + print("response is ${response.data}"); + print("response message is ${response.message}"); + return response; + } + + Future> postGroups(updata) async { + print("updata is $updata"); + final response = await NetworkApiServices() + .postApi(updata, ApiUrls.postgroups,); + print("response is ${response.data}"); + print("response message is ${response.message}"); + return response; + } + + Future> postCommunities(updata) async { + print("updata is $updata"); + final response = await NetworkApiServices() + .postApi(updata, ApiUrls.postcommunities,); + print("response is ${response.data}"); + print("response message is ${response.message}"); + return response; + } + + +} diff --git a/pubspec.lock b/pubspec.lock index d6cee6a..8874819 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -941,6 +941,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.1" + timer_button: + dependency: "direct main" + description: + name: timer_button + sha256: "448a67cc29a07e2696f8bd025f0ebd859cf156c35b4eeeee0121a728dceba7c9" + url: "https://pub.dev" + source: hosted + version: "2.1.1" timezone: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 630ba55..7f1ac4b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -69,6 +69,7 @@ dependencies: statsfl: ^2.3.0 glass_kit: ^4.0.1 flutter_facebook_auth: ^6.0.4 + timer_button: ^2.1.1 -- 2.34.1 From 54283a2a4c5c605be2eaf7f08be634fb2870ac32 Mon Sep 17 00:00:00 2001 From: Shubhamshirva Date: Thu, 11 Jul 2024 17:30:50 +0530 Subject: [PATCH 2/2] conflicts in verify user page resolved --- lib/onboarding/Signup/View/verifyuser.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/onboarding/Signup/View/verifyuser.dart b/lib/onboarding/Signup/View/verifyuser.dart index 51a883a..5c7d6ea 100644 --- a/lib/onboarding/Signup/View/verifyuser.dart +++ b/lib/onboarding/Signup/View/verifyuser.dart @@ -84,6 +84,7 @@ class _VerifyuserScreenStateState extends State { print("resend not done"); return utils.showToast(data.message); } + } @override @@ -260,4 +261,4 @@ class _VerifyuserScreenStateState extends State { ), ); } -} +} \ No newline at end of file -- 2.34.1