diff --git a/assets/images/png/Ellipse 37 (1).png b/assets/images/png/Ellipse 37 (1).png new file mode 100644 index 0000000..e4d2d06 Binary files /dev/null and b/assets/images/png/Ellipse 37 (1).png differ diff --git a/assets/images/png/Rectangle 49 (1).png b/assets/images/png/Rectangle 49 (1).png new file mode 100644 index 0000000..33d467b Binary files /dev/null and b/assets/images/png/Rectangle 49 (1).png differ diff --git a/assets/images/png/edit 1.png b/assets/images/png/edit 1.png new file mode 100644 index 0000000..39a077a Binary files /dev/null and b/assets/images/png/edit 1.png differ diff --git a/lib/Common/api_urls.dart b/lib/Common/api_urls.dart index bbe2f65..057a17c 100644 --- a/lib/Common/api_urls.dart +++ b/lib/Common/api_urls.dart @@ -64,6 +64,18 @@ class ApiUrls { static const postnotification = "${baseUrl}update-notification-settings"; static const getnotification = "${baseUrl}fetch-notification-settings"; + static const getblockuser = "${baseUrl}fetch-blocked-profile"; + static const postblockuser = "${baseUrl}block-profile"; + + +// Individual + static const posteditprofile = "${baseUrl}update-profile"; + static const geteditprofile = "${baseUrl}fetch-profile"; + +// Business + static const posteditprofilebusiness = "${baseUrl}update-business-profile"; + static const geteditprofilebusiness = "${baseUrl}fetch-business-profile"; + } diff --git a/lib/Common/controller/MainController.dart b/lib/Common/controller/MainController.dart index 93846a1..32c64e1 100644 --- a/lib/Common/controller/MainController.dart +++ b/lib/Common/controller/MainController.dart @@ -6,7 +6,7 @@ import 'package:regroup/Feed%20Module/Main_Screens/Chats/View/chatsmainscreen.da import 'package:regroup/Feed%20Module/Main_Screens/Community/Community.dart'; import 'package:regroup/Feed%20Module/Main_Screens/GroupTab/View/GroupTab.dart'; -import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/ProfileTab.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/View/ProfileTab.dart'; class MainController extends GetxController { var selectedIndex = 0.obs; diff --git a/lib/Feed Module/Main_Screens/GroupTab/View/NewPost.dart b/lib/Feed Module/Main_Screens/GroupTab/View/NewPost.dart index 111c005..4fc4d58 100644 --- a/lib/Feed Module/Main_Screens/GroupTab/View/NewPost.dart +++ b/lib/Feed Module/Main_Screens/GroupTab/View/NewPost.dart @@ -224,11 +224,13 @@ class _NewPostState extends State { CustomDropDownCheckBox( header: "", title: "", + listData: [ 'Active alliance network', 'Fitfam federation', 'The athletic town', 'Football fever' + ], onItemSelected: (p0) {}, images: [ diff --git a/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/EditProfile.dart b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/EditProfile.dart deleted file mode 100644 index d87c3d7..0000000 --- a/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/EditProfile.dart +++ /dev/null @@ -1,276 +0,0 @@ -import 'dart:io'; - -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:regroup/Common/CommonButton.dart'; -import 'package:regroup/Common/CommonDropDown.dart'; -import 'package:regroup/Common/CommonWidget.dart'; -import 'package:regroup/Utils/Common/CommonDropdown.dart'; -import 'package:regroup/Utils/Common/CustomTextformfield.dart'; -import 'package:regroup/Utils/Common/CommonAppbar.dart'; -import 'package:regroup/Utils/Common/ImageUpload.dart'; -import 'package:regroup/Utils/Common/blureffect.dart'; -import 'package:regroup/Utils/Common/sized_box.dart'; -import 'package:regroup/Utils/texts.dart'; -import 'package:intl/intl.dart'; - -class EditProfile extends StatefulWidget { - const EditProfile({super.key}); - - @override - State createState() => _EditProfileState(); -} - -class _EditProfileState extends State { - TextEditingController dateController = TextEditingController(); - - List filePath = []; - bool? isImageAdded = false; - @override - Widget build(BuildContext context) { - return Scaffold( - // key: _scaffoldKey1, - backgroundColor: Color(0xFF222935), - extendBody: true, - appBar: CommonAppbar( - titleTxt: "", - ), - body: Stack(children: [ - Container( - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/images/png/Ellipse 1496.png"), fit: BoxFit.fill)), - ), - SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: Column(children: [ - sizedBoxHeight(25.h), - Stack( - children: [ - filePath.isNotEmpty - ? ClipOval( - child: SizedBox.fromSize( - size: Size.fromRadius(50.r), - child: Image.file( - filePath[0]!, - fit: BoxFit.cover, - width: double.infinity, - ), - ), - ) - : CircleAvatar( - backgroundImage: AssetImage( - "assets/images/png/cimg3.png", - ), - radius: 50.r, - ), - Positioned( - bottom: 0, - right: 0, - child: InkWell( - onTap: () { - ImageUploadBottomSheet().showModal( - context, - true, - (result) { - var file = File(result); - - filePath.add(file); - isImageAdded = true; - setState(() {}); - }, - ); - }, - child: Container( - height: 35.h, - width: 35.w, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Color(0xFFD90B2E)), - child: Center( - child: Image.asset( - "assets/images/png/cameraicon2.png", - height: 19.h, - width: 19.w, - ), - ), - ), - )) - ], - ), - sizedBoxHeight(15.h), - text16400white("Edit profile picture"), - sizedBoxHeight(20.h), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - text16400white("Full name"), - sizedBoxHeight(16.h), - CustomTextFormField( - leadingIcon: Container( - width: 18.w, - height: 17.h, - child: Center( - child: Image.asset( - "assets/images/png/Frame 24.png", - width: 18.w, - height: 17.h, - ), - ), - ), - hintText: "Edward Hackett", - ), - sizedBoxHeight(20.h), - text16400white("User name"), - sizedBoxHeight(16.h), - CustomTextFormField( - leadingIcon: Container( - width: 18.w, - height: 17.h, - child: Center( - child: Image.asset( - "assets/images/png/Frame 24.png", - width: 18.w, - height: 17.h, - ), - ), - ), - hintText: "edward_01", - ), - sizedBoxHeight(20.h), - text16400white("Date of birth"), - sizedBoxHeight(16.h), - GestureDetector( - onTap: () => datePicker(context, dateController), - child: AbsorbPointer( - child: CustomTextFormField( - leadingIcon: Container( - width: 18.0, - height: 17.0, - child: Center( - child: Image.asset( - "assets/images/png/calender.png", - width: 18.0, - height: 17.0, - ), - ), - ), - hintText: "12-04-2024", - textEditingController: dateController, - ), - ), - ), - - sizedBoxHeight(20.h), - text16400white("Gender"), - sizedBoxHeight(16.h), - CustomDropDownRadio( - header: "Male", - title: "", - showOtherOption: true, - listData: ["Male", "Female", "Prefer not to say"], - onItemSelected: (p0) {}, - leadingImage: Image.asset( - "assets/images/png/Vector ws.png", - width: 18.w, - height: 17.h, - ), - ), - sizedBoxHeight(25.h), - Row( - children: [ - text16400white("Location"), - sizedBoxWidth(6.w), - Image.asset( - "assets/images/png/octicon_question-24.png", - height: 16.h, - width: 16.w, - ) - ], - ), - sizedBoxHeight(16.h), - CustomTextFormField( - leadingIcon: Container( - width: 18.w, - height: 17.h, - child: Center( - child: Image.asset( - "assets/images/png/Group 58645.png", - width: 18.w, - height: 17.h, - ), - ), - ), - hintText: "Elm street london, United Kingdom", - ), - sizedBoxHeight(20.h), - Row( - children: [ - text16400white("Primary sport"), - sizedBoxWidth(6.w), - Image.asset( - "assets/images/png/octicon_question-24.png", - height: 16.h, - width: 16.w, - ) - ], - ), - sizedBoxHeight(16.h), - CustomDropDownRadio( - showOtherOption: true, - header: "Rowing, Rugby, Swimming", - title: "", - listData: [ - "Rowing", - "Cycling", - "Running", - "Swimming", - "Triathlon", - "Hiking", - "Football", - "Rugby" - ], - onItemSelected: (p0) {}, - leadingImage: Image.asset( - "assets/images/png/Vector (4).png", - width: 18.w, - height: 17.h, - ), - ), - // CommonDropdownradioBtn( - // hint: "Rowing, Rugby, Swimming", - // items: [ - // "Rowing", - // "Cycling", - // "Running", - // "Swimming", - // "Triathlon", - // "Hiking", - // "Football", - // "Rugby" - // ], - // leadingIcon: Image.asset( - // "assets/images/png/Vector (4).png", - // width: 18.w, - // height: 17.h, - // ), - // showOtherOption: true, - // ), - sizedBoxHeight(20.h), - text16400white("Bio"), - sizedBoxHeight(16.h), - CustomTextFormField2( - hintText: - "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s. Lorem Ipsum has been the industry's standard", - maxlines: 3, - ), - sizedBoxHeight(60.h), - CommonBtn(text: "Save"), - sizedBoxHeight(60.h), - ], - ) - ]))) - ])); - } -} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/Model/GetEditProfileBus.dart b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/Model/GetEditProfileBus.dart new file mode 100644 index 0000000..34054e6 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/Model/GetEditProfileBus.dart @@ -0,0 +1,178 @@ +class GetEditProfileBus { + String? status; + int? statusCode; + String? message; + Data? data; + + GetEditProfileBus({this.status, this.statusCode, this.message, this.data}); + + GetEditProfileBus.fromJson(Map json) { + status = json['status']; + statusCode = json['status_code']; + message = json['message']; + data = json['data'] != null ? new Data.fromJson(json['data']) : null; + } + + 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!.toJson(); + } + return data; + } +} + +class Data { + int? id; + int? businessTypeXid; + String? businessOwnerName; + String? businessName; + String? businessLocation; + String? businessContactNumber; + String? businessEmail; + String? businessHandle; + String? websiteLink; + String? googleReviewLink; + String? businessLogo; + String? tags; + String? bannerImage; + Follows? follows; + BusinessType? businessType; + + Data( + {this.id, + this.businessTypeXid, + this.businessOwnerName, + this.businessName, + this.businessLocation, + this.businessContactNumber, + this.businessEmail, + this.businessHandle, + this.websiteLink, + this.googleReviewLink, + this.businessLogo, + this.tags, + this.bannerImage, + this.follows, + this.businessType}); + + Data.fromJson(Map json) { + id = json['id']; + businessTypeXid = json['business_type_xid']; + businessOwnerName = json['business_owner_name']; + businessName = json['business_name']; + businessLocation = json['business_location']; + businessContactNumber = json['business_contact_number']; + businessEmail = json['business_email']; + businessHandle = json['business_handle']; + websiteLink = json['website_link']; + googleReviewLink = json['google_review_link']; + businessLogo = json['business_logo']; + tags = json['tags']; + bannerImage = json['banner_image']; + follows = + json['follows'] != null ? new Follows.fromJson(json['follows']) : null; + businessType = json['business_type'] != null + ? new BusinessType.fromJson(json['business_type']) + : null; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['business_type_xid'] = this.businessTypeXid; + data['business_owner_name'] = this.businessOwnerName; + data['business_name'] = this.businessName; + data['business_location'] = this.businessLocation; + data['business_contact_number'] = this.businessContactNumber; + data['business_email'] = this.businessEmail; + data['business_handle'] = this.businessHandle; + data['website_link'] = this.websiteLink; + data['google_review_link'] = this.googleReviewLink; + data['business_logo'] = this.businessLogo; + data['tags'] = this.tags; + data['banner_image'] = this.bannerImage; + if (this.follows != null) { + data['follows'] = this.follows!.toJson(); + } + if (this.businessType != null) { + data['business_type'] = this.businessType!.toJson(); + } + return data; + } +} + +class Follows { + int? following; + int? followers; + + Follows({this.following, this.followers}); + + Follows.fromJson(Map json) { + following = json['following']; + followers = json['followers']; + } + + Map toJson() { + final Map data = new Map(); + data['following'] = this.following; + data['followers'] = this.followers; + return data; + } +} + +class BusinessType { + int? id; + String? name; + String? image; + String? description; + int? isActive; + String? createdBy; + String? modifiedBy; + String? deletedAt; + String? createdAt; + String? updatedAt; + + BusinessType( + {this.id, + this.name, + this.image, + this.description, + this.isActive, + this.createdBy, + this.modifiedBy, + this.deletedAt, + this.createdAt, + this.updatedAt}); + + BusinessType.fromJson(Map json) { + id = json['id']; + name = json['name']; + image = json['image']; + description = json['description']; + isActive = json['is_active']; + createdBy = json['created_by']; + modifiedBy = json['modified_by']; + deletedAt = json['deleted_at']; + createdAt = json['created_at']; + updatedAt = json['updated_at']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + data['image'] = this.image; + data['description'] = this.description; + data['is_active'] = this.isActive; + data['created_by'] = this.createdBy; + data['modified_by'] = this.modifiedBy; + data['deleted_at'] = this.deletedAt; + data['created_at'] = this.createdAt; + data['updated_at'] = this.updatedAt; + return data; + } +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/Model/GetEditProfileIndi.dart b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/Model/GetEditProfileIndi.dart new file mode 100644 index 0000000..9558581 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/Model/GetEditProfileIndi.dart @@ -0,0 +1,139 @@ +class GetEditProfileIndi { + String? status; + int? statusCode; + String? message; + Data? data; + + GetEditProfileIndi({this.status, this.statusCode, this.message, this.data}); + + GetEditProfileIndi.fromJson(Map json) { + status = json['status']; + statusCode = json['status_code']; + message = json['message']; + data = json['data'] != null ? new Data.fromJson(json['data']) : null; + } + + 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!.toJson(); + } + return data; + } +} + +class Data { + int? id; + String? userName; + String? fullName; + String? gender; + String? dateOfBirth; + List? interest; + String? about; + String? position; + String? trainingScores; + String? height; + String? weight; + String? battingAverage; + Follows? follows; + + Data( + {this.id, + this.userName, + this.fullName, + this.gender, + this.dateOfBirth, + this.interest, + this.about, + this.position, + this.trainingScores, + this.height, + this.weight, + this.battingAverage, + this.follows}); + + Data.fromJson(Map json) { + id = json['id']; + userName = json['user_name']; + fullName = json['full_name']; + gender = json['gender']; + dateOfBirth = json['date_of_birth']; + if (json['interest'] != null) { + interest = []; + json['interest'].forEach((v) { + interest!.add(new Interest.fromJson(v)); + }); + } + about = json['about']; + position = json['position']; + trainingScores = json['training_scores']; + height = json['height']; + weight = json['weight']; + battingAverage = json['batting_average']; + follows = + json['follows'] != null ? new Follows.fromJson(json['follows']) : null; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['user_name'] = this.userName; + data['full_name'] = this.fullName; + data['gender'] = this.gender; + data['date_of_birth'] = this.dateOfBirth; + if (this.interest != null) { + data['interest'] = this.interest!.map((v) => v.toJson()).toList(); + } + data['about'] = this.about; + data['position'] = this.position; + data['training_scores'] = this.trainingScores; + data['height'] = this.height; + data['weight'] = this.weight; + data['batting_average'] = this.battingAverage; + if (this.follows != null) { + data['follows'] = this.follows!.toJson(); + } + return data; + } +} + +class Interest { + int? id; + String? name; + + Interest({this.id, this.name}); + + Interest.fromJson(Map json) { + id = json['id']; + name = json['name']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + return data; + } +} + +class Follows { + int? following; + int? followers; + + Follows({this.following, this.followers}); + + Follows.fromJson(Map json) { + following = json['following']; + followers = json['followers']; + } + + Map toJson() { + final Map data = new Map(); + data['following'] = this.following; + data['followers'] = this.followers; + return data; + } +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/BusEditProfile.dart b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/BusEditProfile.dart new file mode 100644 index 0000000..c134233 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/BusEditProfile.dart @@ -0,0 +1,423 @@ +import 'dart:io'; + +import 'package:dio/dio.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart' hide MultipartFile, FormData; +import 'package:regroup/Common/CommonButton.dart'; +import 'package:regroup/Common/CommonWidget.dart'; +import 'package:regroup/Common/base_manager.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/View/ProfileTab.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/ViewModel/EditProfileApi.dart'; +import 'package:regroup/Utils/Common/CommonAppbar.dart'; +import 'package:regroup/Utils/Common/CommonDropdown.dart'; +import 'package:regroup/Utils/Common/ImageUpload.dart'; +import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/dialogs.dart'; +import 'package:regroup/Utils/texts.dart'; +import 'package:path/path.dart' as path; +import 'package:regroup/resources/routes/route_name.dart'; + +import '../../../../../Utils/Common/CustomTextformfield.dart'; + +class BusEditProfile extends StatefulWidget { + const BusEditProfile({super.key}); + + @override + State createState() => _BusEditProfileState(); +} + +class _BusEditProfileState extends State { + TextEditingController busNameController = TextEditingController(); + TextEditingController busUserNameController = TextEditingController(); + TextEditingController ownerNameController = TextEditingController(); + + TextEditingController foundedonController = TextEditingController(); + TextEditingController websiteLinkController = TextEditingController(); + TextEditingController locationController = TextEditingController(); + TextEditingController bioController = TextEditingController(); + + String profilePicture = ""; + bool isImageAdded = false; + + bool isOnce = true; + late Future myfuture; + + convertFileToMultiPart(String? file) async { + return await MultipartFile.fromFile( + file!, + filename: path.basename(file), + ); + } + + @override + void initState() { + // TODO: implement initState + + myfuture = EditProfileApi() + .getEditProfileBusiness() + .then((value) => {setValues()}); + super.initState(); + } + + //Founded on & bio data not there + + setValues() { + if (isOnce) { + busNameController.text = getEditProfileBus!.data!.businessName ?? ''; + busUserNameController.text = getEditProfileBus!.data!.businessName ?? ''; + ownerNameController.text = + getEditProfileBus!.data!.businessOwnerName ?? ''; + foundedonController.text = + getEditProfileBus!.data!.businessOwnerName ?? ''; + websiteLinkController.text = getEditProfileBus!.data!.websiteLink ?? ''; + locationController.text = getEditProfileBus!.data!.businessLocation ?? ''; + + bioController.text = getEditProfileBus!.data!.businessOwnerName ?? ''; + + // _selectedgenderType = getEditProfileIndi!.data!.gender ?? ''; + // _selectedsportType = getEditProfileIndi!.data!.interest!.join(', ') ?? ''; + + isOnce = false; + setState(() {}); + } + } + + void saveEditProfileBus() async { + FormData? updata; + if (busNameController.text.isBlank! || + busUserNameController.text.isBlank! || + ownerNameController.text.isBlank! || + foundedonController.text.isBlank! || + websiteLinkController.text.isBlank! || + locationController.text.isBlank! || + bioController.text.isBlank!) { + Get.snackbar( + 'Error', + 'Enter your credentials', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + ); + } else if (profilePicture == "") { + utils.showToast('Upload edit profile picture!'); + } else { + updata = FormData.fromMap({ + "business_name": busNameController.text, + "business_username": busUserNameController.text, + "business_owner_name": ownerNameController.text, + "founded_on": foundedonController.text, + "website_link": websiteLinkController.text, + "business_location": locationController.text, + "bio": bioController.text, + "business_profile": await convertFileToMultiPart(profilePicture), + }); + + final data = await EditProfileApi().postEditProfileBusiness(updata); + if (data.status == ResponseStatus.SUCCESS) { + // await global.setname(); + // Get.snackbar( + // "Success!", + // 'success!', + // duration: Duration(seconds: 2), + // colorText: Colors.white, + // backgroundColor: Colors.green, + // margin: EdgeInsets.all(8), + // snackStyle: SnackStyle.FLOATING, + // snackPosition: SnackPosition.BOTTOM, + // ); + utils.showToast("Data Saved Successfully"); + // Get.back(); + Get.toNamed(RouteName.profiletab); + // Get.back(result: true); + } else { + // btnController.reset(); + Get.snackbar( + "Error!", + data.data['message'], + duration: Duration(seconds: 2), + colorText: Colors.white, + backgroundColor: Colors.red, + margin: EdgeInsets.all(8), + snackStyle: SnackStyle.FLOATING, + snackPosition: SnackPosition.BOTTOM, + ); + // _controller.isTextFieldEnabled.value = true; + } + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + // key: _scaffoldKey1, + backgroundColor: Color(0xFF222935), + extendBody: true, + appBar: CommonAppbar( + titleTxt: "", + ), + body: FutureBuilder( + future: myfuture, + builder: (ctx, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center( + child: CircularProgressIndicator( + color: Colors.blue, + ), + ); + } + + if (snapshot.hasError) { + return Center( + child: Text( + '${snapshot.error} occurred', + style: TextStyle(fontSize: 18.spMin), + ), + ); + } + + if (snapshot.connectionState == ConnectionState.done && + snapshot.hasData) { + print("Data fetched-->"); + return Stack(children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/images/png/Ellipse 1496.png"), + fit: BoxFit.fill)), + ), + SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Column(children: [ + sizedBoxHeight(25.h), + Stack( + children: [ + profilePicture != "" && isImageAdded + ? ClipOval( + child: SizedBox.fromSize( + size: Size.fromRadius(50.r), + child: Image.file( + File(profilePicture), + // filePath[0]!, + fit: BoxFit.cover, + width: double.infinity, + ), + ), + ) + : getEditProfileBus!.data!.businessLogo != + null + ? Container( + width: 100.w, + height: 100.h, + decoration: ShapeDecoration( + image: DecorationImage( + image: Image( + image: NetworkImage( + getEditProfileBus!.data! + .businessLogo ?? + ''), + ).image, + fit: BoxFit.cover, + ), + shape: OvalBorder(), + ), + ) + : CircleAvatar( + backgroundImage: AssetImage( + "assets/images/png/Ellipse 37 (1).png", + ), + radius: 50.r, + ), + Positioned( + bottom: 0, + right: 0, + child: InkWell( + onTap: () { + ImageUploadBottomSheet().showModal( + context, + true, + (result) { + var filenameresult = + extractFileName(result); + + profilePicture = result; + isImageAdded = true; + setState(() {}); + }, + ); + }, + child: Container( + height: 35.h, + width: 35.w, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Color(0xFFD90B2E)), + child: Center( + child: Image.asset( + "assets/images/png/cameraicon2.png", + height: 19.h, + width: 19.w, + ), + ), + ), + )) + ], + ), + sizedBoxHeight(15.h), + text16400white("Edit profile picture"), + sizedBoxHeight(30.h), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text16400white("Business name"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: busNameController, + leadingIcon: Container( + width: 18.w, + height: 17.h, + child: Center( + child: Image.asset( + "assets/images/png/Frame 24.png", + width: 18.w, + height: 17.h, + ), + ), + ), + hintText: "Victory gear sports emporium", + ), + sizedBoxHeight(20.h), + text16400white("Business username"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: busUserNameController, + leadingIcon: Container( + width: 18.w, + height: 17.h, + child: Center( + child: Image.asset( + "assets/images/png/Frame 24.png", + width: 18.w, + height: 17.h, + ), + ), + ), + hintText: "victorygames _10", + ), + sizedBoxHeight(20.h), + text16400white("Owner name"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: ownerNameController, + leadingIcon: Container( + width: 18.w, + height: 17.h, + child: Center( + child: Image.asset( + "assets/images/png/Frame 24.png", + width: 18.w, + height: 17.h, + ), + ), + ), + hintText: "James Bothman", + ), + sizedBoxHeight(20.h), + text16400white("Founded on"), + sizedBoxHeight(16.h), + GestureDetector( + onTap: () => + datePicker(context, foundedonController), + child: AbsorbPointer( + child: CustomTextFormField( + leadingIcon: Container( + width: 18.0, + height: 17.0, + child: Center( + child: Image.asset( + "assets/images/png/calender.png", + width: 18.0, + height: 17.0, + ), + ), + ), + hintText: "12-04-2024", + textEditingController: + foundedonController, + ), + ), + ), + sizedBoxHeight(20.h), + text16400white("Website link"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: websiteLinkController, + leadingIcon: Container( + width: 18.w, + height: 17.h, + child: Center( + child: Image.asset( + "assets/images/png/Vector2a.png", + width: 18.w, + height: 17.h, + ), + ), + ), + hintText: "victorygames _10", + ), + sizedBoxHeight(25.h), + Row( + children: [ + text16400white("Location"), + sizedBoxWidth(6.w), + Image.asset( + "assets/images/png/octicon_question-24.png", + height: 16.h, + width: 16.w, + ) + ], + ), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: locationController, + leadingIcon: Container( + width: 18.w, + height: 17.h, + child: Center( + child: Image.asset( + "assets/images/png/Group 58645.png", + width: 18.w, + height: 17.h, + ), + ), + ), + hintText: "Elm street london, United Kingdom", + ), + sizedBoxHeight(20.h), + text16400white("Bio"), + sizedBoxHeight(16.h), + CustomTextFormField2( + textEditingController: bioController, + hintText: + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s. Lorem Ipsum has been the industry's standard", + maxlines: 3, + ), + sizedBoxHeight(60.h), + CommonBtn( + text: "Save", + onTap: () { + saveEditProfileBus(); + }, + ), + sizedBoxHeight(60.h), + ], + ) + ]))) + ]); + } + return Container(); + })); + } +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/EditProfile.dart b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/EditProfile.dart new file mode 100644 index 0000000..d4568b9 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/EditProfile.dart @@ -0,0 +1,525 @@ +import 'dart:io'; + +import 'package:dio/dio.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart' hide MultipartFile, FormData; +import 'package:regroup/Common/CommonButton.dart'; +import 'package:regroup/Common/CommonWidget.dart'; +import 'package:regroup/Common/base_manager.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/ViewModel/EditProfileApi.dart'; +import 'package:regroup/Utils/Common/CommonDropdown.dart'; +import 'package:regroup/Utils/Common/CustomTextformfield.dart'; +import 'package:regroup/Utils/Common/CommonAppbar.dart'; +import 'package:regroup/Utils/Common/ImageUpload.dart'; +import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/dialogs.dart'; +import 'package:regroup/Utils/texts.dart'; +import 'package:path/path.dart' as path; + +class EditProfile extends StatefulWidget { + const EditProfile({super.key}); + + @override + State createState() => _EditProfileState(); +} + +class _EditProfileState extends State { + TextEditingController fullNameController = TextEditingController(); + TextEditingController userNameController = TextEditingController(); + TextEditingController dateController = TextEditingController(); + TextEditingController locationController = TextEditingController(); + TextEditingController aboutController = TextEditingController(); + TextEditingController positionController = TextEditingController(); + TextEditingController trainingScoresController = TextEditingController(); + TextEditingController heightController = TextEditingController(); + TextEditingController weightController = TextEditingController(); + TextEditingController battingAvgController = TextEditingController(); + + String profilePicture = ""; + bool isImageAdded = false; + + bool isOnce = true; + late Future myfuture; + + convertFileToMultiPart1(String? file) async { + return await MultipartFile.fromFile( + file!, + filename: path.basename(file), + ); + } + + String extractFileName1(String filePath) { + return path.basename(filePath); + } + + String _selectedgenderType = ''; + + void _onItemSelected(String value) { + setState(() { + _selectedgenderType = value; + }); + } + + String _selectedsportType = ''; + List _selectedSports = []; + + void _onSportSelected(List selectedValues) { + setState(() { + _selectedSports = selectedValues; + _selectedsportType = _selectedSports.join(', '); + }); + } + + List getSelectedSportsIds() { + if (getEditProfileIndi == null || + getEditProfileIndi!.data!.interest == null) { + return []; + } + + return _selectedSports + .map((sportName) => getEditProfileIndi!.data!.interest! + .firstWhere((interest) => interest.name == sportName) + .id!) + .toList(); + } + + @override + void initState() { + // TODO: implement initState + + myfuture = EditProfileApi() + .getEditProfileIndividual() + .then((value) => {setValues()}); + super.initState(); + } + + setValues() { + if (isOnce) { + fullNameController.text = getEditProfileIndi!.data!.fullName ?? ''; + userNameController.text = getEditProfileIndi!.data!.userName ?? ''; + dateController.text = getEditProfileIndi!.data!.dateOfBirth ?? ''; + + _selectedgenderType = getEditProfileIndi!.data!.gender ?? ''; + _selectedSports = + getEditProfileIndi!.data!.interest!.map((e) => e.name!).toList(); + _selectedsportType = _selectedSports.join(', '); + + isOnce = false; + setState(() {}); + } + } + + void saveEditProfileInd() async { + List selectedSportsIds = getSelectedSportsIds(); + FormData? updata; + if (fullNameController.text.isBlank! || + userNameController.text.isBlank! || + dateController.text.isBlank! || + locationController.text.isBlank! || + aboutController.text.isBlank! || + positionController.text.isBlank! || + trainingScoresController.text.isBlank! || + heightController.text.isBlank! || + weightController.text.isBlank! || + battingAvgController.text.isBlank!) { + Get.snackbar( + 'Error', + 'Enter your credentials', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + ); + } else if (profilePicture == "") { + utils.showToast('Upload edit profile picture!'); + } else { + updata = FormData.fromMap({ + "email_address": "priyanka12@yopmail.com", + "full_name": fullNameController.text, + "profile_image": await convertFileToMultiPart1(profilePicture), + // "profile_image": "ghjkk.png", + + "user_name": userNameController.text, + "date_of_birth": dateController.text, + "gender": _selectedgenderType, + // "interest": "selectedSportsIds", + "interest": ["1", "2", "3"].toList(), + "about": aboutController.text, + "position": positionController.text, + "training_scores": trainingScoresController.text, + "height": heightController.text, + "weight": weightController.text, + "batting_average": battingAvgController.text, + "address_line1": battingAvgController.text, + }); + + final data = await EditProfileApi().postEditProfileIndividual(updata); + if (data.status == ResponseStatus.SUCCESS) { + // await global.setname(); + Get.snackbar( + "Success!", + 'success!', + duration: Duration(seconds: 2), + colorText: Colors.white, + backgroundColor: Colors.green, + margin: EdgeInsets.all(8), + snackStyle: SnackStyle.FLOATING, + snackPosition: SnackPosition.BOTTOM, + ); + Get.back(); + + // Get.toNamed(RouteName.individualgroupstep3); + Get.back(); + } else { + // btnController.reset(); + Get.snackbar( + "Error!", + data.data['message'], + duration: Duration(seconds: 2), + colorText: Colors.white, + backgroundColor: Colors.red, + margin: EdgeInsets.all(8), + snackStyle: SnackStyle.FLOATING, + snackPosition: SnackPosition.BOTTOM, + ); + // _controller.isTextFieldEnabled.value = true; + } + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + // key: _scaffoldKey1, + backgroundColor: Color(0xFF222935), + extendBody: true, + appBar: CommonAppbar( + titleTxt: "", + ), + body: FutureBuilder( + future: myfuture, + builder: (ctx, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center( + child: CircularProgressIndicator( + color: Colors.blue, + ), + ); + } + + if (snapshot.hasError) { + return Center( + child: Text( + '${snapshot.error} occurred', + style: TextStyle(fontSize: 18.spMin), + ), + ); + } + + if (snapshot.connectionState == ConnectionState.done && + snapshot.hasData) { + print("Data fetched-->"); + return Stack(children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/images/png/Ellipse 1496.png"), + fit: BoxFit.fill)), + ), + SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Column(children: [ + sizedBoxHeight(25.h), + Stack( + children: [ + profilePicture != "" && isImageAdded + ? ClipOval( + child: SizedBox.fromSize( + size: Size.fromRadius(50.r), + child: Image.file( + File(profilePicture), + // filePath[0]!, + fit: BoxFit.cover, + width: double.infinity, + ), + ), + ) + : CircleAvatar( + backgroundImage: AssetImage( + "assets/images/png/cimg3.png", + ), + radius: 50.r, + ), + Positioned( + bottom: 0, + right: 0, + child: InkWell( + onTap: () { + ImageUploadBottomSheet().showModal( + context, + true, + (result) { + var filenameresult = + extractFileName1(result); + + profilePicture = result; + isImageAdded = true; + setState(() {}); + }, + ); + }, + child: Container( + height: 35.h, + width: 35.w, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Color(0xFFD90B2E)), + child: Center( + child: Image.asset( + "assets/images/png/cameraicon2.png", + height: 19.h, + width: 19.w, + ), + ), + ), + )) + ], + ), + sizedBoxHeight(15.h), + text16400white("Edit profile picture"), + sizedBoxHeight(20.h), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text16400white("Full name"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: fullNameController, + leadingIcon: Container( + width: 18.w, + height: 17.h, + child: Center( + child: Image.asset( + "assets/images/png/Frame 24.png", + width: 18.w, + height: 17.h, + ), + ), + ), + hintText: "Edward Hackett", + ), + sizedBoxHeight(20.h), + text16400white("User name"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: userNameController, + leadingIcon: Container( + width: 18.w, + height: 17.h, + child: Center( + child: Image.asset( + "assets/images/png/Frame 24.png", + width: 18.w, + height: 17.h, + ), + ), + ), + hintText: "edward_01", + ), + sizedBoxHeight(20.h), + text16400white("Date of birth"), + sizedBoxHeight(16.h), + GestureDetector( + onTap: () => + datePicker(context, dateController), + child: AbsorbPointer( + child: CustomTextFormField( + leadingIcon: Container( + width: 18.0, + height: 17.0, + child: Center( + child: Image.asset( + "assets/images/png/calender.png", + width: 18.0, + height: 17.0, + ), + ), + ), + hintText: "12-04-2024", + textEditingController: dateController, + ), + ), + ), + + sizedBoxHeight(20.h), + text16400white("Gender"), + sizedBoxHeight(16.h), + CustomDropDownRadio( + header: _selectedgenderType ?? "Male", + title: "", + showOtherOption: true, + listData: [ + "Male", + "Female", + "Prefer not to say" + ], + onItemSelected: _onItemSelected, + leadingImage: Image.asset( + "assets/images/png/Vector ws.png", + width: 18.w, + height: 17.h, + ), + ), + sizedBoxHeight(25.h), + Row( + children: [ + text16400white("Location"), + sizedBoxWidth(6.w), + Image.asset( + "assets/images/png/octicon_question-24.png", + height: 16.h, + width: 16.w, + ) + ], + ), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: locationController, + leadingIcon: Container( + width: 18.w, + height: 17.h, + child: Center( + child: Image.asset( + "assets/images/png/Group 58645.png", + width: 18.w, + height: 17.h, + ), + ), + ), + hintText: "Elm street london, United Kingdom", + ), + sizedBoxHeight(20.h), + Row( + children: [ + text16400white("Interests"), + sizedBoxWidth(6.w), + Image.asset( + "assets/images/png/octicon_question-24.png", + height: 16.h, + width: 16.w, + ) + ], + ), + sizedBoxHeight(16.h), + CustomDropDownChexkBox( + header: _selectedsportType ?? + "Rowing, Rugby, Swimming", + title: "", + listData: [ + "Rowing", + "Cycling", + "Running", + "Swimming", + "Triathlon", + "Hiking", + "Football", + "Rugby" + ], + onItemSelected: _onSportSelected, + leadingImage: Image.asset( + "assets/images/png/Vector (4).png", + width: 18.w, + height: 17.h, + ), + showOtherOption: true, + initiallySelected: _selectedSports, + ), + // CustomDropDownRadio( + // showOtherOption: true, + // header: _selectedsportType ?? + // "Rowing, Rugby, Swimming", + // title: "", + // listData: [ + // "Rowing", + // "Cycling", + // "Running", + // "Swimming", + // "Triathlon", + // "Hiking", + // "Football", + // "Rugby" + // ], + // onItemSelected: _onSportSelected, + // leadingImage: Image.asset( + // "assets/images/png/Vector (4).png", + // width: 18.w, + // height: 17.h, + // ), + // ), + + sizedBoxHeight(20.h), + text16400white("About"), + sizedBoxHeight(16.h), + CustomTextFormField2( + textEditingController: aboutController, + hintText: + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s. Lorem Ipsum has been the industry's standard", + maxlines: 3, + ), + // sizedBoxHeight(20.h), + + text16400white("Position"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: positionController, + hintText: "Lorem Ipsum", + ), + sizedBoxHeight(20.h), + text16400white("Training Scores"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: + trainingScoresController, + hintText: "50", + ), + sizedBoxHeight(20.h), + text16400white("Height"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: heightController, + hintText: "6 feet", + ), + sizedBoxHeight(20.h), + text16400white("Weight"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: weightController, + hintText: "70kg", + ), + sizedBoxHeight(20.h), + text16400white("Batting Average"), + sizedBoxHeight(16.h), + CustomTextFormField( + textEditingController: battingAvgController, + hintText: "372", + ), + sizedBoxHeight(20.h), + sizedBoxHeight(60.h), + CommonBtn( + text: "Save", + onTap: () { + saveEditProfileInd(); + }, + ), + sizedBoxHeight(60.h), + ], + ) + ]))) + ]); + } + return Container(); + })); + } +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/ProfileTab.dart b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/ProfileTab.dart new file mode 100644 index 0000000..f313a88 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/View/ProfileTab.dart @@ -0,0 +1,1395 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_reaction_button/flutter_reaction_button.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:regroup/Common/CommonBottomNavigationBar.dart'; +import 'package:regroup/Common/CommonGlassmorphism.dart'; +import 'package:regroup/Common/CommonWidget.dart'; +import 'package:regroup/Common/controller/MainScreen.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/ViewModel/EditProfileApi.dart'; +import 'package:regroup/Utils/Common/blureffect.dart'; +import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/resources/routes/route_name.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class ProfileTab extends StatefulWidget { + const ProfileTab({super.key}); + + @override + State createState() => _ProfileTabState(); +} + +class _ProfileTabState extends State { + List cardtile = [ + { + "imagePath": "assets/images/png/Rectangle 29ss.png", + "title": "Cardio crusaders circle" + }, + { + "imagePath": "assets/images/png/Rectangle 31ee.png", + "title": "Strength squad syndicate" + }, + { + "imagePath": "assets/images/png/Rectangle 30aa.png", + "title": "Flexibility faction force" + }, + { + "imagePath": "assets/images/png/Rectangle 29ss.png", + "title": "Cardio crusaders circle" + }, + ]; + + List certificationData = [ + { + "imagePath": "assets/images/png/image 17.png", + "title": "Professional sports management", + "subtitle": "Athlete 365 ", + "date": "Issued Feb 2024" + }, + { + "imagePath": "assets/images/png/image 18.png", + "title": "Professional sports management", + "subtitle": "Athlete 365 ", + "date": "Issued Feb 2024" + }, + { + "imagePath": "assets/images/png/image 19.png", + "title": "Professional sports management", + "subtitle": "Athlete 365 ", + "date": "Issued Feb 2024" + }, + ]; + + List timeline = [ + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Cardio crusaders circle" + }, + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Cardio crusaders circle" + }, + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Cardio crusaders circle" + }, + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Cardio crusaders circle" + }, + ]; + + bool isOnce = true; + late Future individualfuture; + late Future businessfuture; + + String? accountTypeValue; + String? accounTypeLogin; + + String? interestText; + @override + void initState() { + // TODO: implement initState + setValues(); + + individualfuture = EditProfileApi() + .getEditProfileIndividual() + .then((value) => {setValues()}); + + businessfuture = EditProfileApi() + .getEditProfileBusiness() + .then((value) => {setValues2()}); + super.initState(); + } + + setValues() async { + if (isOnce) { + SharedPreferences prefs = await SharedPreferences.getInstance(); + accountTypeValue = prefs.getString('accountTypeValue'); + accounTypeLogin = prefs.getString('accountTypefromLogin'); + + if (getEditProfileIndi != null && + getEditProfileIndi!.data != null && + getEditProfileIndi!.data!.interest != null) { + // Join all interest names with a comma separator + interestText = + getEditProfileIndi!.data!.interest!.map((e) => e.name).join(', '); + } + isOnce = false; + setState(() {}); + } + } + + setValues2() async { + if (isOnce) { + SharedPreferences prefs = await SharedPreferences.getInstance(); + accountTypeValue = prefs.getString('accountTypeValue'); + accounTypeLogin = prefs.getString('accountTypefromLogin'); + // foodItemDropdownController.selectedFooddynamic.clear(); + // foodItemDropdownController.foodItemQControllerList.clear(); + // foodItemDropdownController.OtherFoodIngredientList.clear(); + // foodItemDropdownController.TotalFoodIngredientList.clear(); + + // mealController.text = getMealObj!.data!.mealType!; + + // for (var i = 0; i < getEditProfileIndi.data.; i++) { + // foodController.text += '${getMealObj!.data!.foodRecords![i].name!}, '; + // foodItemDropdownController.selectedFooddynamic + // .add(getMealObj!.data!.foodRecords![i].name!); + // foodItemDropdownController.foodItemQControllerList + // .add(getMealObj!.data!.foodRecords![i].quantity!); + // } + + isOnce = false; + setState(() {}); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + // key: _scaffoldKey1, + backgroundColor: Color(0xFF222935), + extendBody: true, + // accountTypeValue == '1' || + body: accounTypeLogin == '1' || accountTypeValue == '1' + ? FutureBuilder( + future: individualfuture, + builder: (ctx, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center( + child: CircularProgressIndicator( + color: Colors.blue, + ), + ); + } + + if (snapshot.hasError) { + return Center( + child: Text( + '${snapshot.error} occurred', + style: TextStyle(fontSize: 18.spMin), + ), + ); + } + + if (snapshot.connectionState == ConnectionState.done && + snapshot.hasData) { + print("Data fetched-->"); + return Stack(clipBehavior: Clip.none, children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/images/png/Ellipse 1496.png"), + fit: BoxFit.fill)), + ), + SafeArea( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Stack( + children: [ + Container( + height: 484.h, + width: double.infinity, + child: Image.asset( + "assets/images/png/profileimg.png", + fit: BoxFit.cover, + ), + ), + Positioned.fill( + child: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color.fromRGBO(34, 41, 53, 0.1), + Color.fromRGBO(34, 41, 53, 0.79), + ], + stops: [ + 0.5788, + 0.8, + ], + ), + ), + ), + ), + Positioned( + bottom: 0, + right: 0, + left: 0, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Column( + children: [ + text20700white(getEditProfileIndi! + .data!.fullName ?? + "Edward Hackett"), + sizedBoxHeight(5.h), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + text18w400white( + '@${getEditProfileIndi!.data!.userName}' ?? + "@edward_01"), + sizedBoxWidth(5.w), + Icon( + Icons.circle, + size: 5.sp, + color: Colors.white, + ), + sizedBoxWidth(5.w), + text18w400white("2,124 days") + ], + ), + sizedBoxHeight(15.h), + GestureDetector( + onTap: () { + Get.toNamed( + RouteName.mynetwork); + }, + child: Container( + height: 34.h, + width: 152.w, + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular( + 41.r), + border: Border.all( + color: + Color(0xFFD90B2E), + width: 0.84)), + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/png/Vector2a.png', + height: 17.h, + width: 17.w, + ), + sizedBoxWidth(8.w), + text16400white("My network") + ], + ), + ), + ), + sizedBoxHeight(20.h), + ], + ), + ], + ), + ), + ), + ], + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + sizedBoxHeight(30.h), + text18w700white("About"), + sizedBoxHeight(10.h), + text14400white( + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s."), + sizedBoxHeight(25.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Group 58645.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur( + "Elm street london, United Kingdom"), + ], + ), + sizedBoxHeight(20.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Vector (4).png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur(interestText ?? ''), + // interestText + // text14400whiteblur(getEditProfileIndi! + // .data!.interest! + // .join(', ')), + // text14400whiteblur( + // "Rowing, Football, Swimming"), + ], + ), + sizedBoxHeight(30.h), + ], + ), + ), + sizedBoxHeight(20.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + text18w700white("Timeline"), + Spacer(), + InkWell( + onTap: () { + Get.toNamed(RouteName.addtimeline); + }, + child: Image.asset( + "assets/images/png/iconamoon_edit-thin.png", + height: 20.h, + width: 20.w, + ), + ) + ], + ), + sizedBoxHeight(20.h), + SizedBox( + height: 300.h, + child: ListView.builder( + shrinkWrap: true, + itemCount: timeline.length, + itemBuilder: (context, index) { + return commonTimelineCard( + imagePath: timeline[index] + ["imagePath"], + title: timeline[index] + ["title"]); + }, + )), + ]), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + sizedBoxHeight(30.h), + Row( + children: [ + text16w700white( + "Certifications/Qualifications"), + Spacer(), + InkWell( + onTap: () { + Get.toNamed(RouteName.certificate); + }, + child: text12400white("View more")), + ], + ), + sizedBoxHeight(20.h), + SizedBox( + height: 85.h, + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: certificationData.length, + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.only(right: 20.w), + child: certificationCardTile( + imagePath: + certificationData[index] + ["imagePath"], + title: certificationData[index] + ["title"], + subtitle: certificationData[index] + ["subtitle"], + date: certificationData[index] + ["date"]), + ); + }, + ), + ), + sizedBoxHeight(30.h), + text18w400white("Subgroups"), + sizedBoxHeight(20.h), + ], + ), + ), + SizedBox( + height: 190.h, + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + padding: EdgeInsets.only(left: 16.w), + itemCount: cardtile.length, + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.only(right: 20.w), + child: profilecardtile( + imagePath: cardtile[index]["imagePath"], + title: cardtile[index]["title"]), + ); + }, + ), + ), + sizedBoxHeight(30.h), + Padding( + padding: EdgeInsets.only(left: 16.w), + child: text18w700white("Activity"), + ), + normalcardtile( + profileImg: 'assets/images/png/Ellipse 48.png', + title: 'Jocelyn Dokidis', + mainImg: 'assets/images/png/Rectangle 46.png', + containerTitle: [ + 'Race', + 'Swimming', + 'Events', + 'Marathon', + 'Events' + ]), + sizedBoxHeight(120.h), + ], + ), + ), + ), + Positioned.fill( + top: 40.h, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + children: [ + sizedBoxHeight(20.h), + Row( + children: [ + Spacer(), + InkWell( + onTap: () { + Get.toNamed(RouteName.settings); + }, + child: commonContainer( + width: 40.w, + height: 40.h, + borderwidth: 0.5, + boxShape: BoxShape.circle, + opacity1: 0.5, + opacity2: 0.6, + customWidget: Center( + child: Image.asset( + 'assets/images/png/setting2.png', + height: 20.h, + width: 20.w, + )), + ), + ), + ], + ), + ], + ), + ), + ), + ]); + } + return Container(); + }, + ) + : FutureBuilder( + future: businessfuture, + builder: (ctx, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center( + child: CircularProgressIndicator( + color: Colors.blue, + ), + ); + } + + if (snapshot.hasError) { + return Center( + child: Text( + '${snapshot.error} occurred', + style: TextStyle(fontSize: 18.spMin), + ), + ); + } + + if (snapshot.connectionState == ConnectionState.done && + snapshot.hasData) { + print("Data fetched-->"); + return Stack(clipBehavior: Clip.none, children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/images/png/Ellipse 1496.png"), + fit: BoxFit.fill)), + ), + SafeArea( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Stack( + children: [ + Container( + height: 484.h, + width: double.infinity, + child: Image.asset( + "assets/images/png/Rectangle 49 (1).png", + fit: BoxFit.cover, + ), + ), + Positioned.fill( + child: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color.fromRGBO(34, 41, 53, 0.1), + Color.fromRGBO(34, 41, 53, 0.79), + ], + stops: [ + 0.5788, + 0.8, + ], + ), + ), + ), + ), + Positioned( + bottom: 0, + right: 0, + left: 0, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Column( + children: [ + text20700white(getEditProfileBus! + .data!.businessOwnerName ?? + "Victory gear sports emporium"), + sizedBoxHeight(5.h), + text18w400white( + '@${getEditProfileBus!.data!.businessName}' ?? + "@Victorygames_10"), + sizedBoxHeight(15.h), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + GestureDetector( + onTap: () { + Get.toNamed( + RouteName.followers); + }, + child: Column( + children: [ + text16400white( + getEditProfileBus! + .data! + .follows! + .followers! + .toString() ?? + "254"), + sizedBoxHeight(6.h), + text12400whiteblur( + "Followers") + ], + ), + ), + sizedBoxWidth(20.w), + Container( + height: 58.h, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.white, + width: 1.0, + ), + boxShadow: [ + BoxShadow( + color: + Color(0x66000000), + offset: Offset(0, 4), + blurRadius: 4.0, + ), + ], + ), + ), + sizedBoxWidth(20.w), + GestureDetector( + onTap: () { + Get.toNamed( + RouteName.following); + }, + child: Column( + children: [ + text16400white( + getEditProfileBus! + .data! + .follows! + .following! + .toString()), + sizedBoxHeight(6.h), + text12400whiteblur( + "Following") + ], + ), + ), + ], + ), + sizedBoxHeight(20.h), + ], + ), + ], + ), + ), + ), + ], + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + sizedBoxHeight(30.h), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + GestureDetector( + onTap: () { + Get.toNamed(RouteName.buseditprofile); + }, + child: Container( + height: 40.h, + width: 170.w, + decoration: BoxDecoration( + color: Color(0xFFD90B2E), + borderRadius: + BorderRadius.circular(30.r), + ), + child: Center( + child: text16w400_FCFCFC( + "Edit profile")), + ), + ), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.shareProfile); + }, + child: commonGlassUI( + width: 170.w, + height: 40.h, + + opacity1: 0.05, + opacity2: 0.07, + borderRadius: + BorderRadius.circular(30.r), + mainOpacity: 1, + customWidget: Center( + child: text16w400_FCFCFC( + "Share profile"), + ), + // border: 1, + ), + ) + ], + ), + sizedBoxHeight(30.h), + text18w700white("About"), + sizedBoxHeight(10.h), + text14400white( + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s."), + sizedBoxHeight(25.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Frame 24.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur(getEditProfileBus! + .data!.businessOwnerName ?? + "James Bothman"), + ], + ), + sizedBoxHeight(20.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Vector2a.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur(getEditProfileBus! + .data!.websiteLink ?? + "www.exampledummywebsite.com"), + ], + ), + sizedBoxHeight(20.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Group 58645.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur(getEditProfileBus! + .data!.businessLocation ?? + "Elm street london, United Kingdom"), + ], + ), + sizedBoxHeight(20.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/calender.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + // text14400whiteblur(getEditProfileIndi! + // .data!.interest! + // .join(', ')), + text14400whiteblur("Founded at : 2010"), + ], + ), + sizedBoxHeight(30.h), + ], + ), + ), + sizedBoxHeight(30.h), + Padding( + padding: EdgeInsets.only(left: 16.w), + child: text18w700white("Posts"), + ), + normalcardtile( + profileImg: 'assets/images/png/Ellipse 48.png', + title: 'Jocelyn Dokidis', + mainImg: 'assets/images/png/Rectangle 46.png', + containerTitle: [ + 'Race', + 'Swimming', + 'Events', + 'Marathon', + 'Events' + ]), + sizedBoxHeight(120.h), + ], + ), + ), + ), + Positioned.fill( + top: 40.h, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + children: [ + sizedBoxHeight(20.h), + Row( + children: [ + Spacer(), + InkWell( + onTap: () { + Get.toNamed(RouteName.settings); + }, + child: commonContainer( + width: 40.w, + height: 40.h, + borderwidth: 0.5, + boxShape: BoxShape.circle, + opacity1: 0.5, + opacity2: 0.6, + customWidget: Center( + child: Image.asset( + 'assets/images/png/setting2.png', + height: 20.h, + width: 20.w, + )), + ), + ), + ], + ), + ], + ), + ), + ), + ]); + } + return Container(); + }, + ), + + bottomNavigationBar: bottomnavigationbar(mainController), + ); + } + + Widget certificationCardTile({ + required String imagePath, + required String title, + required String subtitle, + required String date, + }) { + return commonGlassUI( + width: 270.w, + height: 70.h, + borderRadius: BorderRadius.circular(10.r), + customWidget: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + height: 40.h, + width: 57.w, + child: Image.asset( + imagePath, + fit: BoxFit.cover, + ), + ), + sizedBoxWidth(10.w), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + text12400white(title), + sizedBoxHeight(5.h), + text9400white(subtitle), + sizedBoxHeight(5.h), + text9400white(date) + ], + ), + ), + ], + ), + ), + // border: 1 + ); + } + + Widget commonTimelineCard( + {required String imagePath, required String title}) { + return Row( + children: [ + Container( + width: 10, + height: 170.h, + child: Stack( + clipBehavior: Clip.none, + children: [ + Positioned( + top: 50.h, + child: Container( + height: 11.h, + width: 11.w, + decoration: BoxDecoration( + color: Colors.white, shape: BoxShape.circle)), + ), + Positioned( + right: 3.w, + child: Container( + width: 1.w, + height: 170.h, + decoration: BoxDecoration(color: Colors.white), + ), + ), + ], + ), + ), + sizedBoxWidth(20.w), + Expanded( + child: Column( + children: [ + commonGlassUI( + width: double.infinity, + height: 145.h, + borderRadius: BorderRadius.circular(10.r), + customWidget: Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + children: [ + CircleAvatar( + radius: 10.r, + backgroundImage: AssetImage(imagePath), + ), + sizedBoxWidth(8.w), + text14700white(title) + ], + ), + sizedBoxHeight(10.h), + text12700white("Team captain"), + sizedBoxHeight(8.h), + text12400white("April 2023 - May 2024"), + sizedBoxHeight(10.h), + text10400whiteblur( + "Lorem IpsumĀ is simply dummy text of the printing and typesetting industry.") + ], + ), + ), + // border: 1 + ), + ], + ), + ), + ], + ); + } + + Widget normalcardtile({ + required String profileImg, + required String title, + required String mainImg, + required List containerTitle, + }) { + var mainImage = 'assets/images/png/uiw_like-o.png'.obs; + void updateImage(String reaction) { + if (reaction == 'like') { + mainImage.value = 'assets/images/png/f7_hand-thumbsup.png'; + } else if (reaction == 'heart') { + mainImage.value = 'assets/images/png/heart 2.png'; + } else if (reaction == 'party') { + mainImage.value = 'assets/images/png/party-popper 2.png'; + } + } + + return Column( + children: [ + sizedBoxHeight(25.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CircleAvatar( + foregroundImage: AssetImage(profileImg), + radius: 25.r, + ), + sizedBoxWidth(12.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text16w400_FCFCFC(title), + sizedBoxHeight(5.h), + Row( + children: [ + Image.asset( + 'assets/images/png/community 1 (traced).png', + height: 14.w, + width: 14.w, + ), + sizedBoxWidth(7.w), + text12w400_FCFCFC('Active alliance network'), + sizedBoxWidth(7.w), + Icon( + Icons.circle, + color: Color(0xFFFCFCFC), + size: 4.sp, + ), + sizedBoxWidth(6.w), + text12w400_FCFCFC('1 Hour ago'), + ], + ) + ], + ), + Spacer(), + PopupMenuButton( + surfaceTintColor: Color(0xFF222935), + constraints: BoxConstraints.tightFor(width: 176.w), + offset: Offset(0, 50), + color: Color(0xFF222935), + tooltip: "", + itemBuilder: (BuildContext context) => [ + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Report Post', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/Vector (5).png", + height: 15.h, + width: 15.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Share post', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/share.png", + height: 20.h, + width: 20.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Pin', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/f7_pin-fill (2).png", + height: 25.h, + width: 25.w, + ) + ], + ), + ), + ), + ], + child: Image.asset( + 'assets/images/png/Group 1000004071.png', + width: 16.w, + height: 18.h, + ), + ), + sizedBoxWidth(5.w) + ], + ), + ), + sizedBoxHeight(20.h), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.postdetailsScreen); + }, + child: Container( + height: 163.h, + width: double.infinity, + child: Image.asset( + mainImg, + fit: BoxFit.cover, + ), + )), + sizedBoxHeight(20.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column(children: [ + SizedBox( + height: 30.h, + child: ListView.builder( + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemCount: containerTitle.length, + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.only(right: 12.w), + child: GestureDetector( + onTap: () { + // Get.toNamed(RouteName.cyclescreen); + }, + child: containertile(text: containerTitle[index])), + ); + }, + ), + ), + sizedBoxHeight(20.h), + text16w400_FCFCFC( + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s . . ."), + Row(children: [ + stackReaction(number: '20', containerImages: [ + 'assets/images/png/f7_hand-thumbsup.png', + 'assets/images/png/heart 2.png', + 'assets/images/png/party-popper 2.png' + ]), + Spacer(), + commonContainer( + width: 30.w, + height: 30.h, + opacity1: 0.2, + opacity2: 0.2, + borderwidth: 0.43, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + 'assets/images/png/Frame 1000004088.png', + height: 13.h, + width: 13.w, + ), + ), + ), + sizedBoxWidth(12.w), + text14w400_FCFCFC('20'), + sizedBoxWidth(20.w), + commonContainer( + width: 30.w, + height: 30.h, + opacity1: 0.2, + opacity2: 0.2, + borderwidth: 0.43, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + 'assets/images/png/Vector (1).png', + height: 12.h, + width: 12.w, + ), + ), + ), + sizedBoxWidth(12.w), + text14w400_FCFCFC('10'), + ]), + sizedBoxHeight(30.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Obx(() { + return ReactionButton( + onReactionChanged: (reaction) { + updateImage(reaction?.value ?? 'like'); + debugPrint('Selected value: ${reaction?.value}'); + }, + reactions: ?>[ + Reaction( + value: 'like', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + icon: _buildReactionsIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + ), + Reaction( + value: 'heart', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/heart 2.png'), + icon: _buildReactionsIcon( + 'assets/images/png/heart 2.png'), + ), + Reaction( + value: 'party', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/party-popper 2.png'), + icon: _buildReactionsIcon( + 'assets/images/png/party-popper 2.png'), + ), + ], + selectedReaction: Reaction( + value: 'like', + icon: _buildReactionsIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + ), + boxColor: Colors.white, + boxElevation: 9, + boxRadius: 30, + itemsSpacing: 8, + itemScale: 0.4, + itemSize: Size(45, 45), + boxPadding: EdgeInsets.all(8), + boxAnimationDuration: Duration(milliseconds: 200), + itemAnimationDuration: Duration(milliseconds: 500), + hoverDuration: Duration(milliseconds: 700), + // toggle: false, + + child: _buildReactionsIcon(mainImage.value), + ); + }) + ], + ), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.postdetailsScreen); + }, + child: Column( + children: [ + Image.asset( + 'assets/images/png/Frame 1000004088.png', + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Comment') + ], + ), + ), + Column( + children: [ + Image.asset( + 'assets/images/png/Frame 1000004089.png', + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Save') + ], + ) + ], + ) + ]), + ), + ], + ); + } + + Widget _buildReactionsPreviewIcon(String assetPath) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset( + assetPath, + height: 40.h, + width: 40.w, + ), + ); + } + + Widget _buildReactionsIcon(String assetPath) { + return Column( + children: [ + Image.asset( + assetPath, + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Like') + ], + ); + } + + Widget containertile({required String text}) { + return commonContainer( + width: 100.w, + height: 30.h, + borderRadius: BorderRadius.circular(30.r), + borderColor: Color(0xFFD90B2E), + borderwidth: 0.9, + customWidget: Padding( + padding: EdgeInsets.symmetric(horizontal: 10.w), + child: Center(child: text14w400_FCFCFC(text)), + )); + } + + Widget profilecardtile({required String imagePath, required String title}) { + return Column( + children: [ + Container( + height: 109.h, + width: 100.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.r), + ), + child: Image.asset(imagePath), + ), + sizedBoxHeight(10.h), + SizedBox(width: 100.w, child: text12w700_FCFCFC(title)), + ], + ); + } +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/ViewModel/EditProfileApi.dart b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/ViewModel/EditProfileApi.dart new file mode 100644 index 0000000..f31a781 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/EditProfile/ViewModel/EditProfileApi.dart @@ -0,0 +1,83 @@ +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/Feed%20Module/Main_Screens/ProfileTab/EditProfile/Model/GetEditProfileBus.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/Model/GetEditProfileIndi.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +GetEditProfileIndi? getEditProfileIndi; +GetEditProfileBus? getEditProfileBus; + +class EditProfileApi { + EditProfileApi(); + + Future> postEditProfileIndividual(var data) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + final response = + await NetworkApiServices().postApi(data, ApiUrls.posteditprofile); + + if (response.status == ResponseStatus.SUCCESS) { + if (response.data['status'] == 'success') { + } else { + return ResponseData( + response.data['message'], ResponseStatus.FAILED); + } + } + return response; + } + + Future> getEditProfileIndividual() async { + final response = await NetworkApiServices().getApi( + ApiUrls.geteditprofile, + ); + getEditProfileIndi = GetEditProfileIndi.fromJson(response.data); + if (response.status == ResponseStatus.SUCCESS) { + if (response.data["status"] == "success") { + print("Success---->"); + return ResponseData( + response.data['message'], ResponseStatus.SUCCESS, + data: response.data); + } else { + return ResponseData( + response.data['message'], ResponseStatus.FAILED); + } + } + + return response; + } + + Future> postEditProfileBusiness(var data) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + final response = await NetworkApiServices() + .postApi(data, ApiUrls.posteditprofilebusiness); + + if (response.status == ResponseStatus.SUCCESS) { + if (response.data['status'] == 'success') { + } else { + return ResponseData( + response.data['message'], ResponseStatus.FAILED); + } + } + return response; + } + + Future> getEditProfileBusiness() async { + final response = await NetworkApiServices().getApi( + ApiUrls.geteditprofilebusiness, + ); + getEditProfileBus = GetEditProfileBus.fromJson(response.data); + if (response.status == ResponseStatus.SUCCESS) { + if (response.data["status"] == "success") { + print("Success---->"); + return ResponseData( + response.data['message'], ResponseStatus.SUCCESS, + data: response.data); + } else { + return ResponseData( + response.data['message'], ResponseStatus.FAILED); + } + } + + return response; + } +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/Guest User/Business/ProfileTabBusGuest.dart b/lib/Feed Module/Main_Screens/ProfileTab/Guest User/Business/ProfileTabBusGuest.dart new file mode 100644 index 0000000..efda704 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/Guest User/Business/ProfileTabBusGuest.dart @@ -0,0 +1,813 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_reaction_button/flutter_reaction_button.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:regroup/Common/CommonGlassmorphism.dart'; +import 'package:regroup/Common/CommonWidget.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/ViewModel/EditProfileApi.dart'; +import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/resources/routes/route_name.dart'; + +class profiletabBusGest extends StatefulWidget { + const profiletabBusGest({super.key}); + + @override + State createState() => _profiletabBusGestState(); +} + +class _profiletabBusGestState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + // key: _scaffoldKey1, + backgroundColor: Color(0xFF222935), + extendBody: true, + // accountTypeValue == '1' || + body: + // FutureBuilder( + // future: businessfuture, + // builder: (ctx, snapshot) { + // if (snapshot.connectionState == ConnectionState.waiting) { + // return Center( + // child: CircularProgressIndicator( + // color: Colors.blue, + // ), + // ); + // } + + // if (snapshot.hasError) { + // return Center( + // child: Text( + // '${snapshot.error} occurred', + // style: TextStyle(fontSize: 18.spMin), + // ), + // ); + // } + + // if (snapshot.connectionState == ConnectionState.done && + // snapshot.hasData) { + // print("Data fetched-->"); + // return + + Stack(clipBehavior: Clip.none, children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/png/Ellipse 1496.png"), + fit: BoxFit.fill)), + ), + SafeArea( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Stack( + children: [ + Container( + height: 484.h, + width: double.infinity, + child: Image.asset( + "assets/images/png/Rectangle 49 (1).png", + fit: BoxFit.cover, + ), + ), + Positioned.fill( + child: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color.fromRGBO(34, 41, 53, 0.1), + Color.fromRGBO(34, 41, 53, 0.79), + ], + stops: [ + 0.5788, + 0.8, + ], + ), + ), + ), + ), + Positioned( + bottom: 0, + right: 0, + left: 0, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Column( + children: [ + text20700white( + "Victory gear sports emporium"), + sizedBoxHeight(5.h), + text18w400white("@Victorygames_10"), + sizedBoxHeight(15.h), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GestureDetector( + onTap: () { + Get.toNamed(RouteName.followers); + }, + child: Column( + children: [ + text16400white("254"), + sizedBoxHeight(6.h), + text12400whiteblur("Followers") + ], + ), + ), + sizedBoxWidth(20.w), + Container( + height: 58.h, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.white, + width: 1.0, + ), + boxShadow: [ + BoxShadow( + color: Color(0x66000000), + offset: Offset(0, 4), + blurRadius: 4.0, + ), + ], + ), + ), + sizedBoxWidth(20.w), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.following); + }, + child: Column( + children: [ + text16400white("344"), + sizedBoxHeight(6.h), + text12400whiteblur("Following") + ], + ), + ), + ], + ), + sizedBoxHeight(20.h), + ], + ), + ], + ), + ), + ), + ], + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + sizedBoxHeight(30.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + GestureDetector( + onTap: () { + Get.toNamed(RouteName.buseditprofile); + }, + child: Container( + height: 40.h, + width: 170.w, + decoration: BoxDecoration( + color: Color(0xFFD90B2E), + borderRadius: BorderRadius.circular(30.r), + ), + child: + Center(child: text16w400_FCFCFC("Follow")), + ), + ), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.shareProfile); + }, + child: commonGlassUI( + width: 170.w, + height: 40.h, + + opacity1: 0.05, + opacity2: 0.07, + borderRadius: BorderRadius.circular(30.r), + mainOpacity: 1, + customWidget: Center( + child: text16w400_FCFCFC("Message"), + ), + // border: 1, + ), + ) + ], + ), + sizedBoxHeight(30.h), + text18w700white("About"), + sizedBoxHeight(10.h), + text14400white( + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s."), + sizedBoxHeight(25.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Frame 24.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur("James Bothman"), + ], + ), + sizedBoxHeight(20.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Vector2a.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur("www.exampledummywebsite.com"), + ], + ), + sizedBoxHeight(20.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Group 58645.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur( + "Elm street london, United Kingdom"), + ], + ), + sizedBoxHeight(20.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/calender.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + // text14400whiteblur(getEditProfileIndi! + // .data!.interest! + // .join(', ')), + text14400whiteblur("Founded at : 2010"), + ], + ), + sizedBoxHeight(30.h), + ], + ), + ), + sizedBoxHeight(30.h), + Padding( + padding: EdgeInsets.only(left: 16.w), + child: text18w700white("Posts"), + ), + normalcardtile( + profileImg: 'assets/images/png/Ellipse 48.png', + title: 'Jocelyn Dokidis', + mainImg: 'assets/images/png/Rectangle 46.png', + containerTitle: [ + 'Race', + 'Swimming', + 'Events', + 'Marathon', + 'Events' + ]), + sizedBoxHeight(120.h), + ], + ), + ), + ), + Positioned.fill( + top: 40.h, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + children: [ + sizedBoxHeight(20.h), + Row( + children: [ + Spacer(), + commonContainer( + width: 40.w, + height: 40.h, + borderwidth: 0.5, + boxShape: BoxShape.circle, + opacity1: 0.5, + opacity2: 0.6, + customWidget: PopupMenuButton( + surfaceTintColor: const Color(0xFF222935), + constraints: BoxConstraints.tightFor(width: 200.w), + offset: const Offset(0, 50), + color: const Color(0xFF222935), + tooltip: "", + itemBuilder: (BuildContext context) => + [ + PopupMenuItem( + onTap: () { + Get.toNamed(RouteName.shareProfile); + }, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Share profile', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + const Spacer(), + Image.asset( + "assets/images/png/share.png", + height: 17.h, + width: 17.w, + ) + ], + ), + ), + ), + const PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Report user', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + const Spacer(), + Image.asset( + "assets/images/png/Vector (5).png", + height: 20.h, + width: 20.w, + ) + ], + ), + ), + ), + const PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Block user', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + const Spacer(), + Image.asset( + "assets/images/png/blocked.png", + height: 18.h, + width: 18.w, + ) + ], + ), + ), + ), + ], + child: Center( + child: Image.asset( + 'assets/images/png/Group 1000004071.png', + height: 20.h, + width: 20.w, + )), + ), + ), + ], + ), + ], + ), + ), + ), + ])); + } +} + +Widget normalcardtile({ + required String profileImg, + required String title, + required String mainImg, + required List containerTitle, +}) { + var mainImage = 'assets/images/png/uiw_like-o.png'.obs; + void updateImage(String reaction) { + if (reaction == 'like') { + mainImage.value = 'assets/images/png/f7_hand-thumbsup.png'; + } else if (reaction == 'heart') { + mainImage.value = 'assets/images/png/heart 2.png'; + } else if (reaction == 'party') { + mainImage.value = 'assets/images/png/party-popper 2.png'; + } + } + + return Column( + children: [ + sizedBoxHeight(25.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CircleAvatar( + foregroundImage: AssetImage(profileImg), + radius: 25.r, + ), + sizedBoxWidth(12.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text16w400_FCFCFC(title), + sizedBoxHeight(5.h), + Row( + children: [ + Image.asset( + 'assets/images/png/community 1 (traced).png', + height: 14.w, + width: 14.w, + ), + sizedBoxWidth(7.w), + text12w400_FCFCFC('Active alliance network'), + sizedBoxWidth(7.w), + Icon( + Icons.circle, + color: Color(0xFFFCFCFC), + size: 4.sp, + ), + sizedBoxWidth(6.w), + text12w400_FCFCFC('1 Hour ago'), + ], + ) + ], + ), + Spacer(), + PopupMenuButton( + surfaceTintColor: Color(0xFF222935), + constraints: BoxConstraints.tightFor(width: 176.w), + offset: Offset(0, 50), + color: Color(0xFF222935), + tooltip: "", + itemBuilder: (BuildContext context) => [ + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Report Post', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/Vector (5).png", + height: 15.h, + width: 15.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Share post', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/share.png", + height: 20.h, + width: 20.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Pin', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/f7_pin-fill (2).png", + height: 25.h, + width: 25.w, + ) + ], + ), + ), + ), + ], + child: Image.asset( + 'assets/images/png/Group 1000004071.png', + width: 16.w, + height: 18.h, + ), + ), + sizedBoxWidth(5.w) + ], + ), + ), + sizedBoxHeight(20.h), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.postdetailsScreen); + }, + child: Container( + height: 163.h, + width: double.infinity, + child: Image.asset( + mainImg, + fit: BoxFit.cover, + ), + )), + sizedBoxHeight(20.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column(children: [ + SizedBox( + height: 30.h, + child: ListView.builder( + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemCount: containerTitle.length, + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.only(right: 12.w), + child: GestureDetector( + onTap: () { + // Get.toNamed(RouteName.cyclescreen); + }, + child: containertile(text: containerTitle[index])), + ); + }, + ), + ), + sizedBoxHeight(20.h), + text16w400_FCFCFC( + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s . . ."), + Row(children: [ + stackReaction(number: '20', containerImages: [ + 'assets/images/png/f7_hand-thumbsup.png', + 'assets/images/png/heart 2.png', + 'assets/images/png/party-popper 2.png' + ]), + Spacer(), + commonContainer( + width: 30.w, + height: 30.h, + opacity1: 0.2, + opacity2: 0.2, + borderwidth: 0.43, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + 'assets/images/png/Frame 1000004088.png', + height: 13.h, + width: 13.w, + ), + ), + ), + sizedBoxWidth(12.w), + text14w400_FCFCFC('20'), + sizedBoxWidth(20.w), + commonContainer( + width: 30.w, + height: 30.h, + opacity1: 0.2, + opacity2: 0.2, + borderwidth: 0.43, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + 'assets/images/png/Vector (1).png', + height: 12.h, + width: 12.w, + ), + ), + ), + sizedBoxWidth(12.w), + text14w400_FCFCFC('10'), + ]), + sizedBoxHeight(30.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Obx(() { + return ReactionButton( + onReactionChanged: (reaction) { + updateImage(reaction?.value ?? 'like'); + debugPrint('Selected value: ${reaction?.value}'); + }, + reactions: ?>[ + Reaction( + value: 'like', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + icon: _buildReactionsIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + ), + Reaction( + value: 'heart', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/heart 2.png'), + icon: _buildReactionsIcon( + 'assets/images/png/heart 2.png'), + ), + Reaction( + value: 'party', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/party-popper 2.png'), + icon: _buildReactionsIcon( + 'assets/images/png/party-popper 2.png'), + ), + ], + selectedReaction: Reaction( + value: 'like', + icon: _buildReactionsIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + ), + boxColor: Colors.white, + boxElevation: 9, + boxRadius: 30, + itemsSpacing: 8, + itemScale: 0.4, + itemSize: Size(45, 45), + boxPadding: EdgeInsets.all(8), + boxAnimationDuration: Duration(milliseconds: 200), + itemAnimationDuration: Duration(milliseconds: 500), + hoverDuration: Duration(milliseconds: 700), + // toggle: false, + + child: _buildReactionsIcon(mainImage.value), + ); + }) + ], + ), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.postdetailsScreen); + }, + child: Column( + children: [ + Image.asset( + 'assets/images/png/Frame 1000004088.png', + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Comment') + ], + ), + ), + Column( + children: [ + Image.asset( + 'assets/images/png/Frame 1000004089.png', + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Save') + ], + ) + ], + ) + ]), + ), + ], + ); +} + +Widget _buildReactionsPreviewIcon(String assetPath) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset( + assetPath, + height: 40.h, + width: 40.w, + ), + ); +} + +Widget _buildReactionsIcon(String assetPath) { + return Column( + children: [ + Image.asset( + assetPath, + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Like') + ], + ); +} + +Widget containertile({required String text}) { + return commonContainer( + width: 100.w, + height: 30.h, + borderRadius: BorderRadius.circular(30.r), + borderColor: Color(0xFFD90B2E), + borderwidth: 0.9, + customWidget: Padding( + padding: EdgeInsets.symmetric(horizontal: 10.w), + child: Center(child: text14w400_FCFCFC(text)), + )); +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/Guest User/Individual/ProfileTabIndGuest.dart b/lib/Feed Module/Main_Screens/ProfileTab/Guest User/Individual/ProfileTabIndGuest.dart new file mode 100644 index 0000000..77a0c58 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/Guest User/Individual/ProfileTabIndGuest.dart @@ -0,0 +1,1138 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_reaction_button/flutter_reaction_button.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:regroup/Common/CommonGlassmorphism.dart'; +import 'package:regroup/Common/CommonWidget.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/ViewModel/EditProfileApi.dart'; +import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/texts.dart'; +import 'package:regroup/resources/routes/route_name.dart'; + +class ProfileTabIndGuest extends StatefulWidget { + const ProfileTabIndGuest({super.key}); + + @override + State createState() => _ProfileTabIndGuestState(); +} + +class _ProfileTabIndGuestState extends State { + List cardtile = [ + { + "imagePath": "assets/images/png/Rectangle 29ss.png", + "title": "Cardio crusaders circle" + }, + { + "imagePath": "assets/images/png/Rectangle 31ee.png", + "title": "Strength squad syndicate" + }, + { + "imagePath": "assets/images/png/Rectangle 30aa.png", + "title": "Flexibility faction force" + }, + { + "imagePath": "assets/images/png/Rectangle 29ss.png", + "title": "Cardio crusaders circle" + }, + ]; + + List timeline = [ + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Cardio crusaders circle" + }, + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Cardio crusaders circle" + }, + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Cardio crusaders circle" + }, + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Cardio crusaders circle" + }, + ]; + + List certificationData = [ + { + "imagePath": "assets/images/png/image 17.png", + "title": "Professional sports management", + "subtitle": "Athlete 365 ", + "date": "Issued Feb 2024" + }, + { + "imagePath": "assets/images/png/image 18.png", + "title": "Professional sports management", + "subtitle": "Athlete 365 ", + "date": "Issued Feb 2024" + }, + { + "imagePath": "assets/images/png/image 19.png", + "title": "Professional sports management", + "subtitle": "Athlete 365 ", + "date": "Issued Feb 2024" + }, + ]; + @override + Widget build(BuildContext context) { + return Scaffold( + // key: _scaffoldKey1, + backgroundColor: Color(0xFF222935), + extendBody: true, + // accountTypeValue == '1' || + body: + // accounTypeLogin == '1' || accountTypeValue == '1' + // ? FutureBuilder( + // future: individualfuture, + // builder: (ctx, snapshot) { + // if (snapshot.connectionState == ConnectionState.waiting) { + // return Center( + // child: CircularProgressIndicator( + // color: Colors.blue, + // ), + // ); + // } + + // if (snapshot.hasError) { + // return Center( + // child: Text( + // '${snapshot.error} occurred', + // style: TextStyle(fontSize: 18.spMin), + // ), + // ); + // } + + // if (snapshot.connectionState == ConnectionState.done && + // snapshot.hasData) { + // print("Data fetched-->"); + // return + Stack(clipBehavior: Clip.none, children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/png/Ellipse 1496.png"), + fit: BoxFit.fill)), + ), + SafeArea( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Stack( + children: [ + Container( + height: 484.h, + width: double.infinity, + child: Image.asset( + "assets/images/png/profileimg.png", + fit: BoxFit.cover, + ), + ), + Positioned.fill( + child: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color.fromRGBO(34, 41, 53, 0.1), + Color.fromRGBO(34, 41, 53, 0.79), + ], + stops: [ + 0.5788, + 0.8, + ], + ), + ), + ), + ), + Positioned( + bottom: 0, + right: 0, + left: 0, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Column( + children: [ + text20700white("Edward Hackett"), + sizedBoxHeight(5.h), + text18w400white("@edward_01"), + sizedBoxHeight(15.h), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GestureDetector( + onTap: () { + Get.toNamed(RouteName.followers); + }, + child: Column( + children: [ + text16400white("254"), + sizedBoxHeight(6.h), + text12400whiteblur("Followers") + ], + ), + ), + sizedBoxWidth(20.w), + Container( + height: 58.h, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.white, + width: 1.0, + ), + boxShadow: [ + BoxShadow( + color: Color(0x66000000), + offset: Offset(0, 4), + blurRadius: 4.0, + ), + ], + ), + ), + sizedBoxWidth(20.w), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.following); + }, + child: Column( + children: [ + text16400white("254"), + sizedBoxHeight(6.h), + text12400whiteblur("Following") + ], + ), + ), + sizedBoxWidth(20.w), + Container( + height: 58.h, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.white, + width: 1.0, + ), + boxShadow: [ + BoxShadow( + color: Color(0x66000000), + offset: Offset(0, 4), + blurRadius: 4.0, + ), + ], + ), + ), + sizedBoxWidth(20.w), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.clubs); + }, + child: Column( + children: [ + text16400white("10"), + sizedBoxHeight(6.h), + text12400whiteblur("Clubs") + ], + ), + ), + ], + ), + sizedBoxHeight(20.h), + ], + ), + ], + ), + ), + ), + ], + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + sizedBoxHeight(30.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + GestureDetector( + onTap: () { + Get.toNamed(RouteName.editProfile); + }, + child: Container( + height: 40.h, + width: 170.w, + decoration: BoxDecoration( + color: Color(0xFFD90B2E), + borderRadius: BorderRadius.circular(30.r), + ), + child: Center(child: text16w400_FCFCFC("Follow")), + ), + ), + GestureDetector( + onTap: () { + // Get.toNamed(RouteName.shareProfile); + }, + child: commonGlassUI( + width: 170.w, + height: 40.h, + + opacity1: 0.05, + opacity2: 0.07, + borderRadius: BorderRadius.circular(30.r), + mainOpacity: 1, + customWidget: Center( + child: text16w400_FCFCFC("Message"), + ), + // border: 1, + ), + ) + ], + ), + sizedBoxHeight(30.h), + text18w700white("About"), + sizedBoxHeight(10.h), + text14400white( + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s."), + sizedBoxHeight(25.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Group 58645.png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur( + "Elm street london, United Kingdom"), + ], + ), + sizedBoxHeight(20.h), + Row( + children: [ + commonContainer( + width: 25.w, + height: 25.h, + opacity1: 0.26, + opacity2: 0.26, + borderwidth: 0.5, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + "assets/images/png/Vector (4).png", + height: 12.h, + width: 12.w, + )), + ), + sizedBoxWidth(12.w), + text14400whiteblur('Rowing, Football, Swimming'), + // interestText + // text14400whiteblur(getEditProfileIndi! + // .data!.interest! + // .join(', ')), + // text14400whiteblur( + // "Rowing, Football, Swimming"), + ], + ), + sizedBoxHeight(25.h), + // commonGlassUI( + // width: double.infinity, + // height: 135.h, + // borderRadius: BorderRadius.circular(10), + // customWidget: Padding( + // padding: EdgeInsets.symmetric( + // vertical: 12.h, horizontal: 16.w), + // child: Column( + // children: [ + // Row( + // children: [ + // text16w700white("Badges"), + // Spacer(), + // GestureDetector( + // onTap: () { + // Get.toNamed(RouteName.badges); + // }, + // child: text12400white("View more")) + // ], + // ), + // sizedBoxHeight(8.h), + // Row( + // mainAxisAlignment: + // MainAxisAlignment.spaceBetween, + // children: [ + // Image.asset( + // "assets/images/png/Frame 1000004056.png", + // height: 70.h, + // width: 74.w, + // ), + // Image.asset( + // "assets/images/png/Frame 1000004056.png", + // height: 70.h, + // width: 74.w, + // ), + // Image.asset( + // "assets/images/png/Frame 1000004056.png", + // height: 70.h, + // width: 74.w, + // ), + // Image.asset( + // "assets/images/png/Frame 1000004056.png", + // height: 70.h, + // width: 74.w, + // ), + // ], + // ), + // ], + // ), + // ), + // // border: 1 + // ), + ], + ), + ), + sizedBoxHeight(20.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + text18w700white("Timeline"), + Spacer(), + InkWell( + onTap: () { + Get.toNamed(RouteName.addtimeline); + }, + child: Image.asset( + "assets/images/png/iconamoon_edit-thin.png", + height: 20.h, + width: 20.w, + ), + ) + ], + ), + sizedBoxHeight(20.h), + SizedBox( + height: 300.h, + child: ListView.builder( + shrinkWrap: true, + itemCount: timeline.length, + itemBuilder: (context, index) { + return commonTimelineCard( + imagePath: timeline[index]["imagePath"], + title: timeline[index]["title"]); + }, + )), + sizedBoxHeight(30.h), + Row( + children: [ + text16w700white("Certifications/Qualifications"), + Spacer(), + InkWell( + onTap: () { + Get.toNamed(RouteName.certificate); + }, + child: text12400white("View more")), + ], + ), + sizedBoxHeight(20.h), + SizedBox( + height: 85.h, + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: certificationData.length, + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.only(right: 20.w), + child: certificationCardTile( + imagePath: certificationData[index] + ["imagePath"], + title: certificationData[index]["title"], + subtitle: certificationData[index] + ["subtitle"], + date: certificationData[index]["date"]), + ); + }, + ), + ), + sizedBoxHeight(30.h), + text18w400white("Subgroups"), + ]), + ), + sizedBoxHeight(20.h), + SizedBox( + height: 190.h, + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + padding: EdgeInsets.only(left: 16.w), + itemCount: cardtile.length, + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.only(right: 20.w), + child: profilecardtile( + imagePath: cardtile[index]["imagePath"], + title: cardtile[index]["title"]), + ); + }, + ), + ), + sizedBoxHeight(20.h), + Padding( + padding: EdgeInsets.only(left: 16.w), + child: text18w700white("Activity"), + ), + normalcardtile( + profileImg: 'assets/images/png/Ellipse 48.png', + title: 'Jocelyn Dokidis', + mainImg: 'assets/images/png/Rectangle 46.png', + containerTitle: [ + 'Race', + 'Swimming', + 'Events', + 'Marathon', + 'Events' + ]), + sizedBoxHeight(120.h), + ], + ), + ), + ), + Positioned.fill( + top: 40.h, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + children: [ + sizedBoxHeight(20.h), + Row( + children: [ + Spacer(), + commonContainer( + width: 40.w, + height: 40.h, + borderwidth: 0.5, + boxShape: BoxShape.circle, + opacity1: 0.5, + opacity2: 0.6, + customWidget: + PopupMenuButton( + surfaceTintColor: const Color(0xFF222935), + constraints: BoxConstraints.tightFor(width: 200.w), + offset: const Offset(0, 50), + color: const Color(0xFF222935), + tooltip: "", + itemBuilder: (BuildContext context) => + [ + PopupMenuItem( + onTap: () { + Get.toNamed(RouteName.shareProfile); + }, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Share profile', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + const Spacer(), + Image.asset( + "assets/images/png/share.png", + height: 17.h, + width: 17.w, + ) + ], + ), + ), + ), + const PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Report user', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + const Spacer(), + Image.asset( + "assets/images/png/Vector (5).png", + height: 20.h, + width: 20.w, + ) + ], + ), + ), + ), + const PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Block user', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + const Spacer(), + Image.asset( + "assets/images/png/blocked.png", + height: 25.h, + width: 25.w, + ) + ], + ), + ), + ), + ], + child: Center( + child: Image.asset( + 'assets/images/png/Group 1000004071.png', + height: 20.h, + width: 20.w, + )), + ), + + ), + ], + ), + ], + ), + ), + ), + ]), + ); + } +} + +Widget commonTimelineCard({required String imagePath, required String title}) { + return Row( + children: [ + Container( + width: 10, + height: 170.h, + child: Stack( + clipBehavior: Clip.none, + children: [ + Positioned( + top: 50.h, + child: Container( + height: 11.h, + width: 11.w, + decoration: BoxDecoration( + color: Colors.white, shape: BoxShape.circle)), + ), + Positioned( + right: 3.w, + child: Container( + width: 1.w, + height: 170.h, + decoration: BoxDecoration(color: Colors.white), + ), + ), + ], + ), + ), + sizedBoxWidth(20.w), + Expanded( + child: Column( + children: [ + commonGlassUI( + width: double.infinity, + height: 145.h, + borderRadius: BorderRadius.circular(10.r), + customWidget: Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + children: [ + CircleAvatar( + radius: 10.r, + backgroundImage: AssetImage(imagePath), + ), + sizedBoxWidth(8.w), + text14700white(title) + ], + ), + sizedBoxHeight(10.h), + text12700white("Team captain"), + sizedBoxHeight(8.h), + text12400white("April 2023 - May 2024"), + sizedBoxHeight(10.h), + text10400whiteblur( + "Lorem IpsumĀ is simply dummy text of the printing and typesetting industry.") + ], + ), + ), + // border: 1 + ), + ], + ), + ), + ], + ); +} + +Widget normalcardtile({ + required String profileImg, + required String title, + required String mainImg, + required List containerTitle, +}) { + var mainImage = 'assets/images/png/uiw_like-o.png'.obs; + void updateImage(String reaction) { + if (reaction == 'like') { + mainImage.value = 'assets/images/png/f7_hand-thumbsup.png'; + } else if (reaction == 'heart') { + mainImage.value = 'assets/images/png/heart 2.png'; + } else if (reaction == 'party') { + mainImage.value = 'assets/images/png/party-popper 2.png'; + } + } + + return Column( + children: [ + sizedBoxHeight(25.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CircleAvatar( + foregroundImage: AssetImage(profileImg), + radius: 25.r, + ), + sizedBoxWidth(12.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text16w400_FCFCFC(title), + sizedBoxHeight(5.h), + Row( + children: [ + Image.asset( + 'assets/images/png/community 1 (traced).png', + height: 14.w, + width: 14.w, + ), + sizedBoxWidth(7.w), + text12w400_FCFCFC('Active alliance network'), + sizedBoxWidth(7.w), + Icon( + Icons.circle, + color: Color(0xFFFCFCFC), + size: 4.sp, + ), + sizedBoxWidth(6.w), + text12w400_FCFCFC('1 Hour ago'), + ], + ) + ], + ), + Spacer(), + PopupMenuButton( + surfaceTintColor: Color(0xFF222935), + constraints: BoxConstraints.tightFor(width: 176.w), + offset: Offset(0, 50), + color: Color(0xFF222935), + tooltip: "", + itemBuilder: (BuildContext context) => [ + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Report Post', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/Vector (5).png", + height: 15.h, + width: 15.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Share post', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/share.png", + height: 20.h, + width: 20.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + Text( + 'Pin', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w800, + fontFamily: "Nunito Sans", + ), + ), + Spacer(), + Image.asset( + "assets/images/png/f7_pin-fill (2).png", + height: 25.h, + width: 25.w, + ) + ], + ), + ), + ), + ], + child: Image.asset( + 'assets/images/png/Group 1000004071.png', + width: 16.w, + height: 18.h, + ), + ), + sizedBoxWidth(5.w) + ], + ), + ), + sizedBoxHeight(20.h), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.postdetailsScreen); + }, + child: Container( + height: 163.h, + width: double.infinity, + child: Image.asset( + mainImg, + fit: BoxFit.cover, + ), + )), + sizedBoxHeight(20.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Column(children: [ + SizedBox( + height: 30.h, + child: ListView.builder( + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemCount: containerTitle.length, + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.only(right: 12.w), + child: GestureDetector( + onTap: () { + // Get.toNamed(RouteName.cyclescreen); + }, + child: containertile(text: containerTitle[index])), + ); + }, + ), + ), + sizedBoxHeight(20.h), + text16w400_FCFCFC( + "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s . . ."), + Row(children: [ + stackReaction(number: '20', containerImages: [ + 'assets/images/png/f7_hand-thumbsup.png', + 'assets/images/png/heart 2.png', + 'assets/images/png/party-popper 2.png' + ]), + Spacer(), + commonContainer( + width: 30.w, + height: 30.h, + opacity1: 0.2, + opacity2: 0.2, + borderwidth: 0.43, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + 'assets/images/png/Frame 1000004088.png', + height: 13.h, + width: 13.w, + ), + ), + ), + sizedBoxWidth(12.w), + text14w400_FCFCFC('20'), + sizedBoxWidth(20.w), + commonContainer( + width: 30.w, + height: 30.h, + opacity1: 0.2, + opacity2: 0.2, + borderwidth: 0.43, + boxShape: BoxShape.circle, + customWidget: Center( + child: Image.asset( + 'assets/images/png/Vector (1).png', + height: 12.h, + width: 12.w, + ), + ), + ), + sizedBoxWidth(12.w), + text14w400_FCFCFC('10'), + ]), + sizedBoxHeight(30.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Obx(() { + return ReactionButton( + onReactionChanged: (reaction) { + updateImage(reaction?.value ?? 'like'); + debugPrint('Selected value: ${reaction?.value}'); + }, + reactions: ?>[ + Reaction( + value: 'like', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + icon: _buildReactionsIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + ), + Reaction( + value: 'heart', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/heart 2.png'), + icon: _buildReactionsIcon( + 'assets/images/png/heart 2.png'), + ), + Reaction( + value: 'party', + previewIcon: _buildReactionsPreviewIcon( + 'assets/images/png/party-popper 2.png'), + icon: _buildReactionsIcon( + 'assets/images/png/party-popper 2.png'), + ), + ], + selectedReaction: Reaction( + value: 'like', + icon: _buildReactionsIcon( + 'assets/images/png/f7_hand-thumbsup.png'), + ), + boxColor: Colors.white, + boxElevation: 9, + boxRadius: 30, + itemsSpacing: 8, + itemScale: 0.4, + itemSize: Size(45, 45), + boxPadding: EdgeInsets.all(8), + boxAnimationDuration: Duration(milliseconds: 200), + itemAnimationDuration: Duration(milliseconds: 500), + hoverDuration: Duration(milliseconds: 700), + // toggle: false, + + child: _buildReactionsIcon(mainImage.value), + ); + }) + ], + ), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.postdetailsScreen); + }, + child: Column( + children: [ + Image.asset( + 'assets/images/png/Frame 1000004088.png', + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Comment') + ], + ), + ), + Column( + children: [ + Image.asset( + 'assets/images/png/Frame 1000004089.png', + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Save') + ], + ) + ], + ) + ]), + ), + ], + ); +} + +Widget certificationCardTile({ + required String imagePath, + required String title, + required String subtitle, + required String date, +}) { + return commonGlassUI( + width: 270.w, + height: 70.h, + borderRadius: BorderRadius.circular(10.r), + customWidget: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + height: 40.h, + width: 57.w, + child: Image.asset( + imagePath, + fit: BoxFit.cover, + ), + ), + sizedBoxWidth(10.w), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + text12400white(title), + sizedBoxHeight(5.h), + text9400white(subtitle), + sizedBoxHeight(5.h), + text9400white(date) + ], + ), + ), + ], + ), + ), + // border: 1 + ); +} + +Widget _buildReactionsPreviewIcon(String assetPath) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset( + assetPath, + height: 40.h, + width: 40.w, + ), + ); +} + +Widget _buildReactionsIcon(String assetPath) { + return Column( + children: [ + Image.asset( + assetPath, + height: 19.h, + width: 19.w, + ), + sizedBoxHeight(8.h), + text11w400_FCFCFC('Like') + ], + ); +} + +Widget containertile({required String text}) { + return commonContainer( + width: 100.w, + height: 30.h, + borderRadius: BorderRadius.circular(30.r), + borderColor: Color(0xFFD90B2E), + borderwidth: 0.9, + customWidget: Padding( + padding: EdgeInsets.symmetric(horizontal: 10.w), + child: Center(child: text14w400_FCFCFC(text)), + )); +} + +Widget profilecardtile({required String imagePath, required String title}) { + return Column( + children: [ + Container( + height: 109.h, + width: 100.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.r), + ), + child: Image.asset(imagePath), + ), + sizedBoxHeight(10.h), + SizedBox(width: 100.w, child: text12w700_FCFCFC(title)), + ], + ); +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/My Network/MyNetwork.dart b/lib/Feed Module/Main_Screens/ProfileTab/My Network/MyNetwork.dart new file mode 100644 index 0000000..ecbf9f0 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/My Network/MyNetwork.dart @@ -0,0 +1,410 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:regroup/Common/CommonTabBar.dart'; +import 'package:regroup/Common/CommonWidget.dart'; +import 'package:regroup/Utils/Common/CommonAppbar.dart'; +import 'package:regroup/Utils/Common/CustomTextformfield.dart'; +import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/texts.dart'; + +class MyNetwork extends StatefulWidget { + const MyNetwork({super.key}); + + @override + State createState() => _MyNetworkState(); +} + +class _MyNetworkState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + // key: _scaffoldKey1, + resizeToAvoidBottomInset: false, + backgroundColor: Color(0xFF222935), + extendBody: true, + appBar: CommonAppbar( + titleTxt: "My networks", + ), + body: Stack(children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/png/Ellipse 1496.png"), + fit: BoxFit.fill)), + ), + Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + sizedBoxHeight(16.h), + Expanded( + child: DefaultTabController( + length: 2, + // initialIndex: selectedIndex.value, + child: Column(children: [ + CommonTabBar(tabs: const [ + Tab( + text: 'Followers', + ), + Tab( + text: 'Following', + ), + ]), + Expanded( + child: TabBarView( + children: [ + followersTab(), + followingTab(), + ], + ), + ), + ])), + ) + ]) + ])); + } + + Widget followersTab() { + List followersData = [ + { + "imagePath": "assets/images/png/Ellipse 52.png", + "title": "Iron titans fitness crew", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 48.png", + "title": "Body blitz brigade", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 43.png", + "title": "Fit fusion squad", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 37.png", + "title": "Power pulse posse", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 52.png", + "title": "Iron titans fitness crew", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 48.png", + "title": "Body blitz brigade", + "subtitle": "Lorem ipsum dummy text", + }, + ]; + + return Column( + children: [ + sizedBoxHeight(25.h), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: CustomTextFormField( + leadingIcon: SizedBox( + height: 23, + width: 23, + child: Center( + child: Image.asset( + "assets/images/png/ion_search-outline.png", + height: 23, + width: 23, + ), + ), + ), + hintText: "Search people", + ), + ), + ListView.separated( + physics: ScrollPhysics(), + shrinkWrap: true, + itemCount: followersData.length, + separatorBuilder: (BuildContext context, int index) { + return commonDivider(); + }, + itemBuilder: (context, index) { + return Column( + children: [ + Padding( + padding: + EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), + child: Row( + children: [ + CircleAvatar( + backgroundImage: + AssetImage(followersData[index]["imagePath"]), + radius: 25.r, + ), + sizedBoxWidth(10.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text16w400_FCFCFC(followersData[index]["title"]), + sizedBoxHeight(4.h), + text12w400_FCFCFC_blur( + followersData[index]["subtitle"]) + ], + ), + Spacer(), + PopupMenuButton( + surfaceTintColor: Color(0xFF222935), + constraints: BoxConstraints.tightFor(width: 176.w), + offset: Offset(0, 20), + color: Color(0xFF222935), + tooltip: "", + itemBuilder: (BuildContext context) => + [ + PopupMenuItem( + // onTap: () {}, + onTap: () async {}, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + text14400white("Remove user"), + Spacer(), + Image.asset( + "assets/images/png/fluent_delete-28-regular.png", + height: 15.h, + width: 15.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + text14400white("Message user"), + Spacer(), + Image.asset( + "assets/images/png/fluent_chat-20-regular.png", + height: 20.h, + width: 20.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () async {}, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + text14400white("Block user"), + Spacer(), + Image.asset( + "assets/images/png/blockchat.png", + height: 25.h, + width: 25.w, + ) + ], + ), + ), + ), + ], + child: Container( + height: 20, + width: 20, + child: Center( + child: Image.asset( + "assets/images/png/Group 1000004071.png", + height: 22.h, + width: 4.w, + ), + ), + )), + ], + ), + ) + ], + ); + }, + ), + ], + ); + } + + Widget followingTab() { + List followingData = [ + { + "imagePath": "assets/images/png/Ellipse 52.png", + "title": "Iron titans fitness crew", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 48.png", + "title": "Body blitz brigade", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 43.png", + "title": "Fit fusion squad", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 37.png", + "title": "Power pulse posse", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 52.png", + "title": "Iron titans fitness crew", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 48.png", + "title": "Body blitz brigade", + "subtitle": "Lorem ipsum dummy text", + }, + ]; + + return Column( + children: [ + sizedBoxHeight(25.h), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: CustomTextFormField( + leadingIcon: SizedBox( + height: 23, + width: 23, + child: Center( + child: Image.asset( + "assets/images/png/ion_search-outline.png", + height: 23, + width: 23, + ), + ), + ), + hintText: "Search people", + ), + ), + ListView.separated( + physics: ScrollPhysics(), + shrinkWrap: true, + itemCount: followingData.length, + separatorBuilder: (BuildContext context, int index) { + return commonDivider(); + }, + itemBuilder: (context, index) { + return Column( + children: [ + Padding( + padding: + EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), + child: Row( + children: [ + CircleAvatar( + backgroundImage: + AssetImage(followingData[index]["imagePath"]), + radius: 25.r, + ), + sizedBoxWidth(10.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text16w400_FCFCFC(followingData[index]["title"]), + sizedBoxHeight(4.h), + text12w400_FCFCFC_blur( + followingData[index]["subtitle"]) + ], + ), + Spacer(), + PopupMenuButton( + surfaceTintColor: Color(0xFF222935), + constraints: BoxConstraints.tightFor(width: 176.w), + offset: Offset(0, 20), + color: Color(0xFF222935), + tooltip: "", + itemBuilder: (BuildContext context) => + [ + PopupMenuItem( + // onTap: () {}, + onTap: () async {}, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + text14400white("Remove user"), + Spacer(), + Image.asset( + "assets/images/png/fluent_delete-28-regular.png", + height: 15.h, + width: 15.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () {}, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + text14400white("Message user"), + Spacer(), + Image.asset( + "assets/images/png/fluent_chat-20-regular.png", + height: 20.h, + width: 20.w, + ) + ], + ), + ), + ), + PopupMenuDivider(), + PopupMenuItem( + onTap: () async {}, + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 12.w), + child: Row( + children: [ + text14400white("Block user"), + Spacer(), + Image.asset( + "assets/images/png/blockchat.png", + height: 25.h, + width: 25.w, + ) + ], + ), + ), + ), + ], + child: Container( + height: 20, + width: 20, + child: Center( + child: Image.asset( + "assets/images/png/Group 1000004071.png", + height: 22.h, + width: 4.w, + ), + ), + )), + ], + ), + ) + ], + ); + }, + ), + ], + ); + } +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/ProfileTab.dart b/lib/Feed Module/Main_Screens/ProfileTab/ProfileTab.dart deleted file mode 100644 index 4808123..0000000 --- a/lib/Feed Module/Main_Screens/ProfileTab/ProfileTab.dart +++ /dev/null @@ -1,919 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_reaction_button/flutter_reaction_button.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:get/get.dart'; -import 'package:regroup/Common/CommonBottomNavigationBar.dart'; -import 'package:regroup/Common/CommonGlassmorphism.dart'; -import 'package:regroup/Common/CommonWidget.dart'; -import 'package:regroup/Common/controller/MainScreen.dart'; -import 'package:regroup/Utils/Common/blureffect.dart'; -import 'package:regroup/Utils/Common/sized_box.dart'; -import 'package:regroup/Utils/texts.dart'; -import 'package:regroup/resources/routes/route_name.dart'; - -class ProfileTab extends StatefulWidget { - const ProfileTab({super.key}); - - @override - State createState() => _ProfileTabState(); -} - -class _ProfileTabState extends State { - List cardtile = [ - { - "imagePath": "assets/images/png/Rectangle 29ss.png", - "title": "Cardio crusaders circle" - }, - { - "imagePath": "assets/images/png/Rectangle 31ee.png", - "title": "Strength squad syndicate" - }, - { - "imagePath": "assets/images/png/Rectangle 30aa.png", - "title": "Flexibility faction force" - }, - { - "imagePath": "assets/images/png/Rectangle 29ss.png", - "title": "Cardio crusaders circle" - }, - ]; - - List timeline = [ - { - "imagePath": "assets/images/png/cimg1.png", - "title": "Cardio crusaders circle" - }, - { - "imagePath": "assets/images/png/cimg1.png", - "title": "Cardio crusaders circle" - }, - { - "imagePath": "assets/images/png/cimg1.png", - "title": "Cardio crusaders circle" - }, - { - "imagePath": "assets/images/png/cimg1.png", - "title": "Cardio crusaders circle" - }, - ]; - - @override - Widget build(BuildContext context) { - return Scaffold( - // key: _scaffoldKey1, - backgroundColor: Color(0xFF222935), - extendBody: true, - body: Stack(clipBehavior: Clip.none, children: [ - Container( - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/images/png/Ellipse 1496.png"), - fit: BoxFit.fill)), - ), - SafeArea( - child: SingleChildScrollView( - child: Column( - children: [ - Stack( - children: [ - Container( - height: 484.h, - width: double.infinity, - child: Image.asset( - "assets/images/png/profileimg.png", - fit: BoxFit.cover, - ), - ), - Positioned.fill( - child: Container( - decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Color.fromRGBO(34, 41, 53, 0.1), - Color.fromRGBO(34, 41, 53, 0.79), - ], - stops: [ - 0.5788, - 0.8, - ], - ), - ), - ), - ), - Positioned( - bottom: 0, - right: 0, - left: 0, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Column( - children: [ - text20700white("Edward Hackett"), - sizedBoxHeight(5.h), - text18w400white("@edward_01"), - sizedBoxHeight(15.h), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - GestureDetector( - onTap: () { - Get.toNamed(RouteName.followers); - }, - child: Column( - children: [ - text16400white("254"), - sizedBoxHeight(6.h), - text12400whiteblur("Followers") - ], - ), - ), - sizedBoxWidth(20.w), - Container( - height: 58.h, - decoration: BoxDecoration( - color: Colors.white, - border: Border.all( - color: Colors.white, - width: 1.0, - ), - boxShadow: [ - BoxShadow( - color: Color(0x66000000), - offset: Offset(0, 4), - blurRadius: 4.0, - ), - ], - ), - ), - sizedBoxWidth(20.w), - GestureDetector( - onTap: () { - Get.toNamed(RouteName.following); - }, - child: Column( - children: [ - text16400white("254"), - sizedBoxHeight(6.h), - text12400whiteblur("Following") - ], - ), - ), - sizedBoxWidth(20.w), - Container( - height: 58.h, - decoration: BoxDecoration( - color: Colors.white, - border: Border.all( - color: Colors.white, - width: 1.0, - ), - boxShadow: [ - BoxShadow( - color: Color(0x66000000), - offset: Offset(0, 4), - blurRadius: 4.0, - ), - ], - ), - ), - sizedBoxWidth(20.w), - GestureDetector( - onTap: () { - Get.toNamed(RouteName.clubs); - }, - child: Column( - children: [ - text16400white("10"), - sizedBoxHeight(6.h), - text12400whiteblur("Clubs") - ], - ), - ), - ], - ), - sizedBoxHeight(20.h), - ], - ), - ], - ), - ), - ), - ], - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - sizedBoxHeight(30.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - GestureDetector( - onTap: () { - Get.toNamed(RouteName.editProfile); - }, - child: Container( - height: 40.h, - width: 170.w, - decoration: BoxDecoration( - color: Color(0xFFD90B2E), - borderRadius: BorderRadius.circular(30.r), - ), - child: Center( - child: text16w400_FCFCFC("Edit profile")), - ), - ), - GestureDetector( - onTap: () { - Get.toNamed(RouteName.shareProfile); - }, - child: commonGlassUI( - width: 170.w, - height: 40.h, - - opacity1: 0.05, - opacity2: 0.07, - borderRadius: BorderRadius.circular(30.r), - mainOpacity: 1, - customWidget: Center( - child: text16w400_FCFCFC("Share profile"), - ), - // border: 1, - ), - ) - ], - ), - sizedBoxHeight(30.h), - text18w700white("Bio"), - sizedBoxHeight(10.h), - text14400white( - "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s."), - sizedBoxHeight(25.h), - Row( - children: [ - commonContainer( - width: 25.w, - height: 25.h, - opacity1: 0.26, - opacity2: 0.26, - borderwidth: 0.5, - boxShape: BoxShape.circle, - customWidget: Center( - child: Image.asset( - "assets/images/png/Group 58645.png", - height: 12.h, - width: 12.w, - )), - ), - sizedBoxWidth(12.w), - text14400whiteblur( - "Elm street london, United Kingdom"), - ], - ), - sizedBoxHeight(20.h), - Row( - children: [ - commonContainer( - width: 25.w, - height: 25.h, - opacity1: 0.26, - opacity2: 0.26, - borderwidth: 0.5, - boxShape: BoxShape.circle, - customWidget: Center( - child: Image.asset( - "assets/images/png/Vector (4).png", - height: 12.h, - width: 12.w, - )), - ), - sizedBoxWidth(12.w), - text14400whiteblur("Rowing, Football, Swimming"), - ], - ), - sizedBoxHeight(30.h), - commonGlassUI( - width: double.infinity, - height: 135.h, - borderRadius: BorderRadius.circular(10), - customWidget: Padding( - padding: EdgeInsets.symmetric( - vertical: 12.h, horizontal: 16.w), - child: Column( - children: [ - Row( - children: [ - text16w700white("Badges"), - Spacer(), - GestureDetector( - onTap: () { - Get.toNamed(RouteName.badges); - }, - child: text12400white("View more")) - ], - ), - sizedBoxHeight(8.h), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Image.asset( - "assets/images/png/Frame 1000004056.png", - height: 70.h, - width: 74.w, - ), - Image.asset( - "assets/images/png/Frame 1000004056.png", - height: 70.h, - width: 74.w, - ), - Image.asset( - "assets/images/png/Frame 1000004056.png", - height: 70.h, - width: 74.w, - ), - Image.asset( - "assets/images/png/Frame 1000004056.png", - height: 70.h, - width: 74.w, - ), - ], - ), - ], - ), - ), - // border: 1 - ), - sizedBoxHeight(40.h), - ], - ), - ), - SizedBox( - height: 190.h, - child: ListView.builder( - shrinkWrap: true, - scrollDirection: Axis.horizontal, - padding: EdgeInsets.only(left: 16.w), - itemCount: cardtile.length, - itemBuilder: (context, index) { - return Padding( - padding: EdgeInsets.only(right: 20.w), - child: profilecardtile( - imagePath: cardtile[index]["imagePath"], - title: cardtile[index]["title"]), - ); - }, - ), - ), - sizedBoxHeight(20.h), - Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - text18w700white("Timeline"), - Spacer(), - InkWell( - onTap: () { - Get.toNamed(RouteName.addtimeline); - }, - child: Image.asset( - "assets/images/png/iconamoon_edit-thin.png", - height: 20.h, - width: 20.w, - ), - ) - ], - ), - sizedBoxHeight(20.h), - SizedBox( - height: 300.h, - child: ListView.builder( - shrinkWrap: true, - itemCount: timeline.length, - itemBuilder: (context, index) { - return commonTimelineCard( - imagePath: timeline[index]["imagePath"], - title: timeline[index]["title"]); - }, - )), - sizedBoxHeight(30.h), - text18w700white("Posts"), - ]), - ), - normalcardtile( - profileImg: 'assets/images/png/Ellipse 48.png', - title: 'Jocelyn Dokidis', - mainImg: 'assets/images/png/Rectangle 46.png', - containerTitle: [ - 'Race', - 'Swimming', - 'Events', - 'Marathon', - 'Events' - ]), - sizedBoxHeight(120.h), - ], - ), - ), - ), - Positioned.fill( - top: 40.h, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Column( - children: [ - sizedBoxHeight(20.h), - Row( - children: [ - Spacer(), - InkWell( - onTap: () { - Get.toNamed(RouteName.settings); - }, - child: commonContainer( - width: 40.w, - height: 40.h, - borderwidth: 0.5, - boxShape: BoxShape.circle, - opacity1: 0.5, - opacity2: 0.6, - customWidget: Center( - child: Image.asset( - 'assets/images/png/setting2.png', - height: 20.h, - width: 20.w, - )), - ), - ), - ], - ), - ], - ), - ), - ), - ]), - bottomNavigationBar: bottomnavigationbar(mainController), - ); - } - - Widget commonTimelineCard( - {required String imagePath, required String title}) { - return Row( - children: [ - Container( - width: 10, - height: 170.h, - child: Stack( - clipBehavior: Clip.none, - children: [ - Positioned( - top: 50.h, - child: Container( - height: 11.h, - width: 11.w, - decoration: BoxDecoration( - color: Colors.white, shape: BoxShape.circle)), - ), - Positioned( - right: 3.w, - child: Container( - width: 1.w, - height: 170.h, - decoration: BoxDecoration(color: Colors.white), - ), - ), - ], - ), - ), - sizedBoxWidth(20.w), - Expanded( - child: Column( - children: [ - commonGlassUI( - width: double.infinity, - height: 145.h, - borderRadius: BorderRadius.circular(10.r), - customWidget: Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - CircleAvatar( - radius: 10.r, - backgroundImage: AssetImage(imagePath), - ), - sizedBoxWidth(8.w), - text14700white(title) - ], - ), - sizedBoxHeight(10.h), - text12700white("Team captain"), - sizedBoxHeight(8.h), - text12400white("April 2023 - May 2024"), - sizedBoxHeight(10.h), - text10400whiteblur( - "Lorem IpsumĀ is simply dummy text of the printing and typesetting industry.") - ], - ), - ), - // border: 1 - ), - ], - ), - ), - ], - ); - } - - Widget normalcardtile({ - required String profileImg, - required String title, - required String mainImg, - required List containerTitle, - }) { - var mainImage = 'assets/images/png/uiw_like-o.png'.obs; - void updateImage(String reaction) { - if (reaction == 'like') { - mainImage.value = 'assets/images/png/f7_hand-thumbsup.png'; - } else if (reaction == 'heart') { - mainImage.value = 'assets/images/png/heart 2.png'; - } else if (reaction == 'party') { - mainImage.value = 'assets/images/png/party-popper 2.png'; - } - } - - return Column( - children: [ - sizedBoxHeight(25.h), - Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CircleAvatar( - foregroundImage: AssetImage(profileImg), - radius: 25.r, - ), - sizedBoxWidth(12.w), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - text16w400_FCFCFC(title), - sizedBoxHeight(5.h), - Row( - children: [ - Image.asset( - 'assets/images/png/community 1 (traced).png', - height: 14.w, - width: 14.w, - ), - sizedBoxWidth(7.w), - text12w400_FCFCFC('Active alliance network'), - sizedBoxWidth(7.w), - Icon( - Icons.circle, - color: Color(0xFFFCFCFC), - size: 4.sp, - ), - sizedBoxWidth(6.w), - text12w400_FCFCFC('1 Hour ago'), - ], - ) - ], - ), - Spacer(), - PopupMenuButton( - surfaceTintColor: Color(0xFF222935), - constraints: BoxConstraints.tightFor(width: 176.w), - offset: Offset(0, 50), - color: Color(0xFF222935), - tooltip: "", - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - onTap: () {}, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 12.w), - child: Row( - children: [ - Text( - 'Report Post', - style: TextStyle( - fontSize: 16.sp, - color: Colors.white, - fontWeight: FontWeight.w800, - fontFamily: "Nunito Sans", - ), - ), - Spacer(), - Image.asset( - "assets/images/png/Vector (5).png", - height: 15.h, - width: 15.w, - ) - ], - ), - ), - ), - PopupMenuDivider(), - PopupMenuItem( - onTap: () {}, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 12.w), - child: Row( - children: [ - Text( - 'Share post', - style: TextStyle( - fontSize: 16.sp, - color: Colors.white, - fontWeight: FontWeight.w800, - fontFamily: "Nunito Sans", - ), - ), - Spacer(), - Image.asset( - "assets/images/png/share.png", - height: 20.h, - width: 20.w, - ) - ], - ), - ), - ), - PopupMenuDivider(), - PopupMenuItem( - onTap: () {}, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 12.w), - child: Row( - children: [ - Text( - 'Pin', - style: TextStyle( - fontSize: 16.sp, - color: Colors.white, - fontWeight: FontWeight.w800, - fontFamily: "Nunito Sans", - ), - ), - Spacer(), - Image.asset( - "assets/images/png/f7_pin-fill (2).png", - height: 25.h, - width: 25.w, - ) - ], - ), - ), - ), - ], - child: Image.asset( - 'assets/images/png/Group 1000004071.png', - width: 16.w, - height: 18.h, - ), - ), - sizedBoxWidth(5.w) - ], - ), - ), - sizedBoxHeight(20.h), - GestureDetector( - onTap: () { - Get.toNamed(RouteName.postdetailsScreen); - }, - child: Container( - height: 163.h, - width: double.infinity, - child: Image.asset( - mainImg, - fit: BoxFit.cover, - ), - )), - sizedBoxHeight(20.h), - Padding( - padding: EdgeInsets.symmetric(horizontal: 16.w), - child: Column(children: [ - SizedBox( - height: 30.h, - child: ListView.builder( - scrollDirection: Axis.horizontal, - shrinkWrap: true, - itemCount: containerTitle.length, - itemBuilder: (context, index) { - return Padding( - padding: EdgeInsets.only(right: 12.w), - child: GestureDetector( - onTap: () { - // Get.toNamed(RouteName.cyclescreen); - }, - child: containertile(text: containerTitle[index])), - ); - }, - ), - ), - sizedBoxHeight(20.h), - text16w400_FCFCFC( - "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s . . ."), - Row(children: [ - stackReaction(number: '20', containerImages: [ - 'assets/images/png/f7_hand-thumbsup.png', - 'assets/images/png/heart 2.png', - 'assets/images/png/party-popper 2.png' - ]), - Spacer(), - commonContainer( - width: 30.w, - height: 30.h, - opacity1: 0.2, - opacity2: 0.2, - borderwidth: 0.43, - boxShape: BoxShape.circle, - customWidget: Center( - child: Image.asset( - 'assets/images/png/Frame 1000004088.png', - height: 13.h, - width: 13.w, - ), - ), - ), - sizedBoxWidth(12.w), - text14w400_FCFCFC('20'), - sizedBoxWidth(20.w), - commonContainer( - width: 30.w, - height: 30.h, - opacity1: 0.2, - opacity2: 0.2, - borderwidth: 0.43, - boxShape: BoxShape.circle, - customWidget: Center( - child: Image.asset( - 'assets/images/png/Vector (1).png', - height: 12.h, - width: 12.w, - ), - ), - ), - sizedBoxWidth(12.w), - text14w400_FCFCFC('10'), - ]), - sizedBoxHeight(30.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Obx(() { - return ReactionButton( - onReactionChanged: (reaction) { - updateImage(reaction?.value ?? 'like'); - debugPrint('Selected value: ${reaction?.value}'); - }, - reactions: ?>[ - Reaction( - value: 'like', - previewIcon: _buildReactionsPreviewIcon( - 'assets/images/png/f7_hand-thumbsup.png'), - icon: _buildReactionsIcon( - 'assets/images/png/f7_hand-thumbsup.png'), - ), - Reaction( - value: 'heart', - previewIcon: _buildReactionsPreviewIcon( - 'assets/images/png/heart 2.png'), - icon: _buildReactionsIcon( - 'assets/images/png/heart 2.png'), - ), - Reaction( - value: 'party', - previewIcon: _buildReactionsPreviewIcon( - 'assets/images/png/party-popper 2.png'), - icon: _buildReactionsIcon( - 'assets/images/png/party-popper 2.png'), - ), - ], - selectedReaction: Reaction( - value: 'like', - icon: _buildReactionsIcon( - 'assets/images/png/f7_hand-thumbsup.png'), - ), - boxColor: Colors.white, - boxElevation: 9, - boxRadius: 30, - itemsSpacing: 8, - itemScale: 0.4, - itemSize: Size(45, 45), - boxPadding: EdgeInsets.all(8), - boxAnimationDuration: Duration(milliseconds: 200), - itemAnimationDuration: Duration(milliseconds: 500), - hoverDuration: Duration(milliseconds: 700), - // toggle: false, - - child: _buildReactionsIcon(mainImage.value), - ); - }) - ], - ), - GestureDetector( - onTap: () { - Get.toNamed(RouteName.postdetailsScreen); - }, - child: Column( - children: [ - Image.asset( - 'assets/images/png/Frame 1000004088.png', - height: 19.h, - width: 19.w, - ), - sizedBoxHeight(8.h), - text11w400_FCFCFC('Comment') - ], - ), - ), - Column( - children: [ - Image.asset( - 'assets/images/png/Frame 1000004089.png', - height: 19.h, - width: 19.w, - ), - sizedBoxHeight(8.h), - text11w400_FCFCFC('Save') - ], - ) - ], - ) - ]), - ), - ], - ); - } - - Widget _buildReactionsPreviewIcon(String assetPath) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: Image.asset( - assetPath, - height: 40.h, - width: 40.w, - ), - ); - } - - Widget _buildReactionsIcon(String assetPath) { - return Column( - children: [ - Image.asset( - assetPath, - height: 19.h, - width: 19.w, - ), - sizedBoxHeight(8.h), - text11w400_FCFCFC('Like') - ], - ); - } - - Widget containertile({required String text}) { - return commonContainer( - width: 100.w, - height: 30.h, - borderRadius: BorderRadius.circular(30.r), - borderColor: Color(0xFFD90B2E), - borderwidth: 0.9, - customWidget: Padding( - padding: EdgeInsets.symmetric(horizontal: 10.w), - child: Center(child: text14w400_FCFCFC(text)), - )); - } - - Widget profilecardtile({required String imagePath, required String title}) { - return Column( - children: [ - Container( - height: 109.h, - width: 100.w, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.r), - ), - child: Image.asset(imagePath), - ), - sizedBoxHeight(10.h), - SizedBox(width: 100.w, child: text12w700_FCFCFC(title)), - ], - ); - } -} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/Settings/BlockedUsers.dart b/lib/Feed Module/Main_Screens/ProfileTab/Settings/BlockedUsers.dart deleted file mode 100644 index 88882cc..0000000 --- a/lib/Feed Module/Main_Screens/ProfileTab/Settings/BlockedUsers.dart +++ /dev/null @@ -1,208 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:get/get.dart'; -import 'package:regroup/Common/CommonGlassmorphism.dart'; -import 'package:regroup/Common/CommonWidget.dart'; -import 'package:regroup/Utils/Common/CommonAppbar.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/texts.dart'; - -class BlockedUsers extends StatefulWidget { - const BlockedUsers({super.key}); - - @override - State createState() => _BlockedUsersState(); -} - -class _BlockedUsersState extends State { - List blockedUserData = [ - { - "imagePath": "assets/images/png/cimg1.png", - "title": "Ryan Dorwart", - "subtitle": "Lorem ipsum dummy text", - }, - { - "imagePath": "assets/images/png/cimg2.png", - "title": "Ahmad Rhiel Madsen", - "subtitle": "Lorem ipsum dummy text", - }, - { - "imagePath": "assets/images/png/cimg3.png", - "title": "Kaylynn Vaccaro", - "subtitle": "Lorem ipsum dummy text", - }, - { - "imagePath": "assets/images/png/cimg4.png", - "title": "Kianna Donin", - "subtitle": "Lorem ipsum dummy text", - }, - { - "imagePath": "assets/images/png/Ellipse 43.png", - "title": "Maria Herwitz", - "subtitle": "Lorem ipsum dummy text", - }, - { - "imagePath": "assets/images/png/Ellipse 52.png", - "title": "Ahmad Rhiel Madsen", - "subtitle": "Lorem ipsum dummy text", - }, - { - "imagePath": "assets/images/png/img2.png", - "title": "Kaylynn Vaccaro", - "subtitle": "Lorem ipsum dummy text", - }, - ]; - - @override - Widget build(BuildContext context) { - return Scaffold( - // key: _scaffoldKey1, - resizeToAvoidBottomInset: false, - backgroundColor: Color(0xFF222935), - extendBody: true, - appBar: CommonAppbar( - titleTxt: "Blocked users", - ), - body: Stack(children: [ - Container( - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/images/png/Ellipse 1496.png"), fit: BoxFit.fill)), - ), - Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - sizedBoxHeight(25.h), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: CustomTextFormField( - leadingIcon: SizedBox( - height: 23, - width: 23, - child: Center( - child: Image.asset( - "assets/images/png/ion_search-outline.png", - height: 23, - width: 23, - ), - ), - ), - hintText: "Search people", - ), - ), - sizedBoxHeight(25.h), - Expanded( - child: ListView.builder( - shrinkWrap: true, - itemCount: blockedUserData.length, - itemBuilder: (context, index) { - return Column( - children: [ - blockedUser( - imagePath: blockedUserData[index]["imagePath"], - title: blockedUserData[index]["title"], - subtitle: blockedUserData[index]["subtitle"]), - if (index != blockedUserData.length - 1) commonDivider(), - ], - ); - }, - ), - ), - sizedBoxHeight(20.h) - ]) - ])); - } - - dialogwidget() { - Get.dialog(Dialog( - backgroundColor: Colors.transparent, - surfaceTintColor: Colors.transparent, - child: commonGlassContainer( - width: double.infinity, - height: 200.h, - borderradius: 14, - opacity1: 0.09, - opacity2: 0.13, - customWidget: Padding( - padding: EdgeInsets.symmetric(horizontal: 30.w, vertical: 30.h), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - text18w400_FCFCFC( - "Are you sure you want to unblock the user?", - textAlign: TextAlign.center), - sizedBoxHeight(30.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - commonGlassContainer( - width: 110.w, - height: 40.h, - borderradius: 30.r, - opacity1: 0.05, - opacity2: 0.07, - customWidget: Center(child: text14400white("No")), - border: 1), - InkWell( - onTap: () { - Get.back(); - }, - child: Container( - height: 40.h, - width: 110.w, - decoration: BoxDecoration( - color: Color(0xFFD90B2E), - borderRadius: BorderRadius.circular(30.r), - ), - child: Center(child: text14400white("Yes")), - ), - ) - ], - ), - ], - ), - ), - border: 0.8))); - } - - Widget blockedUser({ - required String imagePath, - required String title, - required String subtitle, - }) { - return Padding( - padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), - child: Row( - children: [ - CircleAvatar( - backgroundImage: AssetImage(imagePath), - radius: 25.r, - ), - sizedBoxWidth(10.w), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - text16w400_FCFCFC(title), - sizedBoxHeight(4.h), - text12w400_FCFCFC_blur(subtitle), - ], - ), - Spacer(), - GestureDetector( - onTap: () { - dialogwidget(); - }, - child: Container( - height: 30.h, - width: 105.w, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(30.r), - color: Color(0xFFD90B2E)), - child: Center(child: text14w400_FCFCFC("Unblock")), - ), - ) - ], - ), - ); - } -} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/Settings/Model/FetchBlockUser.dart b/lib/Feed Module/Main_Screens/ProfileTab/Settings/Model/FetchBlockUser.dart new file mode 100644 index 0000000..f0695da --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/Settings/Model/FetchBlockUser.dart @@ -0,0 +1,83 @@ +class FetchBlockedUser { + String? status; + int? statusCode; + String? message; + List? data; + + FetchBlockedUser({this.status, this.statusCode, this.message, this.data}); + + FetchBlockedUser.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? blockedIamPrincipalXid; + int? iamPrincipalXid; + BlockedProfile? blockedProfile; + + Data( + {this.blockedIamPrincipalXid, this.iamPrincipalXid, this.blockedProfile}); + + Data.fromJson(Map json) { + blockedIamPrincipalXid = json['blocked_iam_principal_xid']; + iamPrincipalXid = json['iam_principal_xid']; + blockedProfile = json['blocked_profile'] != null + ? new BlockedProfile.fromJson(json['blocked_profile']) + : null; + } + + Map toJson() { + final Map data = new Map(); + data['blocked_iam_principal_xid'] = this.blockedIamPrincipalXid; + data['iam_principal_xid'] = this.iamPrincipalXid; + if (this.blockedProfile != null) { + data['blocked_profile'] = this.blockedProfile!.toJson(); + } + return data; + } +} + +class BlockedProfile { + int? id; + String? userName; + String? fullName; + String? profilePhoto; + + BlockedProfile({this.id, this.userName, this.fullName, this.profilePhoto}); + + BlockedProfile.fromJson(Map json) { + id = json['id']; + userName = json['user_name']; + fullName = json['full_name']; + profilePhoto = json['profile_photo']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['user_name'] = this.userName; + data['full_name'] = this.fullName; + data['profile_photo'] = this.profilePhoto; + return data; + } +} \ No newline at end of file diff --git a/lib/Feed Module/Main_Screens/ProfileTab/Settings/Settings.dart b/lib/Feed Module/Main_Screens/ProfileTab/Settings/Settings.dart index c9ce84e..caa0c8d 100644 --- a/lib/Feed Module/Main_Screens/ProfileTab/Settings/Settings.dart +++ b/lib/Feed Module/Main_Screens/ProfileTab/Settings/Settings.dart @@ -58,6 +58,16 @@ class _SettingsState extends State { ), ), commonDivider(), + GestureDetector( + onTap: () { + Get.toNamed(RouteName.editProfile); + }, + child: rowTile( + imagePath: "assets/images/png/edit 1.png", + text: "Edit profile", + ), + ), + commonDivider(), GestureDetector( onTap: () { Get.toNamed(RouteName.helpandsupport); diff --git a/lib/Feed Module/Main_Screens/ProfileTab/Settings/View/BlockedUsers.dart b/lib/Feed Module/Main_Screens/ProfileTab/Settings/View/BlockedUsers.dart new file mode 100644 index 0000000..89623a6 --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/Settings/View/BlockedUsers.dart @@ -0,0 +1,318 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:regroup/Common/CommonGlassmorphism.dart'; +import 'package:regroup/Common/CommonWidget.dart'; +import 'package:regroup/Common/base_manager.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Settings/ViewModel/BlockedUserApi.dart'; +import 'package:regroup/Utils/Common/CommonAppbar.dart'; +import 'package:regroup/Utils/Common/CustomTextformfield.dart'; +import 'package:regroup/Utils/Common/sized_box.dart'; +import 'package:regroup/Utils/texts.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class BlockedUsers extends StatefulWidget { + const BlockedUsers({super.key}); + + @override + State createState() => _BlockedUsersState(); +} + +class _BlockedUsersState extends State { + List blockedUserData = [ + { + "imagePath": "assets/images/png/cimg1.png", + "title": "Ryan Dorwart", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/cimg2.png", + "title": "Ahmad Rhiel Madsen", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/cimg3.png", + "title": "Kaylynn Vaccaro", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/cimg4.png", + "title": "Kianna Donin", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 43.png", + "title": "Maria Herwitz", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/Ellipse 52.png", + "title": "Ahmad Rhiel Madsen", + "subtitle": "Lorem ipsum dummy text", + }, + { + "imagePath": "assets/images/png/img2.png", + "title": "Kaylynn Vaccaro", + "subtitle": "Lorem ipsum dummy text", + }, + ]; + late Future myfuture; + double? blockedXid; + + unblockDone(int index) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + await prefs.setInt('blockedprincipalxid', + fetchblockuser!.data![index].blockedIamPrincipalXid!); + blockedXid = prefs.getInt('blockedprincipalxid')!.toDouble(); + Map updata = { + "blocked_iam_principal_xid": blockedXid.toString(), + }; + final resp = await BlockUserAPI().postBlockApi(updata); + if (resp.status == ResponseStatus.SUCCESS) { + Get.snackbar( + "Success!", + 'Unblock user successfully', + duration: Duration(seconds: 2), + colorText: Colors.white, + backgroundColor: Colors.green, + margin: EdgeInsets.all(8), + snackStyle: SnackStyle.FLOATING, + snackPosition: SnackPosition.BOTTOM, + ); + // utils.showToast('Unblock user successfully'); + + setState(() { + fetchblockuser!.data!.removeAt(index); + }); + print('success'); + } else { + // btnController.error(); + // btnController.reset(); + Get.snackbar( + "Error!", + resp.data['message'], + duration: Duration(seconds: 2), + colorText: Colors.white, + backgroundColor: Colors.red, + margin: EdgeInsets.all(8), + snackStyle: SnackStyle.FLOATING, + snackPosition: SnackPosition.BOTTOM, + ); + } + } + + @override + void initState() { + myfuture = BlockUserAPI().fetchBlockUser(); + // TODO: implement initState + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + // key: _scaffoldKey1, + resizeToAvoidBottomInset: false, + backgroundColor: Color(0xFF222935), + extendBody: true, + appBar: CommonAppbar( + titleTxt: "Blocked users", + ), + body: FutureBuilder( + future: myfuture, + builder: (ctx, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center( + child: CircularProgressIndicator( + color: Colors.blue, + ), + ); + } + + if (snapshot.hasError) { + return Center( + child: Text( + '${snapshot.error} occurred', + style: TextStyle(fontSize: 18.spMin), + ), + ); + } + + if (snapshot.connectionState == ConnectionState.done && + snapshot.hasData) { + print("Data fetched-->"); + return Stack(children: [ + Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/images/png/Ellipse 1496.png"), + fit: BoxFit.fill)), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + sizedBoxHeight(25.h), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: CustomTextFormField( + leadingIcon: SizedBox( + height: 23, + width: 23, + child: Center( + child: Image.asset( + "assets/images/png/ion_search-outline.png", + height: 23, + width: 23, + ), + ), + ), + hintText: "Search people", + ), + ), + sizedBoxHeight(25.h), + Expanded( + child: ListView.builder( + shrinkWrap: true, + itemCount: fetchblockuser!.data!.length, + itemBuilder: (context, index) { + return Column( + children: [ + blockedUser( + imagePath: fetchblockuser!.data![index] + .blockedProfile!.profilePhoto ?? + '', + title: fetchblockuser!.data![index] + .blockedProfile!.fullName ?? + '', + subtitle: fetchblockuser!.data![index] + .blockedProfile!.userName ?? + '', + index: index), + // blockedUser( + // imagePath: blockedUserData[index] + // ["imagePath"], + // title: blockedUserData[index]["title"], + // subtitle: blockedUserData[index] + // ["subtitle"]), + if (index != fetchblockuser!.data!.length - 1) + commonDivider(), + ], + ); + }, + ), + ), + sizedBoxHeight(20.h) + ]) + ]); + } + return Container(); + })); + } + + dialogwidget({required int index}) { + Get.dialog(Dialog( + backgroundColor: Colors.transparent, + surfaceTintColor: Colors.transparent, + child: commonGlassContainer( + width: double.infinity, + height: 200.h, + borderradius: 14, + opacity1: 0.09, + opacity2: 0.13, + customWidget: Padding( + padding: EdgeInsets.symmetric(horizontal: 30.w, vertical: 30.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text18w400_FCFCFC( + "Are you sure you want to unblock the user?", + textAlign: TextAlign.center), + sizedBoxHeight(30.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + GestureDetector( + onTap: () { + Get.back(); + }, + child: commonGlassContainer( + width: 110.w, + height: 40.h, + borderradius: 30.r, + opacity1: 0.05, + opacity2: 0.07, + customWidget: Center(child: text14400white("No")), + border: 1), + ), + InkWell( + onTap: () { + // Get.back(); + unblockDone(index); + // await BlockUserAPI().fetchBlockUser(); + Get.back(); + // setState(() {}); + }, + child: Container( + height: 40.h, + width: 110.w, + decoration: BoxDecoration( + color: Color(0xFFD90B2E), + borderRadius: BorderRadius.circular(30.r), + ), + child: Center(child: text14400white("Yes")), + ), + ) + ], + ), + ], + ), + ), + border: 0.8))); + } + + Widget blockedUser({ + required String imagePath, + required String title, + required String subtitle, + required int index, + }) { + return Padding( + padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), + child: Row( + children: [ + CircleAvatar( + backgroundImage: NetworkImage(imagePath), + + // AssetImage(imagePath), + radius: 25.r, + ), + sizedBoxWidth(10.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text16w400_FCFCFC(title), + sizedBoxHeight(4.h), + text12w400_FCFCFC_blur(subtitle), + ], + ), + Spacer(), + GestureDetector( + onTap: () { + dialogwidget(index: index); + }, + child: Container( + height: 30.h, + width: 105.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(30.r), + color: Color(0xFFD90B2E)), + child: Center(child: text14w400_FCFCFC("Unblock")), + ), + ) + ], + ), + ); + } +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/Settings/ViewModel/BlockedUserApi.dart b/lib/Feed Module/Main_Screens/ProfileTab/Settings/ViewModel/BlockedUserApi.dart new file mode 100644 index 0000000..7d8640d --- /dev/null +++ b/lib/Feed Module/Main_Screens/ProfileTab/Settings/ViewModel/BlockedUserApi.dart @@ -0,0 +1,53 @@ +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/Feed%20Module/Main_Screens/ProfileTab/Settings/Model/FetchBlockUser.dart'; + +FetchBlockedUser? fetchblockuser; + +class BlockUserAPI { + BlockUserAPI(); + + Future> fetchBlockUser() async { + final response = await NetworkApiServices().getApi( + ApiUrls.getblockuser, + ); + fetchblockuser = FetchBlockedUser.fromJson(response.data); + if (response.status == ResponseStatus.SUCCESS) { + if (response.data["status"] == "success") { + print("Success---->"); + return ResponseData( + response.data['message'], ResponseStatus.SUCCESS, + data: response.data); + } else { + return ResponseData( + response.data['message'], ResponseStatus.FAILED); + } + } + + return response; + } + + Future> postBlockApi(var data) async { + final response = await NetworkApiServices().postApi( + data, + ApiUrls.postblockuser, + ); + + if (response.status == ResponseStatus.SUCCESS) { + //Map responseData = jsonDecode(response.data); + if (response.data['status'] == "success") { + return ResponseData( + response.data['message'], ResponseStatus.SUCCESS, + // data: response.data + ); + } else { + return ResponseData( + response.data['message'], ResponseStatus.FAILED); + } + } + + return response; + } + +} diff --git a/lib/Feed Module/Main_Screens/ProfileTab/Settings/ViewModel/NotificationApi.dart b/lib/Feed Module/Main_Screens/ProfileTab/Settings/ViewModel/NotificationApi.dart index 1226653..6f53d7c 100644 --- a/lib/Feed Module/Main_Screens/ProfileTab/Settings/ViewModel/NotificationApi.dart +++ b/lib/Feed Module/Main_Screens/ProfileTab/Settings/ViewModel/NotificationApi.dart @@ -39,7 +39,7 @@ class NotificationAPI { ); fetchNoti = FetchNotification.fromJson(response.data); if (response.status == ResponseStatus.SUCCESS) { - if (response.data['success'] == true) { + if (response.data["status"] == "success") { return ResponseData( response.data['message'], ResponseStatus.SUCCESS, data: response.data); diff --git a/lib/Login/ViewModel/LoginApi.dart b/lib/Login/ViewModel/LoginApi.dart index c4fb274..dd4e59a 100644 --- a/lib/Login/ViewModel/LoginApi.dart +++ b/lib/Login/ViewModel/LoginApi.dart @@ -15,6 +15,7 @@ class LoginAPI { .postApi(data, ApiUrls.getlogin, optionalpar: true); if (response.status == ResponseStatus.SUCCESS) { + String? accountype; if (response.data['status'] == 'success') { LoginModel loginObj = LoginModel.fromJson(response.data); await prefs.setString('access-token', loginObj.data!.accessToken!); @@ -32,12 +33,12 @@ class LoginAPI { myusername = loginObj.data?.userData?.userName; fullname = loginObj.data?.userData?.fullName; phonenumber = loginObj.data?.userData?.phoneNumber; - + await prefs.setString('accountTypefromLogin', + loginObj.data?.userData?.principalTypeXid.toString() ?? ""); print("token is ${loginObj.data!.accessToken!}"); if (loginObj.data?.userData?.isProfileUpdated == 0) { - String? accountype = - loginObj.data?.userData?.principalTypeXid.toString(); + accountype = loginObj.data?.userData?.principalTypeXid.toString(); if (accountype == "1") { print('tell us individyal'); diff --git a/lib/Utils/Common/CommonDropdown.dart b/lib/Utils/Common/CommonDropdown.dart index eb41dec..aaea678 100644 --- a/lib/Utils/Common/CommonDropdown.dart +++ b/lib/Utils/Common/CommonDropdown.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:regroup/Utils/Common/CustomTextformfield.dart'; @@ -752,6 +753,270 @@ class _CustomDropDownRadioState extends State { } } +class CustomDropDownChexkBox extends StatefulWidget { + const CustomDropDownChexkBox({ + Key? key, + required this.header, + required this.title, + required this.listData, + required this.onItemSelected, + required this.leadingImage, + this.showOtherOption = false, + required this.initiallySelected, // Added this line + }) : super(key: key); + + final String header; + final String title; + final List listData; + final Function(List) onItemSelected; + final Widget? leadingImage; + final bool showOtherOption; + final List initiallySelected; // Added this line + + @override + State createState() => _CustomDropDownChexkBoxState(); +} + +class _CustomDropDownChexkBoxState extends State { + RxBool onDropTap = false.obs; + RxList selectedValues = [].obs; + final TextEditingController _textController = TextEditingController(); + + @override + void initState() { + super.initState(); + selectedValues.addAll(widget.initiallySelected); // Added this line + } + + List> _buildDropdownMenuItems() { + List> items = + widget.listData.asMap().entries.map((entry) { + int index = entry.key; + String item = entry.value; + return DropdownMenuItem( + value: item, + child: InkWell( + onTap: () { + if (selectedValues.contains(item)) { + selectedValues.remove(item); + } else { + selectedValues.add(item); + } + _textController.clear(); + widget.onItemSelected(selectedValues); + }, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + children: [ + Obx(() { + return Checkbox( + value: selectedValues.contains(item), + activeColor: Colors.white, + checkColor: const Color(0xFFD90B2E), + onChanged: (bool? value) { + if (value == true) { + selectedValues.add(item); + } else { + selectedValues.remove(item); + } + _textController.clear(); + widget.onItemSelected(selectedValues); + }, + ); + }), + const SizedBox(width: 8), + Text( + item, + style: const TextStyle( + color: Colors.white, + fontSize: 16, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w500, + ), + overflow: TextOverflow.ellipsis, + ), + ], + ), + if (index != widget.listData.length - 1) + const Divider(thickness: 1, color: Color(0xFF434A53)), + ], + ), + ), + ); + }).toList(); + + if (widget.showOtherOption) { + items.add( + DropdownMenuItem( + value: _textController.text, + child: Column( + children: [ + const Divider(thickness: 1, color: Color(0xFF434A53)), + Row( + children: [ + Obx(() { + return Checkbox( + value: selectedValues.contains(_textController.text), + activeColor: Colors.white, + onChanged: (bool? value) { + if (value == true && + _textController.text.trim().isNotEmpty) { + selectedValues.add(_textController.text); + } else { + selectedValues.remove(_textController.text); + } + widget.onItemSelected(selectedValues); + }, + ); + }), + const SizedBox(width: 8), + const Text( + "Other: ", + style: TextStyle( + color: Colors.white, + fontSize: 16, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w500, + ), + overflow: TextOverflow.ellipsis, + ), + Expanded( + child: TextField( + controller: _textController, + style: const TextStyle( + color: Colors.white, + fontSize: 16, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w500, + ), + decoration: const InputDecoration( + hintText: '', + hintStyle: TextStyle(color: Colors.white70), + border: UnderlineInputBorder(), + ), + ), + ), + TextButton( + onPressed: () { + if (_textController.text.trim().isNotEmpty) { + selectedValues.add(_textController.text); + widget.onItemSelected(selectedValues); + } + }, + child: const Text( + 'OK', + style: TextStyle( + color: Colors.white, + fontSize: 16, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ), + SizedBox(height: 10), + ], + ), + ), + ); + } + return items; + } + + @override + Widget build(BuildContext context) { + return Obx( + () => Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + GestureDetector( + onTap: () { + onDropTap.value = !onDropTap.value; + }, + child: Container( + width: double.infinity, + // height: 50, + padding: + EdgeInsets.only(right: 22, left: 12, top: 14, bottom: 14), + decoration: BoxDecoration( + color: const Color(0xFFFFFFFF).withOpacity(0.10), + borderRadius: onDropTap.value + ? const BorderRadius.vertical( + top: Radius.circular(30), + ) + : const BorderRadius.all(Radius.circular(30)), + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + const Color(0xFFffffff).withOpacity(0.50), + const Color(0xFFFFFFFF).withOpacity(0.50), + ], + ), + border: Border.all(color: const Color(0xFF434A53)), + ), + child: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (widget.leadingImage != null) widget.leadingImage!, + const SizedBox(width: 12), + Expanded( + child: Text( + selectedValues.isEmpty + ? widget.header + : selectedValues.join(', '), + style: TextStyle( + color: Colors.white, + fontSize: 16, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w400), + ), + ), + const Spacer(), + onDropTap.value + ? Image.asset('assets/images/png/arrowup.png') + : Image.asset('assets/images/png/arrowdown.png'), + ], + ), + ), + ), + ), + if (onDropTap.value) + Scrollbar( + child: Container( + width: double.infinity, + decoration: BoxDecoration( + color: const Color(0xFFFFFFFF).withOpacity(0.10), + borderRadius: const BorderRadius.vertical( + bottom: Radius.circular(30), + ), + border: Border.all(color: const Color(0xFF434A53)), + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + const Color(0xFFffffff).withOpacity(0.50), + const Color(0xFFFFFFFF).withOpacity(0.50), + ], + ), + ), + child: Column( + children: _buildDropdownMenuItems(), + ), + ), + ), + ], + ), + ); + } +} + class CustomDropDownCheckBox extends StatefulWidget { const CustomDropDownCheckBox({ Key? key, diff --git a/lib/Utils/texts.dart b/lib/Utils/texts.dart index ab870e6..7d77341 100644 --- a/lib/Utils/texts.dart +++ b/lib/Utils/texts.dart @@ -414,6 +414,16 @@ Widget text10400white(String text) { fontWeight: FontWeight.w400), ); } +Widget text9400white(String text) { + return Text( + text, + style: TextStyle( + fontSize: 9.sp, + color: Colors.white, + fontFamily: 'Helvetica', + fontWeight: FontWeight.w400), + ); +} Widget text6400white(String text) { return Text( diff --git a/lib/main.dart b/lib/main.dart index d1aa8d7..59cf7bc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -182,7 +182,7 @@ class _MyAppState extends State with WidgetsBindingObserver { fontFamily: 'Cambria', ), debugShowCheckedModeBanner: false, - initialRoute: RouteName.splashScreen, + initialRoute: RouteName.profiletabbusguest, getPages: AppRoutes.appRoutes(), ), designSize: const Size(390, 844), diff --git a/lib/onboarding/Signup/View/signupscreen.dart b/lib/onboarding/Signup/View/signupscreen.dart index 778b929..ca16b13 100644 --- a/lib/onboarding/Signup/View/signupscreen.dart +++ b/lib/onboarding/Signup/View/signupscreen.dart @@ -19,6 +19,7 @@ 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:shared_preferences/shared_preferences.dart'; class SignupScreen extends StatefulWidget { const SignupScreen({super.key}); @@ -138,6 +139,7 @@ class _SignupScreenState extends State { } Uploadata() async { + SharedPreferences prefs = await SharedPreferences.getInstance(); utils.loader(); int accountTypeValue = _accountTypeMap[_selectedAccountType] ?? 0; Map updata = { @@ -145,6 +147,7 @@ class _SignupScreenState extends State { "password": passwordController.text, "account_type": accountTypeValue, }; + final data = await Onboard().Postregisteration(updata); if (data.status == ResponseStatus.SUCCESS) { Get.back(); @@ -158,7 +161,8 @@ class _SignupScreenState extends State { "accounttype": selectedCategory, 'accountypenumber': accountTypeValue }); - +await prefs.setString( + 'accountTypeValue', accountTypeValue.toString() ?? ""); return utils.showToast(data.message); } else { Get.back(); diff --git a/lib/resources/routes/route_name.dart b/lib/resources/routes/route_name.dart index d77fa9d..7a6dd1d 100644 --- a/lib/resources/routes/route_name.dart +++ b/lib/resources/routes/route_name.dart @@ -57,6 +57,11 @@ class RouteName { static const String userchatpage = '/userchatpage'; + static const String profiletab = '/profiletab'; + static const String mynetwork = '/mynetwork'; + + + static const String groupchatpage = '/groupchatpage'; static const String managememberscal = '/managememberscal'; static const String shareProfile = '/shareProfile'; @@ -67,6 +72,7 @@ class RouteName { static const String settings = '/settings'; static const String accountsettings = '/accountsettings'; static const String editProfile = '/editProfile'; + static const String buseditprofile = '/buseditprofile'; static const String notifications = '/notifications'; static const String helpandsupport = '/helpandsupport'; static const String privacypolicy = '/privacypolicy'; @@ -116,4 +122,13 @@ class RouteName { static const String verifygoogleapplepage = '/verifygoogleapplepage'; + + //profiletabIndGestUser + + static const String profiletabindguest = '/profiletabindguest'; + + //profiletabBusGestUser + + static const String profiletabbusguest = '/profiletabbusguest'; + } diff --git a/lib/resources/routes/routes.dart b/lib/resources/routes/routes.dart index 21aacea..3999c62 100644 --- a/lib/resources/routes/routes.dart +++ b/lib/resources/routes/routes.dart @@ -34,12 +34,17 @@ import 'package:regroup/Feed%20Module/Main_Screens/GroupTab/View/SubGroup/Subgro import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Badges/Badges.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Certificate/Certificate.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Clubs/Clubs.dart'; -import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/EditProfile.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/View/BusEditProfile.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/View/EditProfile.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/EditProfile/View/ProfileTab.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Followers/Followers.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Following/Following.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Guest%20User/Business/ProfileTabBusGuest.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Guest%20User/Individual/ProfileTabIndGuest.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/My%20Network/MyNetwork.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Settings/AccountSessions.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Settings/AccountSetting.dart'; -import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Settings/BlockedUsers.dart'; +import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Settings/View/BlockedUsers.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Settings/ChangePassword.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Settings/ContactUs.dart'; import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/Settings/DeleteAccount.dart'; @@ -497,5 +502,26 @@ class AppRoutes { name: RouteName.verifygoogleapplepage, page: () => Verifygoogleandapple(), ), + GetPage( + name: RouteName.buseditprofile, + page: () => BusEditProfile(), + ), + GetPage( + name: RouteName.profiletab, + page: () => ProfileTab(), + ), + + GetPage( + name: RouteName.profiletabindguest, + page: () => ProfileTabIndGuest(), + ), + GetPage( + name: RouteName.profiletabbusguest, + page: () => profiletabBusGest(), + ), + GetPage( + name: RouteName.mynetwork, + page: () => MyNetwork(), + ), ]; }