signup onboarding pages done including business and individual

This commit is contained in:
Shubhamshirva
2024-07-11 17:15:41 +05:30
parent f9fca85bf5
commit b0642c3ea5
16 changed files with 2395 additions and 1349 deletions

View File

@@ -8,4 +8,28 @@ class ApiUrls {
static const getlogin = "${baseUrl}login";
static const registeration = "${baseUrl}send_otp";
static const verifyregisteration = "${baseUrl}verify_otp";
static const tellusIndividual = "${baseUrl}add_profile";
static const getIndividualactivity = "${baseUrl}fetch-interests";
static const postindividualactivity = "${baseUrl}select-interests";
static const getgroups = "${baseUrl}fetch-groups";
static const postgroups = "${baseUrl}select-groups";
static const getcommunities = "${baseUrl}fetch-communities";
static const postcommunities = "${baseUrl}select-communities";
}

View File

@@ -13,34 +13,62 @@ import 'package:http/http.dart' as http;
import '../../entry_point_controller.dart';
class NetworkApiServices {
Dio dio = Dio();
final controllerEntryPoint = Get.put(EntryPointController());
String basicAuth = 'Basic ' +
base64.encode(
utf8.encode('RegroupUserName:71%@L%es^bUX94`J9XT*@bh,._WWM{\$%^^&&'));
Dio dio = Dio();
final controllerEntryPoint = Get.put(EntryPointController());
String basicAuth = 'Basic ' +
base64.encode(utf8.encode('RegroupUserName:71%@L%es^bUX94`J9XT*@bh,._WWM{\$%^^&&'));
Future<ResponseData> getApi(String url) async {
Future<ResponseData> getApi(String url, {bool optionalpar = false}) async {
if (kDebugMode) {
print("api url is >>> $url");
}
Response response;
SharedPreferences prefs = await SharedPreferences.getInstance();
token = prefs.getString('token');
print("url is $url");
log(token.toString());
try {
response = await dio.get(url,
options: Options(headers: {
"authorization": "Bearer $token",
'content-Type': 'application/json',
}));
} on Exception catch (_) {
response = await dio.get(
url,
options:
// Options(headers: {
// "authorization": "Bearer $token",
// 'content-Type': 'application/json',
// })
optionalpar
? Options(
headers: {
"authorization": basicAuth,
},
)
: Options(
headers: {
'authorization': basicAuth,
'access-token': token
},
),
);
} on Exception catch (e) {
log(e.toString());
return ResponseData<dynamic>(
'Oops something Went Wrong', ResponseStatus.FAILED);
}
// on Exception catch (e) {
// if (e is DioException) {
// if (e.response!.statusCode == 403) {
// return ResponseData<dynamic>(
// e.response!.data['message'][0]!, ResponseStatus.FAILED,
// data: e.response!.data);
// }
// }
// return ResponseData<dynamic>(
// 'Oops something Went Wrong',
// ResponseStatus.FAILED,
// );
// }
if (response.statusCode == 200) {
return ResponseData<dynamic>("success", ResponseStatus.SUCCESS,
data: response.data);
@@ -76,7 +104,7 @@ class NetworkApiServices {
// try {
// response = await dio.post(url,
// data: data,
// options: optionalpar
// options: optionalpar
// ?
// Options(
// headers: {
@@ -118,11 +146,10 @@ class NetworkApiServices {
// }
// }
// }
//New post api
@override
@override
Future<ResponseData> postApi(data, String url,
{bool optionalpar = false}) async {
if (kDebugMode) {
@@ -132,7 +159,7 @@ class NetworkApiServices {
Response response;
SharedPreferences prefs = await SharedPreferences.getInstance();
String? token = prefs.getString('accessToken');
String? token = prefs.getString('token');
log(token.toString());
try {
response = await dio.post(
@@ -152,9 +179,15 @@ class NetworkApiServices {
} on Exception catch (e) {
if (e is DioException) {
if (e.response!.statusCode == 403) {
return ResponseData<dynamic>(
e.response!.statusMessage!, ResponseStatus.FAILED,
data: e.response!.data);
if (e.response!.data['message'] is List) {
return ResponseData<dynamic>(
e.response!.data['message'][0]!, ResponseStatus.FAILED,
data: e.response!.data);
} else {
return ResponseData<dynamic>(
e.response!.data['message'], ResponseStatus.FAILED,
data: e.response!.data);
}
}
}
return ResponseData<dynamic>(

View File

@@ -4,6 +4,8 @@ import 'package:get/get.dart';
String? myusername;
String? token;
String? emailid;
int? isprofileupdated;
String? phonenumber;
bool pindialog = false;
bool storagedialog = false;

View File

@@ -0,0 +1,76 @@
class GetcommunitiesModel {
String? status;
int? statusCode;
String? message;
List<Data>? data;
GetcommunitiesModel({this.status, this.statusCode, this.message, this.data});
GetcommunitiesModel.fromJson(Map<String, dynamic> json) {
status = json['status'];
statusCode = json['status_code'];
message = json['message'];
if (json['data'] != null) {
data = <Data>[];
json['data'].forEach((v) {
data!.add(new Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['status'] = this.status;
data['status_code'] = this.statusCode;
data['message'] = this.message;
if (this.data != null) {
data['data'] = this.data!.map((v) => v.toJson()).toList();
}
return data;
}
}
class Data {
int? id;
String? communityProfilePhoto;
String? communityBannerImage;
String? communityName;
String? communityLocation;
String? communityDescription;
int? communityTypeXid;
int? activityXid;
Data(
{this.id,
this.communityProfilePhoto,
this.communityBannerImage,
this.communityName,
this.communityLocation,
this.communityDescription,
this.communityTypeXid,
this.activityXid});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
communityProfilePhoto = json['community_profile_photo'];
communityBannerImage = json['community_banner_image'];
communityName = json['community_name'];
communityLocation = json['community_location'];
communityDescription = json['community_description'];
communityTypeXid = json['community_type_xid'];
activityXid = json['activity_xid'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['community_profile_photo'] = this.communityProfilePhoto;
data['community_banner_image'] = this.communityBannerImage;
data['community_name'] = this.communityName;
data['community_location'] = this.communityLocation;
data['community_description'] = this.communityDescription;
data['community_type_xid'] = this.communityTypeXid;
data['activity_xid'] = this.activityXid;
return data;
}
}

View File

@@ -0,0 +1,72 @@
class GrouplistModel {
String? status;
int? statusCode;
String? message;
List<Data>? data;
GrouplistModel({this.status, this.statusCode, this.message, this.data});
GrouplistModel.fromJson(Map<String, dynamic> json) {
status = json['status'];
statusCode = json['status_code'];
message = json['message'];
if (json['data'] != null) {
data = <Data>[];
json['data'].forEach((v) {
data!.add(new Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['status'] = this.status;
data['status_code'] = this.statusCode;
data['message'] = this.message;
if (this.data != null) {
data['data'] = this.data!.map((v) => v.toJson()).toList();
}
return data;
}
}
class Data {
int? id;
String? title;
String? backgroundImage;
String? groupImage;
String? location;
String? link;
String? description;
Data(
{this.id,
this.title,
this.backgroundImage,
this.groupImage,
this.location,
this.link,
this.description});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
title = json['title'];
backgroundImage = json['background_image'];
groupImage = json['group_image'];
location = json['location'];
link = json['link'];
description = json['description'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['title'] = this.title;
data['background_image'] = this.backgroundImage;
data['group_image'] = this.groupImage;
data['location'] = this.location;
data['link'] = this.link;
data['description'] = this.description;
return data;
}
}

View File

@@ -0,0 +1,54 @@
class GetIndividualactivityModel {
String? status;
int? statusCode;
String? message;
List<Data>? data;
GetIndividualactivityModel(
{this.status, this.statusCode, this.message, this.data});
GetIndividualactivityModel.fromJson(Map<String, dynamic> json) {
status = json['status'];
statusCode = json['status_code'];
message = json['message'];
if (json['data'] != null) {
data = <Data>[];
json['data'].forEach((v) {
data!.add(new Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['status'] = this.status;
data['status_code'] = this.statusCode;
data['message'] = this.message;
if (this.data != null) {
data['data'] = this.data!.map((v) => v.toJson()).toList();
}
return data;
}
}
class Data {
int? id;
String? name;
String? image;
Data({this.id, this.name, this.image});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
image = json['image'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['image'] = this.image;
return data;
}
}

View File

@@ -1,15 +1,22 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:glassmorphism/glassmorphism.dart';
import 'package:regroup/Common/CommonDropDown.dart';
import 'package:regroup/Common/base_manager.dart';
import 'package:regroup/Utils/Common/CommonDropdown.dart';
import 'package:regroup/Utils/Common/CustomNextButton.dart';
import 'package:regroup/Utils/Common/CustomTextformfield.dart';
import 'package:regroup/Utils/Common/blureffect.dart';
import 'package:regroup/Utils/Common/sized_box.dart';
import 'package:regroup/Utils/dialogs.dart';
import 'package:regroup/Utils/texts.dart';
import 'package:regroup/onboarding/Signup/view_model/getmethod.dart';
import 'package:regroup/onboarding/Signup/view_model/postmethod.dart';
import 'package:regroup/resources/routes/route_name.dart';
import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart';
class SelectIndividualActivity extends StatefulWidget {
const SelectIndividualActivity({super.key});
@@ -21,351 +28,431 @@ class SelectIndividualActivity extends StatefulWidget {
class _SelectIndividualActivityState extends State<SelectIndividualActivity> {
final List<int> _selectedIndices = [];
TextEditingController otheractivitycontroller = TextEditingController();
void _onContainerTap(int index) {
// to select only two containers
// void _onContainerTap(int index) {
// setState(() {
// if (_selectedIndices.contains(index)) {
// _selectedIndices.remove(index);
// } else {
// if (_selectedIndices.length < 2) {
// _selectedIndices.add(index);
// } else {
// _selectedIndices[1] = index;
// }
// }
// });
// }
void _onContainerTap(int id) {
setState(() {
if (_selectedIndices.contains(index)) {
_selectedIndices.remove(index);
if (_selectedIndices.contains(id)) {
_selectedIndices.remove(id);
} else {
if (_selectedIndices.length < 2) {
_selectedIndices.add(index);
} else {
_selectedIndices[1] = index;
}
_selectedIndices.add(id);
}
});
}
Color _getGradientColor(int index) {
if (_selectedIndices.isEmpty) {
return Colors.transparent;
} else if (_selectedIndices.length == 1 &&
_selectedIndices.contains(index)) {
return Color(0XFFD90B2E);
} else if (_selectedIndices.length == 2) {
if (_selectedIndices[0] == index) {
return Color(0XFFD90B2E);
} else if (_selectedIndices[1] == index) {
return Color(0xFF009DAB);
}
// to give two different colors for selectedd two containers
// Color _getGradientColor(int index) {
// if (_selectedIndices.isEmpty) {
// return Colors.transparent;
// } else if (_selectedIndices.length == 1 &&
// _selectedIndices.contains(index)) {
// return Color(0XFFD90B2E);
// } else if (_selectedIndices.length == 2) {
// if (_selectedIndices[0] == index) {
// return Color(0XFFD90B2E);
// } else if (_selectedIndices[1] == index) {
// return Color(0xFF009DAB);
// }
// }
// return Colors.transparent;
// }
Color _getGradientColor(int id) {
if (_selectedIndices.contains(id)) {
return Color(0XFFD90B2E); // Selected color
}
return Colors.transparent; // Default color
}
Uploadata() async {
utils.loader();
String selectedIndicesString = '[${_selectedIndices.join(',')}]';
print('Selected Indices: $selectedIndicesString');
Map<String, dynamic> updata = {
"manage_interest_xid": selectedIndicesString,
"other_interest": otheractivitycontroller.text,
};
print('Payload: $updata');
final data = await Onboard().PostIndividualActivity(updata);
if (data.status == ResponseStatus.SUCCESS) {
Get.back();
print("Activities selected");
Get.toNamed(RouteName.individualgroupstep3);
return utils.showToast(data.message);
} else {
Get.back();
print("Not done");
return utils.showToast(data.message);
}
return Colors.transparent;
}
@override
Widget build(BuildContext context) {
return Scaffold(
return GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: Scaffold(
backgroundColor: Color.fromARGB(255, 18, 32, 47),
body: Stack(
children: [
Positioned(top: 220, left: -30, child: CommonBlurLeftSecond()),
Positioned(top: 450, right: -30, child: CommonBlurRightSecond()),
Positioned(top: 530, left: -30, child: CommonBlurLeftBlue()),
GlassmorphicContainer(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
borderRadius: 2,
blur: 6,
alignment: Alignment.bottomLeft,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
bottomNavigationBar: Padding(
padding: const EdgeInsets.only(bottom: 10, left: 16, right: 16),
child: CustomButton(
text: "Continue",
onPressed: () {
if (_selectedIndices.isEmpty &&
otheractivitycontroller.text.isEmpty) {
utils.showToast('Please select activity');
} else {
print(_selectedIndices.toString());
// String selectedIndicesString =
// _selectedIndices.join(',');
// print(
// 'Selected Indices: [$selectedIndicesString]');
Uploadata();
}
// Get.toNamed(
// RouteName.individualgroupstep3);
}),
),
body: FutureBuilder(
future: Getonboard().getIndividualactivity(),
builder: (ctx, snapshot) {
if (snapshot.data == null) {
return const Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [Center(child: CircularProgressIndicator())],
);
}
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(
child: Text(
'${snapshot.error} occured',
style: TextStyle(fontSize: 18.spMin),
),
);
}
}
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
],
),
borderGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
Color(0XFF222935).withOpacity(0.60),
return Stack(
children: [
Positioned(top: 220, left: -30, child: CommonBlurLeftSecond()),
Positioned(
top: 450, right: -30, child: CommonBlurRightSecond()),
Positioned(top: 530, left: -30, child: CommonBlurLeftBlue()),
GlassmorphicContainer(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
borderRadius: 2,
blur: 6,
alignment: Alignment.bottomLeft,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
],
),
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 50.h),
child: Expanded(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: Alignment.topRight,
child: GestureDetector(
onTap: () {
Get.toNamed(RouteName.communitycommitscreen);
},
child: Text(
'Skip',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w400,
decoration: TextDecoration.underline,
decorationColor: Colors.white),
),
),
),
sizedBoxHeight(30.h),
Align(
alignment: Alignment.center,
child: text16400white('Step 2 of 4')),
sizedBoxHeight(20.h),
Container(
width: double.infinity,
height: 25.h,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1, color: Color(0xFF434A53)),
borderRadius: BorderRadius.circular(30),
),
),
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 8.w, vertical: 2.h),
child: Row(
children: [
Container(
width: 120.w,
height: 15.h,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: Alignment(0.98, -0.21),
end: Alignment(-0.98, 0.21),
colors: [
Color(0xA5D90B2E),
Color(0x42D90B2E)
],
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
width: 15,
height: 15,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: Alignment(0.98, -0.21),
end: Alignment(-0.98, 0.21),
colors: [
Color(0xFFD90B2E),
Color(0x60D90B2E)
],
),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(30),
),
),
)
],
))
],
),
),
),
sizedBoxHeight(40.h),
Center(
child: _selectedIndices.isEmpty
? text20400white('What is your main activity ?')
: text20400white('What else do you do?')),
sizedBoxHeight(10.w),
Center(
child: Container(
width: 154.w,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1,
strokeAlign: BorderSide.strokeAlignCenter,
color: Color(0xFF858585),
),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
],
),
borderGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
],
),
child: Padding(
padding:
EdgeInsets.symmetric(horizontal: 16.w, vertical: 0.h),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: Alignment.topRight,
child: GestureDetector(
onTap: () {
Get.toNamed(RouteName.communitycommitscreen);
},
child: Text(
'Skip',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w400,
decoration: TextDecoration.underline,
decorationColor: Colors.white),
),
),
),
),
sizedBoxHeight(30.h),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ActivityContainer(
index: 0,
titleString: 'Rowing',
image: 'assets/images/svg/individualact1.svg',
isSelected: _selectedIndices.contains(0),
gradientColor: _getGradientColor(0),
onTap: _onContainerTap,
),
ActivityContainer(
index: 1,
titleString: 'Badminton',
image: 'assets/images/svg/badminton.svg',
isSelected: _selectedIndices.contains(1),
gradientColor: _getGradientColor(1),
onTap: _onContainerTap,
),
ActivityContainer(
index: 2,
titleString: 'Cycling',
image: 'assets/images/svg/individualact2.svg',
isSelected: _selectedIndices.contains(2),
gradientColor: _getGradientColor(2),
onTap: _onContainerTap,
),
],
sizedBoxHeight(30.h),
Align(
alignment: Alignment.center,
child: text16400white('Step 1 of 3')),
sizedBoxHeight(20.h),
Container(
width: double.infinity,
height: 25.h,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1, color: Color(0xFF434A53)),
borderRadius: BorderRadius.circular(30),
),
),
SizedBox(height: 20.h),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ActivityContainer(
index: 3,
titleString: 'Football',
image: 'assets/images/svg/individualact7.svg',
isSelected: _selectedIndices.contains(3),
gradientColor: _getGradientColor(3),
onTap: _onContainerTap,
),
ActivityContainer(
index: 4,
titleString: 'Weightlifting',
image: 'assets/images/svg/weightlifting.svg',
isSelected: _selectedIndices.contains(4),
gradientColor: _getGradientColor(4),
onTap: _onContainerTap,
),
ActivityContainer(
index: 5,
titleString: 'Running',
image: 'assets/images/svg/individualact3.svg',
isSelected: _selectedIndices.contains(5),
gradientColor: _getGradientColor(5),
onTap: _onContainerTap,
),
],
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 8.w, vertical: 2.h),
child: Row(
children: [
Container(
width: 120.w,
height: 15.h,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: Alignment(0.98, -0.21),
end: Alignment(-0.98, 0.21),
colors: [
Color(0xA5D90B2E),
Color(0x42D90B2E)
],
),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(30),
),
),
child: Row(
mainAxisAlignment:
MainAxisAlignment.end,
children: [
Container(
width: 15,
height: 15,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: Alignment(0.98, -0.21),
end: Alignment(-0.98, 0.21),
colors: [
Color(0xFFD90B2E),
Color(0x60D90B2E)
],
),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(30),
),
),
)
],
))
],
),
),
SizedBox(height: 20.h),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ActivityContainer(
index: 6,
titleString: 'Social',
image: 'assets/images/svg/individualact7.svg',
isSelected: _selectedIndices.contains(6),
gradientColor: _getGradientColor(6),
onTap: _onContainerTap,
),
SizedBox(width: 20.w),
ActivityContainer(
index: 7,
titleString: 'Special Interest (Societies)',
image:
'assets/images/svg/special interest.svg',
isSelected: _selectedIndices.contains(7),
gradientColor: _getGradientColor(7),
onTap: _onContainerTap,
),
],
),
],
),
sizedBoxHeight(30.h),
text20400FCFCFC("Select other activity"),
sizedBoxHeight(25.h),
CustomDropDownRadio(
header: "",
title: "",
listData: [
"American football",
"Archery",
"Athletics",
"Baseball",
"Basketball",
"Boxing",
"Canoeing",
"Clay pigeon shooting",
"Climbing",
"Combat sports",
"Cricket",
"Dodgeball",
"Equestrian",
"Fencing",
"Gaelic football",
"Golf",
"Gymnastics",
"Handball",
"Hockey",
"Lacrosse",
"Modern biathlon and pentathlon",
"Netball",
"Orienteering",
"Pool and snooker",
"Powerlifting",
"Rifle",
"Rugby league",
"Rugby union",
"Sailing",
"Snowsports",
"Squash",
"Surfing",
"Swimming",
"Softball",
"Table tennis",
"Tennis",
"Touch rugby",
"Trampoline",
"Triathlon",
"Ultimate frisbee",
"Volleyball",
"Water polo",
"Windsurfing"
],
onItemSelected: (p0) {},
leadingImage: SizedBox()),
// Spacer(flex: 1),
sizedBoxHeight(35.h),
CustomButton(
text: "Continue",
onPressed: () {
Get.toNamed(RouteName.individualgroupstep3);
})
],
),
sizedBoxHeight(40.h),
indiactivityobj!.data == null ||
indiactivityobj!.data!.isEmpty
? _buildNoDataBody(context)
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(
child: _selectedIndices.isEmpty
? text20400white(
'What is your main activity ?')
: text20400white(
'What else do you do?')),
sizedBoxHeight(10.w),
Center(
child: Container(
width: 154.w,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1,
strokeAlign:
BorderSide.strokeAlignCenter,
color: Color(0xFF858585),
),
),
),
),
),
sizedBoxHeight(30.h),
GridView.builder(
physics: ScrollPhysics(),
shrinkWrap: true,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount:
3, // Number of items in each row
crossAxisSpacing: 12
.w, // Horizontal spacing between items
mainAxisSpacing: 12
.h, // Vertical spacing between items
),
itemCount: indiactivityobj!.data!.length,
itemBuilder: (context, index) {
return ActivityContainer(
index:
indiactivityobj!.data![index].id!,
titleString: indiactivityobj!
.data![index].name!,
image: indiactivityobj!
.data![index].image,
// 'assets/images/svg/individualact7.svg',
isSelected: _selectedIndices.contains(
indiactivityobj!
.data![index].id!),
gradientColor: _getGradientColor(
indiactivityobj!
.data![index].id!),
onTap: _onContainerTap,
);
},
),
sizedBoxHeight(30.h),
text20400FCFCFC("Add other activity"),
sizedBoxHeight(25.h),
CustomTextFormField(
textEditingController:
otheractivitycontroller,
texttype: TextInputType.text,
hintText: "Enter other activity",
// leadingIcon:
// // const Icon(Icons.mail_outline),
// Image.asset(
// width: 22.w,
// height: 17.h,
// 'assets/images/png/user.png',
// ),
// validatorText: "Enter your full name",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your full name ';
}
return null;
},
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
FilteringTextInputFormatter.allow(
RegExp('[a-zA-Z ]'))
],
),
// CustomDropDownRadio(
// header: "",
// title: "",
// listData: [
// "American football",
// "Archery",
// "Athletics",
// "Baseball",
// "Basketball",
// "Boxing",
// "Canoeing",
// "Clay pigeon shooting",
// "Climbing",
// "Combat sports",
// "Cricket",
// "Dodgeball",
// "Equestrian",
// "Fencing",
// "Gaelic football",
// "Golf",
// "Gymnastics",
// "Handball",
// "Hockey",
// "Lacrosse",
// "Modern biathlon and pentathlon",
// "Netball",
// "Orienteering",
// "Pool and snooker",
// "Powerlifting",
// "Rifle",
// "Rugby league",
// "Rugby union",
// "Sailing",
// "Snowsports",
// "Squash",
// "Surfing",
// "Swimming",
// "Softball",
// "Table tennis",
// "Tennis",
// "Touch rugby",
// "Trampoline",
// "Triathlon",
// "Ultimate frisbee",
// "Volleyball",
// "Water polo",
// "Windsurfing"
// ],
// onItemSelected: (p0) {},
// leadingImage: SizedBox()),
// // Spacer(flex: 1),
sizedBoxHeight(35.h),
],
)
],
),
),
),
),
),
)
],
));
)
],
);
},
),
//
),
);
}
Widget _buildNoDataBody(context) {
return const Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [Text("No Data Found")],
);
}
}
class ActivityContainer extends StatelessWidget {
final int index;
final String titleString;
final String image;
final String? image;
final bool isSelected;
final Color gradientColor;
final Function(int) onTap;
@@ -412,12 +499,31 @@ class ActivityContainer extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SvgPicture.asset(
image,
width: 50.w,
height: 50.h,
),
SizedBox(height: 10.h),
// image.isEmpty
// ? SvgPicture.asset(
// "assets/images/svg/individualact7.svg",
// width: 50.w,
// height: 50.h,
// )
// : Image.network(image),
image == null || image!.isEmpty
? Image.asset(
'assets/images/png/redregroup.png',
color: Colors.white,
width: 50.w,
height: 50.h,
)
// SvgPicture.asset(
// "assets/images/svg/individualact7.svg",
// width: 50.w,
// height: 50.h,
// )
: Image.network(
image!,
width: 50.w,
height: 50.h,
),
Spacer(flex: 3),
SizedBox(
child: Text(
titleString,

View File

@@ -1,14 +1,20 @@
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:glassmorphism/glassmorphism.dart';
import 'package:regroup/Common/base_manager.dart';
import 'package:regroup/Utils/Common/CustomNextButton.dart';
import 'package:regroup/Utils/Common/CustomTextformfield.dart';
import 'package:regroup/Utils/Common/blureffect.dart';
import 'package:regroup/Utils/Common/sized_box.dart';
import 'package:regroup/Utils/dialogs.dart';
import 'package:regroup/Utils/texts.dart';
import 'package:regroup/onboarding/Signup/Model/Onboarding/Individual/GroupModel.dart';
import 'package:regroup/onboarding/Signup/view_model/getmethod.dart';
import 'package:regroup/onboarding/Signup/view_model/postmethod.dart';
import 'package:regroup/resources/routes/route_name.dart';
import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart';
@@ -20,250 +26,371 @@ class SelectIndividualGroup extends StatefulWidget {
}
class _SelectIndividualGroupState extends State<SelectIndividualGroup> {
TextEditingController searchcontroller = TextEditingController();
// StreamController<BlogsModel> blogsController = StreamController();
StreamController<GrouplistModel> searchcontroller = StreamController();
@override
void initState() {
var updata = "";
Getonboard().getGroupsearch(updata, streamController: searchcontroller);
super.initState();
}
@override
void dispose() {
searchcontroller.close();
super.dispose();
}
final List<int> _selectedIndices = [];
void _onContainerTap(int id) {
setState(() {
if (_selectedIndices.contains(id)) {
_selectedIndices.remove(id);
} else {
_selectedIndices.add(id);
}
});
}
Uploadata() async {
utils.loader();
String selectedIndicesString = '[${_selectedIndices.join(',')}]';
print('Selected Indices: $selectedIndicesString');
Map<String, dynamic> updata = {
"manage_group_xid": selectedIndicesString,
};
print('Payload: $updata');
final data = await Onboard().postGroups(updata);
if (data.status == ResponseStatus.SUCCESS) {
Get.back();
print("groups selected");
Get.toNamed(RouteName.individualcommunitystep4);
return utils.showToast(data.message);
} else {
Get.back();
print("Not done");
return utils.showToast(data.message);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color.fromARGB(255, 18, 32, 47),
body: Stack(
children: [
Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()),
Positioned(top: 400, right: -30, child: CommonBlurRightSecond()),
Positioned(top: 630, left: -30, child: CommonBlurLeftBlue()),
SingleChildScrollView(
child: GlassmorphicContainer(
width: MediaQuery.of(context).size.width,
height:
// 500.h,
MediaQuery.of(context).size.height,
borderRadius: 2,
blur: 6,
alignment: Alignment.bottomLeft,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
return GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: Scaffold(
backgroundColor: Color.fromARGB(255, 18, 32, 47),
bottomNavigationBar: Padding(
padding: const EdgeInsets.only(bottom: 10, left: 16, right: 16),
child: CustomButton(
text: "Continue",
onPressed: () {
// Get.toNamed(RouteName.individualcommunitystep4);
if (_selectedIndices.isEmpty) {
utils.showToast('Please select activity');
} else {
print(_selectedIndices.toString());
// String selectedIndicesString =
// _selectedIndices.join(',');
// print(
// 'Selected Indices: [$selectedIndicesString]');
Uploadata();
}
},
),
),
body: Stack(
children: [
Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()),
Positioned(top: 400, right: -30, child: CommonBlurRightSecond()),
Positioned(top: 630, left: -30, child: CommonBlurLeftBlue()),
SingleChildScrollView(
child: GlassmorphicContainer(
width: MediaQuery.of(context).size.width,
height:
// 500.h,
MediaQuery.of(context).size.height,
borderRadius: 2,
blur: 6,
alignment: Alignment.bottomLeft,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
],
),
borderGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
Color(0XFF222935).withOpacity(0.60),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
],
),
borderGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
],
),
child: Padding(
padding:
EdgeInsets.symmetric(horizontal: 16.w, vertical: 50.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: Alignment.topRight,
child: GestureDetector(
onTap: () {
Get.toNamed(RouteName.communitycommitscreen);
},
child: Text(
'Skip',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w400,
decoration: TextDecoration.underline,
decorationColor: Colors.white),
Color(0XFF222935).withOpacity(0.60),
],
),
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w, vertical: 50.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: Alignment.topRight,
child: GestureDetector(
onTap: () {
Get.toNamed(RouteName.communitycommitscreen);
},
child: Text(
'Skip',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w400,
decoration: TextDecoration.underline,
decorationColor: Colors.white),
),
),
),
),
sizedBoxHeight(30.h),
Align(
alignment: Alignment.center,
child: text16400white('Step 3 of 4')),
sizedBoxHeight(20.h),
Container(
width: double.infinity,
height: 25.h,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1, color: Color(0xFF434A53)),
borderRadius: BorderRadius.circular(30),
),
),
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 8.w, vertical: 2.h),
child: Row(
children: [
Container(
width: 240.w,
height: 15.h,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: Alignment(0.98, -0.21),
end: Alignment(-0.98, 0.21),
colors: [
Color(0xA5D90B2E),
Color(0x42D90B2E)
],
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
width: 15,
height: 15,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: Alignment(0.98, -0.21),
end: Alignment(-0.98, 0.21),
colors: [
Color(0xFFD90B2E),
Color(0x60D90B2E)
],
),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(30),
),
),
)
],
))
],
),
),
),
sizedBoxHeight(40.h),
Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
text20400white('Find your group'),
sizedBoxWidth(5.w),
Image.asset('assets/images/png/informationicon.png')
],
)),
sizedBoxHeight(10.w),
Center(
child: Container(
width: 108.w,
sizedBoxHeight(30.h),
Align(
alignment: Alignment.center,
child: text16400white('Step 2 of 3')),
sizedBoxHeight(20.h),
Container(
width: double.infinity,
height: 25.h,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1,
strokeAlign: BorderSide.strokeAlignCenter,
color: Color(0xFF858585),
width: 1, color: Color(0xFF434A53)),
borderRadius: BorderRadius.circular(30),
),
),
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 8.w, vertical: 2.h),
child: Row(
children: [
Container(
width: 216.w,
height: 15.h,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: Alignment(0.98, -0.21),
end: Alignment(-0.98, 0.21),
colors: [
Color(0xA5D90B2E),
Color(0x42D90B2E)
],
),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(30),
),
),
child: Row(
mainAxisAlignment:
MainAxisAlignment.end,
children: [
Container(
width: 15,
height: 15,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: Alignment(0.98, -0.21),
end: Alignment(-0.98, 0.21),
colors: [
Color(0xFFD90B2E),
Color(0x60D90B2E)
],
),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(30),
),
),
)
],
))
],
),
),
),
sizedBoxHeight(40.h),
Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
text20400white('Find your group'),
sizedBoxWidth(5.w),
Image.asset(
'assets/images/png/informationicon.png')
],
)),
sizedBoxHeight(10.w),
Center(
child: Container(
width: 108.w,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1,
strokeAlign: BorderSide.strokeAlignCenter,
color: Color(0xFF858585),
),
),
),
),
),
),
sizedBoxHeight(30.h),
CustomTextFormField(
textEditingController: searchcontroller,
texttype: TextInputType.text,
hintText: "Search groups",
leadingIcon:
// const Icon(Icons.mail_outline),
// SvgPicture.asset(
// // width: 23.w,
// // height: 23.h,
// 'assets/images/svg/search.svg',
// ),
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: Icon(
Icons.search,
size: 35,
color: Colors.white,
sizedBoxHeight(30.h),
CustomTextFormField(
// textEditingController: searchcontroller,
texttype: TextInputType.text,
hintText: "Search groups",
leadingIcon:
// const Icon(Icons.mail_outline),
// SvgPicture.asset(
// // width: 23.w,
// // height: 23.h,
// 'assets/images/svg/search.svg',
// ),
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: Icon(
Icons.search,
size: 35,
color: Colors.white,
),
),
// validatorText: "Enter your full name",
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
],
onInput: (value) {
// Onboard().postGroupsearch({"search": value},
// streamController: searchcontroller);
// searchGroups(value!);
Getonboard().getGroupsearch(value,
streamController: searchcontroller);
},
),
// validatorText: "Enter your full name",
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
],
),
sizedBoxHeight(30.h),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GroupSelect(
titleString: 'Cambridge university Boat ..',
image: 'assets/images/png/groupindividual.png'),
GroupSelect(
titleString: 'Liverpool FC',
image:
'assets/images/png/groupindividual2.png'),
],
),
sizedBoxHeight(30.h),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GroupSelect(
titleString: 'Cambridge rugby Club',
image:
'assets/images/png/groupindividual3.png'),
GroupSelect(
titleString: 'Cambridge university Boat ..',
image: 'assets/images/png/groupindividual.png'),
],
),
Spacer(flex: 1),
CustomButton(
text: "Continue",
onPressed: () {
Get.toNamed(RouteName.individualcommunitystep4);
})
],
),
)),
),
],
));
sizedBoxHeight(30.h),
StreamBuilder<GrouplistModel>(
stream: searchcontroller.stream,
builder: (ctx, snapshot) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
// Display shimmer effect while waiting for data
return Center(
child: CircularProgressIndicator());
} else if (snapshot.hasError) {
// Handle error state
return Center(
child: Text(
'${snapshot.error} occurred',
style: TextStyle(fontSize: 18),
),
);
} else {
// Data has been loaded, show actual UI
return grouplistobj!.data!.isEmpty
? _buildNoDataBody(context)
: Expanded(
child: GridView.builder(
physics: ScrollPhysics(),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 12.0,
mainAxisSpacing: 12.0,
),
itemCount: grouplistobj!.data!.length,
itemBuilder: (context, index) {
return SizedBox(
height:
150.0, // Adjust this height according to your design
child: GroupSelect(
titleString: grouplistobj!
.data![index].title!,
image: grouplistobj
?.data?[index]
?.groupImage ??
'',
index: grouplistobj!
.data![index].id!,
isSelected: _selectedIndices
.contains(grouplistobj!
.data![index].id!),
onTap: _onContainerTap,
),
);
},
),
);
}
},
),
],
),
)),
),
],
)),
);
}
Widget _buildNoDataBody(context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"No Data Found",
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontWeight: FontWeight.w600),
)
],
),
);
}
}
class GroupSelect extends StatefulWidget {
class GroupSelect extends StatelessWidget {
final String titleString;
final String image;
final String? image;
final int index;
final Function(int) onTap;
final bool isSelected;
GroupSelect({
Key? key,
required this.titleString,
required this.image,
required this.index,
required this.onTap,
required this.isSelected,
}) : super(key: key);
@override
State<GroupSelect> createState() => _GroupSelectState();
}
class _GroupSelectState extends State<GroupSelect> {
bool _text = false;
@override
Widget build(BuildContext context) {
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
@@ -271,24 +398,29 @@ class _GroupSelectState extends State<GroupSelect> {
width: 169,
height: 74,
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage(
// "https://via.placeholder.com/169x74"
widget.image),
fit: BoxFit.fill,
),
image: image == null || image!.isEmpty
? DecorationImage(
image: AssetImage("assets/images/png/groupindividual3.png"),
fit: BoxFit.fill,
)
: DecorationImage(
image: NetworkImage(image!),
fit: BoxFit.fill,
),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)),
),
),
sizedBoxHeight(15.h),
text12400white(widget.titleString),
sizedBoxHeight(15.h),
SizedBox(height: 15.0),
Text(
titleString,
style: TextStyle(
color: Colors.white,
fontSize: 12.0,
overflow: TextOverflow.ellipsis),
),
SizedBox(height: 15.0),
GestureDetector(
onTap: () {
setState(() {
_text = !_text;
});
},
onTap: () => onTap(index),
child: Container(
width: 169,
height: 23,
@@ -301,7 +433,11 @@ class _GroupSelectState extends State<GroupSelect> {
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_text ? text10400white('Regrouping') : text10400white('Join')
isSelected
? Text('Regrouping',
style: TextStyle(color: Colors.white, fontSize: 10.0))
: Text('Join',
style: TextStyle(color: Colors.white, fontSize: 10.0))
],
),
),

View File

@@ -1,13 +1,20 @@
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:glassmorphism/glassmorphism.dart';
import 'package:regroup/Common/base_manager.dart';
import 'package:regroup/Utils/Common/CustomNextButton.dart';
import 'package:regroup/Utils/Common/CustomTextformfield.dart';
import 'package:regroup/Utils/Common/blureffect.dart';
import 'package:regroup/Utils/Common/sized_box.dart';
import 'package:regroup/Utils/dialogs.dart';
import 'package:regroup/Utils/texts.dart';
import 'package:regroup/onboarding/Signup/Model/Onboarding/Individual/CommunitiesModel.dart';
import 'package:regroup/onboarding/Signup/view_model/getmethod.dart';
import 'package:regroup/onboarding/Signup/view_model/postmethod.dart';
import 'package:regroup/resources/routes/route_name.dart';
import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart';
@@ -20,58 +27,126 @@ class SelectIndividualCommunity extends StatefulWidget {
}
class _SelectIndividualCommunityState extends State<SelectIndividualCommunity> {
TextEditingController searchcontroller = TextEditingController();
// StreamController<BlogsModel> blogsController = StreamController();
StreamController<GetcommunitiesModel> searchcontroller = StreamController();
@override
void initState() {
var updata = "";
Getonboard().getCommunitysearch(updata, streamController: searchcontroller);
super.initState();
}
@override
void dispose() {
searchcontroller.close();
super.dispose();
}
final List<int> _selectedIndices = [];
void _onContainerTap(int id) {
setState(() {
if (_selectedIndices.contains(id)) {
_selectedIndices.remove(id);
} else {
_selectedIndices.add(id);
}
});
}
Uploadata() async {
utils.loader();
String selectedIndicesString = '[${_selectedIndices.join(',')}]';
print('Selected Indices: $selectedIndicesString');
Map<String, dynamic> updata = {
"manage_community_xid": selectedIndicesString,
};
print('Payload: $updata');
final data = await Onboard().postCommunities(updata);
if (data.status == ResponseStatus.SUCCESS) {
// Get.back();
print("groups selected");
Get.toNamed(RouteName.communitycommitscreen);
return utils.showToast(data.message);
} else {
Get.back();
print("Not done");
return utils.showToast(data.message);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color.fromARGB(255, 18, 32, 47),
body: Stack(
children: [
Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()),
Positioned(top: 400, right: -30, child: CommonBlurRightSecond()),
Positioned(top: 630, left: -30, child: CommonBlurLeftBlue()),
SingleChildScrollView(
child: GlassmorphicContainer(
width: MediaQuery.of(context).size.width,
height:
// 500.h,
MediaQuery.of(context).size.height,
borderRadius: 2,
blur: 6,
alignment: Alignment.bottomLeft,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
return GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: Scaffold(
backgroundColor: Color.fromARGB(255, 18, 32, 47),
bottomNavigationBar: Padding(
padding: const EdgeInsets.only(bottom: 10, left: 16, right: 16),
child: CustomButton(
text: "Continue",
onPressed: () {
// Get.toNamed(RouteName.individualcommunitystep4);
if (_selectedIndices.isEmpty) {
utils.showToast('Please select activity');
} else {
print(_selectedIndices.toString());
// String selectedIndicesString =
// _selectedIndices.join(',');
// print(
// 'Selected Indices: [$selectedIndicesString]');
Uploadata();
}
},
),
),
body: Stack(
children: [
Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()),
Positioned(top: 400, right: -30, child: CommonBlurRightSecond()),
Positioned(top: 630, left: -30, child: CommonBlurLeftBlue()),
SingleChildScrollView(
child: GlassmorphicContainer(
width: MediaQuery.of(context).size.width,
height:
// 500.h,
MediaQuery.of(context).size.height,
borderRadius: 2,
blur: 6,
alignment: Alignment.bottomLeft,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
],
),
borderGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
Color(0XFF222935).withOpacity(0.60),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
],
),
borderGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
],
),
child: Padding(
padding:
EdgeInsets.symmetric(horizontal: 16.w, vertical: 50.h),
child: SingleChildScrollView(
Color(0XFF222935).withOpacity(0.60),
],
),
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w, vertical: 50.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -96,7 +171,7 @@ class _SelectIndividualCommunityState extends State<SelectIndividualCommunity> {
sizedBoxHeight(30.h),
Align(
alignment: Alignment.center,
child: text16400white('Step 4 of 4')),
child: text16400white('Step 3 of 3')),
sizedBoxHeight(20.h),
Container(
width: double.infinity,
@@ -114,9 +189,8 @@ class _SelectIndividualCommunityState extends State<SelectIndividualCommunity> {
child: Row(
children: [
Expanded(
child: Container(
width: double.infinity,
child: Container(
// width: 216.w,
height: 15.h,
decoration: ShapeDecoration(
gradient: LinearGradient(
@@ -157,9 +231,7 @@ class _SelectIndividualCommunityState extends State<SelectIndividualCommunity> {
),
)
],
)),
),
)
)))
],
),
),
@@ -193,7 +265,6 @@ class _SelectIndividualCommunityState extends State<SelectIndividualCommunity> {
),
sizedBoxHeight(30.h),
CustomTextFormField(
textEditingController: searchcontroller,
texttype: TextInputType.text,
hintText: "Search community",
leadingIcon:
@@ -216,75 +287,116 @@ class _SelectIndividualCommunityState extends State<SelectIndividualCommunity> {
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
],
onInput: (value) {
// Onboard().postGroupsearch({"search": value},
// streamController: searchcontroller);
// searchGroups(value!);
Getonboard().getCommunitysearch(value,
streamController: searchcontroller);
},
),
sizedBoxHeight(30.h),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
CommunitySelect(
titleString: 'Liverpool FC ',
image:
'assets/images/png/groupindividual2.png'),
CommunitySelect(
titleString: 'Cambridge rugby Club',
image: 'assets/images/png/community2.png'),
CommunitySelect(
titleString: 'Cambridge rugby Club',
image: 'assets/images/png/community2.png'),
],
StreamBuilder<GetcommunitiesModel>(
stream: searchcontroller.stream,
builder: (ctx, snapshot) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
// Display shimmer effect while waiting for data
return Center(
child: CircularProgressIndicator());
} else if (snapshot.hasError) {
// Handle error state
return Center(
child: Text(
'${snapshot.error} occurred',
style: TextStyle(fontSize: 18),
),
);
} else {
// Data has been loaded, show actual UI
return communitylistobj!.data!.isEmpty
? _buildNoDataBody(context)
: Expanded(
child: GridView.builder(
physics: ScrollPhysics(),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 12.0,
mainAxisSpacing: 12.0,
),
itemCount:
communitylistobj!.data!.length,
itemBuilder: (context, index) {
return SizedBox(
height:
150.0, // Adjust this height according to your design
child: CommunitySelect(
titleString: communitylistobj!
.data![index]
.communityName!,
image: communitylistobj
?.data?[index]
?.communityProfilePhoto ??
'',
index: communitylistobj!
.data![index].id!,
isSelected: _selectedIndices
.contains(communitylistobj!
.data![index].id!),
onTap: _onContainerTap,
),
);
},
),
);
}
},
),
sizedBoxHeight(30.h),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
CommunitySelect(
titleString: 'The athletic town',
image:
'assets/images/png/groupindividual3.png'),
CommunitySelect(
titleString: 'Football Fever',
image:
'assets/images/png/groupindividual2.png'),
CommunitySelect(
titleString: 'Football Fever',
image:
'assets/images/png/groupindividual2.png'),
],
),
// Spacer(flex: 1),
sizedBoxHeight(40.h),
CustomButton(
text: "Continue",
onPressed: () {
Get.toNamed(RouteName.communitycommitscreen);
})
],
),
),
)),
),
],
));
)),
),
],
)),
);
}
Widget _buildNoDataBody(context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"No Data Found",
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontWeight: FontWeight.w600),
)
],
),
);
}
}
class CommunitySelect extends StatefulWidget {
class CommunitySelect extends StatelessWidget {
final String titleString;
final String image;
final String? image;
final int index;
final Function(int) onTap;
final bool isSelected;
CommunitySelect({
Key? key,
required this.titleString,
required this.image,
required this.index,
required this.onTap,
required this.isSelected,
}) : super(key: key);
@override
State<CommunitySelect> createState() => _CommunitySelectState();
}
class _CommunitySelectState extends State<CommunitySelect> {
bool _text = false;
@override
Widget build(BuildContext context) {
return Column(crossAxisAlignment: CrossAxisAlignment.center, children: [
@@ -292,29 +404,34 @@ class _CommunitySelectState extends State<CommunitySelect> {
width: 73.w,
height: 73.h,
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage(
// "https://via.placeholder.com/169x74"
widget.image),
fit: BoxFit.fill,
),
image: image == null || image!.isEmpty
? DecorationImage(
image: AssetImage("assets/images/png/groupindividual2.png"),
fit: BoxFit.fill,
)
: DecorationImage(
image: NetworkImage(image!),
fit: BoxFit.fill,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(100),
),
),
),
sizedBoxHeight(15.h),
SizedBox(width: 94.w, child: text12400white(widget.titleString)),
Text(
titleString,
style: TextStyle(
color: Colors.white,
fontSize: 12.0,
overflow: TextOverflow.ellipsis),
),
sizedBoxHeight(15.h),
GestureDetector(
onTap: () {
setState(() {
_text = !_text;
});
},
onTap: () => onTap(index),
child: Container(
width: 100.w,
height: 23.h,
width: 169,
height: 23,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(width: 1, color: Color(0xFFFF002B)),
@@ -324,7 +441,11 @@ class _CommunitySelectState extends State<CommunitySelect> {
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_text ? text10400white('Regrouping') : text10400white('Join')
isSelected
? Text('Regrouping',
style: TextStyle(color: Colors.white, fontSize: 10.0))
: Text('Join',
style: TextStyle(color: Colors.white, fontSize: 10.0))
],
),
),

View File

@@ -1,11 +1,14 @@
import 'dart:developer';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:get/get.dart' hide MultipartFile, FormData;
import 'package:glassmorphism/glassmorphism.dart';
import 'package:regroup/Common/CommonWidget.dart';
import 'package:regroup/Common/base_manager.dart';
import 'package:regroup/Common/controller/profileimagecontroller.dart';
import 'package:regroup/Utils/Common/CommonDropdown.dart';
import 'package:regroup/Utils/Common/CustomNextButton.dart';
@@ -15,8 +18,10 @@ import 'package:regroup/Utils/Common/blureffect.dart';
import 'package:regroup/Utils/Common/sized_box.dart';
import 'package:regroup/Utils/dialogs.dart';
import 'package:regroup/Utils/texts.dart';
import 'package:regroup/onboarding/Signup/view_model/postmethod.dart';
import 'package:regroup/resources/routes/route_name.dart';
import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart';
import 'package:path/path.dart' as path;
class TellusaboutIndividual extends StatefulWidget {
const TellusaboutIndividual({super.key});
@@ -29,6 +34,8 @@ class _TellusaboutIndividualState extends State<TellusaboutIndividual> {
TextEditingController fullNameController = TextEditingController();
TextEditingController userNameController = TextEditingController();
TextEditingController datecontroller = TextEditingController();
TextEditingController locationcontroller = TextEditingController();
DateTime? _selectedDate;
final photographController = TextEditingController();
@@ -73,27 +80,35 @@ class _TellusaboutIndividualState extends State<TellusaboutIndividual> {
);
if (pickedDate != null) {
// if (pickedDate.isBefore(eighteenYearsAgo)) {
setState(() {
// selectedDate.value = pickedDate;
_selectedDate = pickedDate;
datecontroller.text =
"${_selectedDate!.day.toString().padLeft(2, '0')}-${_selectedDate!.month.toString().padLeft(2, '0')}-${_selectedDate!.year.toString().padLeft(2, '0')}";
"${_selectedDate!.year.toString().padLeft(2, '0')}-${_selectedDate!.month.toString().padLeft(2, '0')}-${_selectedDate!.day.toString().padLeft(2, '0')}";
});
// }
// else {
// // } else {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: const Text("Age Restriction"),
// content: const Text("Sorry, you must be above 18 years age"),
// backgroundColor: Colors.black,
// title: const Text(
// "Age Restriction",
// style: TextStyle(color: Colors.white),
// ),
// content: const Text(
// "Sorry, you must be above 18 years age",
// style: TextStyle(color: Colors.white),
// ),
// actions: [
// TextButton(
// onPressed: () {
// Navigator.of(context).pop();
// },
// child: const Text("OK"),
// child: const Text(
// "OK",
// style: TextStyle(color: Colors.white),
// ),
// ),
// ],
// );
@@ -113,122 +128,142 @@ class _TellusaboutIndividualState extends State<TellusaboutIndividual> {
});
}
void TellusUploadData() async {
utils.loader();
var imageFile;
if (editProfileImage.profilePicPath.value.isNotEmpty) {
imageFile = await MultipartFile.fromFile(
editProfileImage.profilePicPath.value,
filename: path.basename(editProfileImage.profilePicPath.value),
);
}
// else {
// imageFile = await Helper.assetImageToMultipartFile(
// "assets/images/png/camera.png", "profile");
// }
FormData formData = FormData.fromMap({
"full_name": fullNameController.text,
"username": userNameController.text,
"date_of_birth": datecontroller.text,
"gender": _selectedgendertype,
'profile_photo':
// editProfileImage.profilePicPath.value.isNotEmpty ?
imageFile,
// : null,
'location': locationcontroller.text,
});
print("formData is $formData");
log(formData.toString());
final data = await Onboard().PosttellusIndividual(formData);
if (data.status == ResponseStatus.SUCCESS) {
utils.showToast("tell us done Successfully!");
Get.back();
// Get.toNamed(RouteName.individualprofilestep1);
Get.toNamed(RouteName.individualactivitystep2);
} else {
Get.back();
return utils.showToast(data.message);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color.fromARGB(255, 18, 32, 47),
body: Stack(
children: [
Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()),
Positioned(top: 310, right: -30, child: CommonBlurRightSecond()),
Positioned(top: 510, left: -30, child: CommonBlurLeftBlue()),
GlassmorphicContainer(
width: MediaQuery.of(context).size.width,
height:
// 500.h,
MediaQuery.of(context).size.height,
borderRadius: 2,
blur: 6,
alignment: Alignment.bottomLeft,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
return GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: Scaffold(
backgroundColor: Color.fromARGB(255, 18, 32, 47),
body: Stack(
children: [
Positioned(top: 70, left: -30, child: CommonBlurLeftSecond()),
Positioned(top: 310, right: -30, child: CommonBlurRightSecond()),
Positioned(top: 510, left: -30, child: CommonBlurLeftBlue()),
GlassmorphicContainer(
width: MediaQuery.of(context).size.width,
height:
// 500.h,
MediaQuery.of(context).size.height,
borderRadius: 2,
blur: 6,
alignment: Alignment.bottomLeft,
border: 2,
linearGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
],
),
borderGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
Color(0XFF222935).withOpacity(0.60),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
],
),
borderGradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
// Color.fromARGB(255, 18, 32, 47).withOpacity(0.50),
Color(0XFF222935).withOpacity(0.60),
Color(0XFF222935).withOpacity(0.60),
],
),
child: ListView(physics: ScrollPhysics(), children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// const Spacer(flex: 1),
sizedBoxHeight(50.h),
Center(child: text20400white('Tell us about yourself')),
sizedBoxHeight(10.w),
Center(
child: Container(
width: 154,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1,
strokeAlign: BorderSide.strokeAlignCenter,
color: Color(0xFF858585),
),
),
)),
),
sizedBoxHeight(20.h),
GestureDetector(
onTap: () {
ImageUploadBottomSheet().showModal(
context,
false,
(result) {
print("File path is $result");
editProfileImage.profilePicPath.value = result;
var filenameresult = extractFileName(result);
print("File name is $filenameresult");
photographController.text = filenameresult;
},
);
},
child: Center(
child: Column(
children: [
Stack(
alignment: Alignment.center,
children: [
// Outer circle
Container(
width: 139.w,
height: 139.h,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.transparent,
border: Border.all(
color: Color(0XFFD90B2E)
.withOpacity(0.50),
width: 2),
Color(0XFF222935).withOpacity(0.60),
],
),
child: ListView(physics: ScrollPhysics(), children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// const Spacer(flex: 1),
sizedBoxHeight(50.h),
Center(
child: text20400white('Tell us about yourself')),
sizedBoxHeight(10.w),
Center(
child: Container(
width: 154,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 1,
strokeAlign: BorderSide.strokeAlignCenter,
color: Color(0xFF858585),
),
),
// Middle circle
Container(
width: 119.w,
height: 119.h,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.transparent,
border: Border.all(
color: Color(0XFFD90B2E)
.withOpacity(0.50),
width: 2),
),
),
// Inner circle
Container(
)),
),
sizedBoxHeight(20.h),
GestureDetector(
onTap: () {
ImageUploadBottomSheet().showModal(
context,
false,
(result) {
print("File path is $result");
editProfileImage.profilePicPath.value =
result;
var filenameresult = extractFileName(result);
print("File name is $filenameresult");
photographController.text = filenameresult;
},
);
},
child: Center(
child: Column(
children: [
Stack(
alignment: Alignment.center,
children: [
// Outer circle
Container(
width: 139.w,
height: 139.h,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.transparent,
@@ -237,194 +272,241 @@ class _TellusaboutIndividualState extends State<TellusaboutIndividual> {
.withOpacity(0.50),
width: 2),
),
child: Obx(() =>
// editProfileImage
// .profilePicPath.value !=
// ''
// ?
editProfileImage.profilePicPath
.value !=
''
? ClipOval(
child: SizedBox.fromSize(
size: Size.fromRadius(
50.r),
child: Image(
image: FileImage(
File(
editProfileImage
.profilePicPath
.value,
),
// Middle circle
Container(
width: 119.w,
height: 119.h,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.transparent,
border: Border.all(
color: Color(0XFFD90B2E)
.withOpacity(0.50),
width: 2),
),
),
// Inner circle
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.transparent,
border: Border.all(
color: Color(0XFFD90B2E)
.withOpacity(0.50),
width: 2),
),
child: Obx(() =>
// editProfileImage
// .profilePicPath.value !=
// ''
// ?
editProfileImage.profilePicPath
.value !=
''
? ClipOval(
child:
SizedBox.fromSize(
size: Size.fromRadius(
50.r),
child: Image(
image: FileImage(
File(
editProfileImage
.profilePicPath
.value,
),
),
fit: BoxFit.cover,
width: 200.w,
height: 200.h,
),
fit: BoxFit.cover,
width: 200.w,
height: 200.h,
),
),
)
: Image.asset(
"assets/images/png/camera.png")
// : Image.asset(
// "assets/images/png/camera.png")
)),
// Main button
],
),
const SizedBox(height: 9),
text16400white('Add profile picture')
],
)),
),
sizedBoxHeight(20.h),
text16400white('Full name'),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: fullNameController,
texttype: TextInputType.text,
hintText: "Enter your full name",
leadingIcon:
// const Icon(Icons.mail_outline),
Image.asset(
width: 22.w,
height: 17.h,
'assets/images/png/user.png',
)
: Image.asset(
"assets/images/png/camera.png")
// : Image.asset(
// "assets/images/png/camera.png")
)),
// Main button
],
),
const SizedBox(height: 9),
text16400white('Add profile picture')
],
)),
),
// validatorText: "Enter your full name",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your full name ';
}
return null;
},
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
FilteringTextInputFormatter.allow(
RegExp('[a-zA-Z ]'))
],
),
sizedBoxHeight(0.h),
text16400white('User name'),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: userNameController,
texttype: TextInputType.text,
hintText: "Enter your user name",
leadingIcon:
// const Icon(Icons.mail_outline),
Image.asset(
width: 22.w,
height: 17.h,
'assets/images/png/user.png',
),
// validatorText: "Enter your user name",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your user name ';
}
return null;
},
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
FilteringTextInputFormatter.allow(
RegExp('[a-zA-Z ]'))
],
),
sizedBoxHeight(0.h),
text16400white('Date of birth'),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: datecontroller,
readonly: true,
onTap: () {
_selectDate(context);
},
// texttype: TextInputType.text,
hintText: "Enter your date of birth",
leadingIcon:
// const Icon(Icons.mail_outline),
Image.asset(
width: 22.w,
height: 17.h,
'assets/images/png/dateimage.png',
),
// validatorText: "Enter date of birth",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your date of birth';
}
return null;
},
),
sizedBoxHeight(0.h),
text16400white('Gender'),
sizedBoxHeight(10.h),
CustomDropDownWidgetSignup(
header: 'Select gender',
title: '',
listData: _gender,
onItemSelected: _onItemSelected,
leadingImage:
Image.asset('assets/images/png/gendericon.png'),
),
sizedBoxHeight(20.h),
Row(
children: [
text16400white('Location'),
sizedBoxWidth(5.w),
Image.asset('assets/images/png/informationicon.png')
],
),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: userNameController,
texttype: TextInputType.text,
hintText: "Enter your location",
leadingIcon:
// const Icon(Icons.mail_outline),
Image.asset(
width: 22.w,
height: 17.h,
'assets/images/png/location.png',
),
// validatorText: "Enter your location",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your location ';
}
return null;
},
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
FilteringTextInputFormatter.allow(
RegExp('[a-zA-Z ]'))
],
),
sizedBoxHeight(20.h),
CustomButton(
text: "Continue",
onPressed: () {
if (_selectedgendertype.isNotEmpty) {
Get.toNamed(RouteName.individualprofilestep1);
// Get.to(() => BusinessPage());
} else {
// Handle case where no selection is made
utils.showToast('Please select an gender type');
sizedBoxHeight(20.h),
text16400white('Full name'),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: fullNameController,
texttype: TextInputType.text,
hintText: "Enter your full name",
leadingIcon:
// const Icon(Icons.mail_outline),
Image.asset(
width: 22.w,
height: 17.h,
'assets/images/png/user.png',
),
// validatorText: "Enter your full name",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your full name ';
}
}),
sizedBoxHeight(30.h),
// const Spacer(
// flex: 3,
// )
],
return null;
},
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
FilteringTextInputFormatter.allow(
RegExp('[a-zA-Z ]'))
],
),
sizedBoxHeight(10.h),
text16400white('User name'),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: userNameController,
texttype: TextInputType.text,
hintText: "Enter your user name",
leadingIcon:
// const Icon(Icons.mail_outline),
Image.asset(
width: 22.w,
height: 17.h,
'assets/images/png/user.png',
),
// validatorText: "Enter your user name",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your user name ';
}
return null;
},
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
FilteringTextInputFormatter.allow(
RegExp('[a-zA-Z ]'))
],
),
sizedBoxHeight(10.h),
text16400white('Date of birth'),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: datecontroller,
readonly: true,
onTap: () {
_selectDate(context);
},
// texttype: TextInputType.text,
hintText: "Enter your date of birth",
leadingIcon:
// const Icon(Icons.mail_outline),
Image.asset(
width: 22.w,
height: 17.h,
'assets/images/png/dateimage.png',
),
// validatorText: "Enter date of birth",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your date of birth';
}
return null;
},
),
sizedBoxHeight(10.h),
text16400white('Gender'),
sizedBoxHeight(10.h),
CustomDropDownWidgetSignup(
header: 'Select gender',
title: '',
listData: _gender,
onItemSelected: _onItemSelected,
leadingImage:
Image.asset('assets/images/png/gendericon.png'),
),
sizedBoxHeight(10.h),
Row(
children: [
text16400white('Location'),
sizedBoxWidth(5.w),
Image.asset(
'assets/images/png/informationicon.png')
],
),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: locationcontroller,
texttype: TextInputType.text,
hintText: "Enter your location",
leadingIcon:
// const Icon(Icons.mail_outline),
Image.asset(
width: 22.w,
height: 17.h,
'assets/images/png/location.png',
),
// validatorText: "Enter your location",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your location ';
}
return null;
},
inputFormatters: [
// LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter(),
FilteringTextInputFormatter.allow(
RegExp('[a-zA-Z ]'))
],
),
sizedBoxHeight(20.h),
CustomButton(
text: "Continue",
onPressed: () {
if (
// isValid!
// fullNameController.text.isBlank! &&
// userNameController.text.isBlank! &&
// datecontroller.text.isBlank! &&
// _selectedgendertype.isEmpty &&
// locationcontroller.text.isBlank! &&
// editProfileImage.profilePicPath.value ==
// ''
fullNameController.text.isBlank! ||
userNameController.text.isBlank! ||
datecontroller.text.isBlank! ||
_selectedgendertype.isEmpty ||
locationcontroller.text.isBlank! ||
editProfileImage.profilePicPath.value ==
'') {
utils.showToast('Please fill all fields');
} else {
TellusUploadData();
}
// if (_selectedgendertype.isNotEmpty) {
// Get.toNamed(RouteName.individualprofilestep1);
// // Get.to(() => BusinessPage());
// } else {
// // Handle case where no selection is made
// utils.showToast('Please select an gender type');
// }
}),
sizedBoxHeight(30.h),
// const Spacer(
// flex: 3,
// )
],
),
),
),
])),
],
));
])),
],
)),
);
}
}

View File

@@ -2,12 +2,14 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:regroup/Common/base_manager.dart';
import 'package:regroup/Utils/Common/CommonDropdown.dart';
import 'package:regroup/Utils/Common/CustomTextformfield.dart';
import 'package:regroup/Utils/Common/CustomNextButton.dart';
import 'package:regroup/Utils/Common/sized_box.dart';
import 'package:regroup/Utils/dialogs.dart';
import 'package:regroup/Utils/texts.dart';
import 'package:regroup/onboarding/Signup/view_model/postmethod.dart';
import 'package:regroup/resources/routes/route_name.dart';
import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart';
@@ -23,11 +25,18 @@ class _SignupScreenState extends State<SignupScreen> {
TextEditingController passwordController = TextEditingController();
TextEditingController confirmpasscontroller = TextEditingController();
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
List<String> _dropdownProductItems = [
'Individual',
'Business',
];
final Map<String, int> _accountTypeMap = {
'Individual': 1,
'Business': 2,
};
String _selectedAccountType = '';
void _onItemSelected(String value) {
@@ -36,363 +45,453 @@ class _SignupScreenState extends State<SignupScreen> {
});
}
void _Signincheck() async {
if (emailidcontroller.text.isBlank! ||
passwordController.text.isBlank! ||
confirmpasscontroller.text.isBlank!) {
Get.snackbar(
'Error',
'Enter your credentials',
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.red,
colorText: Colors.white,
);
} else if (!emailidcontroller.text.isEmail) {
Get.snackbar(
'Error',
'Enter a valid e-mail address',
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.red,
colorText: Colors.white,
);
} else if (_selectedAccountType == 'Individual') {
print('individual selected');
Get.toNamed(RouteName.verifyusercreen, arguments: _selectedAccountType);
} else if (_selectedAccountType == 'Business') {
print('business selected');
Get.toNamed(RouteName.verifyusercreen, arguments: _selectedAccountType);
// void _Signincheck() async {
// if (emailidcontroller.text.isBlank! ||
// passwordController.text.isBlank! ||
// confirmpasscontroller.text.isBlank!) {
// Get.snackbar(
// 'Error',
// 'Enter your credentials',
// snackPosition: SnackPosition.BOTTOM,
// backgroundColor: Colors.red,
// colorText: Colors.white,
// );
// } else if (!emailidcontroller.text.isEmail) {
// Get.snackbar(
// 'Error',
// 'Enter a valid e-mail address',
// snackPosition: SnackPosition.BOTTOM,
// backgroundColor: Colors.red,
// colorText: Colors.white,
// );
// } else if (_selectedAccountType == 'Individual') {
// print('individual selected');
// Get.toNamed(RouteName.verifyusercreen, arguments: _selectedAccountType);
// } else if (_selectedAccountType == 'Business') {
// print('business selected');
// Get.toNamed(RouteName.verifyusercreen, arguments: _selectedAccountType);
// } else {
// utils.showToast('Please select an account type');
// }
// }
Uploadata() async {
utils.loader();
int accountTypeValue = _accountTypeMap[_selectedAccountType] ?? 0;
Map<String, dynamic> updata = {
"email_address": emailidcontroller.text,
"password": passwordController.text,
"account_type": accountTypeValue,
};
final data = await Onboard().Postregisteration(updata);
if (data.status == ResponseStatus.SUCCESS) {
Get.back();
print("Sign up done");
String selectedCategory = _selectedAccountType;
Get.toNamed(RouteName.verifyusercreen,
arguments:
{
"emailid" : emailidcontroller.text,
"password" : passwordController.text,
"accounttype" : selectedCategory,
'accountypenumber' : accountTypeValue
}
);
// if (selectedCategory == "Individual") {
// Get.toNamed(RouteName.verifyusercreen,
// arguments:
// {
// "emailid" : emailidcontroller.text,
// "password" : passwordController.text,
// "accounttype" : selectedCategory,
// 'accountypenumber' : accountTypeValue
// }
// );
// } else if (selectedCategory == "Individual") {
// Get.toNamed(RouteName.verifyusercreen,
// arguments:
// {
// "emailid" : emailidcontroller.text,
// "password" : passwordController.text,
// "accounttype" : selectedCategory,
// 'accountypenumber' : accountTypeValue
// }
// );
// }
return utils.showToast(data.message);
} else {
utils.showToast('Please select an account type');
Get.back();
print("registration not done");
return utils.showToast(data.message);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: const Color.fromARGB(255, 18, 32, 47),
body: Stack(
children: [
Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/png/Choice screen.png"),
fit: BoxFit.fill)),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(top: 150.h),
child: Center(child: text22400white('Create account')),
),
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w, vertical: 30.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
text16400white('Email address'),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: emailidcontroller,
hintText: "Enter your email address",
leadingIcon:
// const Icon(Icons.mail_outline),
SizedBox(
width: 22.w,
height: 17.h,
child: Image.asset(
'assets/images/png/mail.png',
width: 22.w,
height: 17.h,
),
),
// validatorText: "Email Id",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your e-mail address';
}
if (!RegExp(
r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$')
.hasMatch(value)) {
return 'Enter a valid e-mail address';
}
return null;
},
inputFormatters: [
LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter()
],
),
sizedBoxHeight(10.h),
text16400white('Password'),
sizedBoxHeight(10.h),
CustomTextFormField(
isInputPassword: true,
textEditingController: passwordController,
hintText: 'Enter your password',
leadingIcon: Image.asset(
'assets/images/png/lock.png',
width: 22.w,
height: 17.h,
),
// const Icon(Icons.lock_outline),
// validationMessage: "Enter your password",
validator: (val) {
if (val == null || val.isEmpty) {
return 'Please enter your password';
}
return null;
},
inputFormatters: [
LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter()
],
),
sizedBoxHeight(10.h),
text16400white('Confirm password'),
sizedBoxHeight(10.h),
CustomTextFormField(
isInputPassword: true,
textEditingController: confirmpasscontroller,
hintText: "Enter your password",
leadingIcon: Image.asset(
'assets/images/png/lock.png',
width: 22.w,
height: 17.h,
),
// const Icon(Icons.lock_outline),
// validatorText: "Enter your password",
validator: (val) {
if (val == null || val.isEmpty) {
return 'Please enter your password';
}
if (val != passwordController.text) {
return 'Password does not match';
}
return null;
},
inputFormatters: [
LengthLimitingTextInputFormatter(20),
RemoveEmojiInputFormatter()
],
),
sizedBoxHeight(10.h),
Row(
return GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: const Color.fromARGB(255, 18, 32, 47),
body: Stack(
children: [
Container(
decoration: const BoxDecoration(
image: DecorationImage(
image:
AssetImage("assets/images/png/Choice screen.png"),
fit: BoxFit.fill)),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(top: 150.h),
child: Center(child: text22400white('Create account')),
),
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w, vertical: 30.h),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
text16400white('Account type'),
sizedBoxWidth(5.w),
Image.asset(
'assets/images/png/informationicon.png')
],
),
sizedBoxHeight(10.h),
CustomDropDownRadio(
header: 'Select account type',
title: '',
listData: [
'Individual',
'Business',
],
onItemSelected: _onItemSelected,
leadingImage: Image.asset(
'assets/images/png/user.png',
),
),
sizedBoxHeight(30.h),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 320.w,
height: 42.h,
child: Text.rich(
TextSpan(
children: [
TextSpan(
text:
'By signing up to ReGroup you agree to our ',
style: TextStyle(
color: const Color(0xCCFCFCFC),
fontSize: 14.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w400,
),
),
TextSpan(
text: 'Terms and Conditions',
style: TextStyle(
color: const Color(0xCCFCFCFC),
fontSize: 14.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w700,
decoration: TextDecoration.underline,
decorationColor:
const Color(0xffFCFCFC)
.withOpacity(0.80),
),
),
TextSpan(
text: ' and ',
style: TextStyle(
color: const Color(0xCCFCFCFC),
fontSize: 14.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w400,
),
),
TextSpan(
text: 'Privacy Policy',
style: TextStyle(
color: const Color(0xCCFCFCFC),
fontSize: 14.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w700,
decoration: TextDecoration.underline,
decorationColor:
const Color(0xffFCFCFC)
.withOpacity(0.80),
),
),
],
),
textAlign: TextAlign.center,
),
),
],
),
sizedBoxHeight(20.h),
CustomButton(
text: "Continue",
onPressed: () {
_Signincheck();
}),
sizedBoxHeight(20.h),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: 160,
decoration: const ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 0.50,
strokeAlign: BorderSide.strokeAlignCenter,
color: Color(0xFF434A53),
),
text16400white('Email address'),
sizedBoxHeight(10.h),
CustomTextFormField(
textEditingController: emailidcontroller,
hintText: "Enter your email address",
leadingIcon:
// const Icon(Icons.mail_outline),
SizedBox(
width: 22.w,
height: 17.h,
child: Image.asset(
'assets/images/png/mail.png',
width: 22.w,
height: 17.h,
),
),
// validatorText: "Email Id",
validator: (value) {
if (value!.isEmpty) {
return 'Enter your e-mail address';
}
if (!RegExp(
r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$')
.hasMatch(value)) {
return 'Enter a valid e-mail address';
}
return null;
},
inputFormatters: [
LengthLimitingTextInputFormatter(50),
RemoveEmojiInputFormatter()
],
),
sizedBoxWidth(6.w),
text14400white('Or'),
sizedBoxWidth(6.w),
Container(
width: 160,
decoration: const ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 0.50,
strokeAlign: BorderSide.strokeAlignCenter,
color: Color(0xFF434A53),
),
),
sizedBoxHeight(10.h),
text16400white('Password'),
sizedBoxHeight(10.h),
CustomTextFormField(
isInputPassword: true,
textEditingController: passwordController,
hintText: 'Enter your password',
leadingIcon: Image.asset(
'assets/images/png/lock.png',
width: 22.w,
height: 17.h,
),
// const Icon(Icons.lock_outline),
// validationMessage: "Enter your password",
validator: (val) {
if (val == null || val.isEmpty) {
return 'Please enter your password';
}
return null;
},
inputFormatters: [
LengthLimitingTextInputFormatter(50),
RemoveEmojiInputFormatter()
],
),
],
),
sizedBoxHeight(20.h),
Center(
child: SizedBox(
width: 220.w,
child: Row(
sizedBoxHeight(10.h),
text16400white('Confirm password'),
sizedBoxHeight(10.h),
CustomTextFormField(
isInputPassword: true,
textEditingController: confirmpasscontroller,
hintText: "Enter your password",
leadingIcon: Image.asset(
'assets/images/png/lock.png',
width: 22.w,
height: 17.h,
),
// const Icon(Icons.lock_outline),
// validatorText: "Enter your password",
validator: (val) {
if (val == null || val.isEmpty) {
return 'Please enter your password';
}
if (val != passwordController.text) {
return 'Password does not match';
}
return null;
},
inputFormatters: [
LengthLimitingTextInputFormatter(50),
RemoveEmojiInputFormatter()
],
),
sizedBoxHeight(10.h),
Row(
children: [
Container(
width: 55,
height: 55,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: const Alignment(0.71, -0.70),
end: const Alignment(-0.71, 0.7),
colors: [
Colors.white.withOpacity(
0.07999999821186066),
Colors.white.withOpacity(
0.12999999523162842)
],
),
shape: const OvalBorder(
side: BorderSide(
width: 0.50,
color: Color(0xFF434A53)),
),
image: const DecorationImage(
image: AssetImage(
'assets/images/png/login2.png'))),
),
const Spacer(),
Container(
width: 55,
height: 55,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: const Alignment(0.71, -0.70),
end: const Alignment(-0.71, 0.7),
colors: [
Colors.white.withOpacity(
0.07999999821186066),
Colors.white.withOpacity(
0.12999999523162842)
],
),
shape: const OvalBorder(
side: BorderSide(
width: 0.50,
color: Color(0xFF434A53)),
),
image: const DecorationImage(
image: AssetImage(
'assets/images/png/login3.png'))),
),
const Spacer(),
Container(
width: 55,
height: 55,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin: const Alignment(0.71, -0.70),
end: const Alignment(-0.71, 0.7),
colors: [
Colors.white.withOpacity(
0.07999999821186066),
Colors.white.withOpacity(
0.12999999523162842)
],
),
shape: const OvalBorder(
side: BorderSide(
width: 0.50,
color: Color(0xFF434A53)),
),
image: const DecorationImage(
image: AssetImage(
'assets/images/png/login4.png'))),
text16400white('Account type'),
sizedBoxWidth(5.w),
Image.asset(
'assets/images/png/informationicon.png')
],
),
sizedBoxHeight(10.h),
CustomDropDownRadio(
header: 'Select account type',
title: '',
listData: [
'Individual',
'Business',
],
onItemSelected: _onItemSelected,
leadingImage: Image.asset(
'assets/images/png/user.png',
),
),
sizedBoxHeight(30.h),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 320.w,
height: 42.h,
child: Text.rich(
TextSpan(
children: [
TextSpan(
text:
'By signing up to ReGroup you agree to our ',
style: TextStyle(
color: const Color(0xCCFCFCFC),
fontSize: 14.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w400,
),
),
TextSpan(
text: 'Terms and Conditions',
style: TextStyle(
color: const Color(0xCCFCFCFC),
fontSize: 14.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w700,
decoration:
TextDecoration.underline,
decorationColor:
const Color(0xffFCFCFC)
.withOpacity(0.80),
),
),
TextSpan(
text: ' and ',
style: TextStyle(
color: const Color(0xCCFCFCFC),
fontSize: 14.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w400,
),
),
TextSpan(
text: 'Privacy Policy',
style: TextStyle(
color: const Color(0xCCFCFCFC),
fontSize: 14.sp,
fontFamily: 'Helvetica',
fontWeight: FontWeight.w700,
decoration:
TextDecoration.underline,
decorationColor:
const Color(0xffFCFCFC)
.withOpacity(0.80),
),
),
],
),
textAlign: TextAlign.center,
),
),
],
),
),
sizedBoxHeight(20.h),
CustomButton(
text: "Continue",
onPressed: () {
// _Signincheck();
final isValid =
_formKey.currentState?.validate();
if (
// isValid!
emailidcontroller.text.isBlank! &&
passwordController.text.isBlank! &&
confirmpasscontroller
.text.isBlank! &&
_selectedAccountType.isEmpty) {
print(emailidcontroller.text);
print(passwordController.text);
print(_selectedAccountType.toString());
utils.showToast('Please fill all fields');
} else {
Uploadata();
}
}),
sizedBoxHeight(20.h),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: 160,
decoration: const ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 0.50,
strokeAlign:
BorderSide.strokeAlignCenter,
color: Color(0xFF434A53),
),
),
),
),
sizedBoxWidth(6.w),
text14400white('Or'),
sizedBoxWidth(6.w),
Container(
width: 160,
decoration: const ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
width: 0.50,
strokeAlign:
BorderSide.strokeAlignCenter,
color: Color(0xFF434A53),
),
),
),
),
],
),
sizedBoxHeight(20.h),
Center(
child: SizedBox(
width: 220.w,
child: Row(
children: [
Container(
width: 55,
height: 55,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin:
const Alignment(0.71, -0.70),
end: const Alignment(-0.71, 0.7),
colors: [
Colors.white.withOpacity(
0.07999999821186066),
Colors.white.withOpacity(
0.12999999523162842)
],
),
shape: const OvalBorder(
side: BorderSide(
width: 0.50,
color: Color(0xFF434A53)),
),
image: const DecorationImage(
image: AssetImage(
'assets/images/png/login2.png'))),
),
const Spacer(),
Container(
width: 55,
height: 55,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin:
const Alignment(0.71, -0.70),
end: const Alignment(-0.71, 0.7),
colors: [
Colors.white.withOpacity(
0.07999999821186066),
Colors.white.withOpacity(
0.12999999523162842)
],
),
shape: const OvalBorder(
side: BorderSide(
width: 0.50,
color: Color(0xFF434A53)),
),
image: const DecorationImage(
image: AssetImage(
'assets/images/png/login3.png'))),
),
const Spacer(),
Container(
width: 55,
height: 55,
decoration: ShapeDecoration(
gradient: LinearGradient(
begin:
const Alignment(0.71, -0.70),
end: const Alignment(-0.71, 0.7),
colors: [
Colors.white.withOpacity(
0.07999999821186066),
Colors.white.withOpacity(
0.12999999523162842)
],
),
shape: const OvalBorder(
side: BorderSide(
width: 0.50,
color: Color(0xFF434A53)),
),
image: const DecorationImage(
image: AssetImage(
'assets/images/png/login4.png'))),
),
],
),
),
),
sizedBoxHeight(20.h),
],
),
sizedBoxHeight(20.h),
],
),
),
),
),
)
],
),
],
));
)
],
),
],
)),
);
}
}

View File

@@ -4,13 +4,18 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:glassmorphism/glassmorphism.dart';
import 'package:pin_code_fields/pin_code_fields.dart';
import 'package:regroup/Common/base_manager.dart';
import 'package:regroup/Global.dart';
import 'package:regroup/Utils/Common/CommonAppbar.dart';
import 'package:regroup/Utils/Common/CustomNextButton.dart';
import 'package:regroup/Utils/Common/blureffect.dart';
import 'package:regroup/Utils/Common/sized_box.dart';
import 'package:regroup/Utils/dialogs.dart';
import 'package:regroup/Utils/texts.dart';
import 'package:regroup/onboarding/Signup/view_model/postmethod.dart';
import 'package:regroup/resources/routes/route_name.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:timer_button/timer_button.dart';
class VerifyuserScreenState extends StatefulWidget {
const VerifyuserScreenState({super.key});
@@ -20,8 +25,61 @@ class VerifyuserScreenState extends StatefulWidget {
}
class _VerifyuserScreenStateState extends State<VerifyuserScreenState> {
String accounttype = Get.arguments;
TextEditingController? pincode = TextEditingController();
// String accounttype = Get.arguments;
TextEditingController pincode = TextEditingController();
String email = Get.arguments['emailid'];
String userpassword = Get.arguments['password'];
String accounttype = Get.arguments['accounttype'];
int accounttypenumber = Get.arguments["accountypenumber"];
Uploadata() async {
utils.loader();
Map<String, dynamic> updata = {
"email_address": email,
"password": userpassword,
"account_type": accounttypenumber,
"otp": pincode.text
};
final data = await Onboard().Postverifyregisteration(updata);
if (data.status == ResponseStatus.SUCCESS) {
Get.back();
print("verification done");
if (accounttype == 'Individual') {
print('individual selected');
Get.toNamed(RouteName.tellusindividualscreen);
} else if (accounttype == 'Business') {
print('business selected');
Get.toNamed(RouteName.tellusbusinessscreen);
}
return utils.showToast(data.message);
} else {
Get.back();
print("verification not done");
return utils.showToast(data.message);
}
}
Uploadataresendotp() async {
utils.loader();
Map<String, dynamic> updata = {
"email_address": email,
"password": userpassword,
"account_type": accounttypenumber,
};
final data = await Onboard().Postregisteration(updata);
if (data.status == ResponseStatus.SUCCESS) {
Get.back();
print("resend up done");
return utils.showToast(data.message);
} else {
Get.back();
print("resend not done");
return utils.showToast(data.message);
}
}
@override
Widget build(BuildContext context) {
@@ -80,7 +138,7 @@ class _VerifyuserScreenStateState extends State<VerifyuserScreenState> {
text22400white('Check your email'),
sizedBoxHeight(10.h),
text14400white(
'Enter the verification code that we sent to loremipsum@gmail.com'),
'Enter the verification code that we sent to $email'),
sizedBoxHeight(40.h),
text16400white('Enter code'),
sizedBoxHeight(20.h),
@@ -141,22 +199,46 @@ class _VerifyuserScreenStateState extends State<VerifyuserScreenState> {
},
appContext: context,
),
sizedBoxHeight(10.h),
Center(
child: TimerButton(
disabledTextStyle: TextStyle(color: Colors.red),
activeTextStyle: TextStyle(color: Colors.white),
disabledColor: Color(0XFF222935).withOpacity(0.10),
buttonType: ButtonType.textButton,
label: "Resend OTP",
timeOutInSeconds: 120,
//mobile.text.isEmpty ? 1 : 60,
onPressed: () {
setState(() {
Uploadataresendotp();
});
},
// disabledColor: Colors.white,
color: Color(0XFF222935).withOpacity(0.10),
),
),
const Spacer(
flex: 3,
),
CustomButton(
text: 'Continue',
onPressed: () {
if (pincode!.text.isEmpty) {
if (pincode.text.isEmpty) {
utils.showToast('Pin field is empty');
} else if (pincode.text.length < 4) {
utils.showToast(
'Pin field must be at least 4 characters long');
} else {
if (accounttype == 'Individual') {
print('individual selected');
Get.toNamed(RouteName.tellusindividualscreen);
} else if (accounttype == 'Business') {
print('business selected');
Get.toNamed(RouteName.tellusbusinessscreen);
}
Uploadata();
// if (accounttype == 'Individual') {
// print('individual selected');
// Get.toNamed(RouteName.tellusindividualscreen);
// } else if (accounttype == 'Business') {
// print('business selected');
// Get.toNamed(RouteName.tellusbusinessscreen);
// }
}
}),
const Spacer(

View File

@@ -0,0 +1,65 @@
import 'dart:async';
import 'dart:developer';
import 'package:regroup/Common/api_urls.dart';
import 'package:regroup/Common/base_manager.dart';
import 'package:regroup/Common/controller/data/network/network_api.dart';
import 'package:regroup/onboarding/Signup/Model/Onboarding/Individual/CommunitiesModel.dart';
import 'package:regroup/onboarding/Signup/Model/Onboarding/Individual/GroupModel.dart';
import 'package:regroup/onboarding/Signup/Model/Onboarding/IndividualModel.dart';
GetIndividualactivityModel? indiactivityobj;
GrouplistModel? grouplistobj;
GetcommunitiesModel? communitylistobj;
class Getonboard {
Future<ResponseData<dynamic>> getIndividualactivity() async {
final response = await NetworkApiServices()
.getApi(
ApiUrls.getIndividualactivity,
// optionalpar: false
);
if (response.status == ResponseStatus.SUCCESS) {
indiactivityobj = GetIndividualactivityModel.fromJson(response.data);
log(indiactivityobj!.data.toString());
}
return response;
}
Future<ResponseData<dynamic>> getGroupsearch(updata,
{required StreamController<GrouplistModel> streamController}) async {
final response =
await NetworkApiServices().getApi(
"${ApiUrls.getgroups}?search_data=$updata",
);
if (response.status == ResponseStatus.SUCCESS) {
grouplistobj = GrouplistModel.fromJson(response.data);
if (!streamController.isClosed) streamController.sink.add(grouplistobj!);
}
return response;
}
Future<ResponseData<dynamic>> getCommunitysearch(updata,
{required StreamController<GetcommunitiesModel> streamController}) async {
final response =
await NetworkApiServices().getApi(
"${ApiUrls.getcommunities}?search_data=$updata",
);
if (response.status == ResponseStatus.SUCCESS) {
communitylistobj = GetcommunitiesModel.fromJson(response.data);
if (!streamController.isClosed) streamController.sink.add(communitylistobj!);
}
return response;
}
}

View File

@@ -0,0 +1,85 @@
import 'dart:async';
import 'package:regroup/Common/api_urls.dart';
import 'package:regroup/Common/base_manager.dart';
import 'package:regroup/Common/controller/data/network/network_api.dart';
import 'package:regroup/Global.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Onboard {
Onboard();
Future<ResponseData<dynamic>> Postregisteration(updata) async {
print("updata is $updata");
final response = await NetworkApiServices()
.postApi(updata, ApiUrls.registeration, optionalpar: true);
print("response is ${response.data}");
print("response message is ${response.message}");
return response;
}
Future<ResponseData<dynamic>> Postverifyregisteration(updata) async {
print("updata is $updata");
final response = await NetworkApiServices()
.postApi(updata, ApiUrls.verifyregisteration, optionalpar: true);
print("response is ${response.data}");
print("response message is ${response.message}");
final SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, dynamic> res = response.data;
print("res is $res");
await prefs.setString('token', res['data']['token']);
await prefs.setString('email', res['data']['email']);
await prefs.setInt('isprofileupdate', res['data']['is_profile_updated']);
token = res['data']['token'];
emailid = res['data']['email'];
isprofileupdated = res['data']['is_profile_updated'];
print("token is $token");
print("email is $emailid");
print("profile update value is $isprofileupdated");
return response;
}
Future<ResponseData> PosttellusIndividual(updata) async {
print("updata is $updata");
final response =
await NetworkApiServices().postApi(updata, ApiUrls.tellusIndividual);
print("response is ${response.data}");
print("response message is ${response.message}");
return response;
}
Future<ResponseData<dynamic>> PostIndividualActivity(updata) async {
print("updata is $updata");
final response = await NetworkApiServices()
.postApi(updata, ApiUrls.postindividualactivity,);
print("response is ${response.data}");
print("response message is ${response.message}");
return response;
}
Future<ResponseData<dynamic>> postGroups(updata) async {
print("updata is $updata");
final response = await NetworkApiServices()
.postApi(updata, ApiUrls.postgroups,);
print("response is ${response.data}");
print("response message is ${response.message}");
return response;
}
Future<ResponseData<dynamic>> postCommunities(updata) async {
print("updata is $updata");
final response = await NetworkApiServices()
.postApi(updata, ApiUrls.postcommunities,);
print("response is ${response.data}");
print("response message is ${response.message}");
return response;
}
}

View File

@@ -941,6 +941,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.6.1"
timer_button:
dependency: "direct main"
description:
name: timer_button
sha256: "448a67cc29a07e2696f8bd025f0ebd859cf156c35b4eeeee0121a728dceba7c9"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
timezone:
dependency: transitive
description:

View File

@@ -69,6 +69,7 @@ dependencies:
statsfl: ^2.3.0
glass_kit: ^4.0.1
flutter_facebook_auth: ^6.0.4
timer_button: ^2.1.1