Merge pull request #123 from WDI-Ideas/createcommunity

meberes page in community details
This commit is contained in:
Shubham Shetty
2024-08-14 12:21:43 +05:30
committed by GitHub
9 changed files with 378 additions and 24 deletions

View File

@@ -166,5 +166,8 @@ class ApiUrls {
static const getcommunitygroups = "${baseUrl}fetch-community-all-groups";
static const getcommunitymembers = "${baseUrl}fetch-community-all-members";
}

View File

@@ -145,6 +145,9 @@ class RouteName {
static const String viewalluserspinned = '/viewallusersspinned';
static const String communitymembers = '/communitymembers';

View File

@@ -73,6 +73,7 @@ import 'package:regroup/sidemenu/Community/Admin/PopupItem/Community%20settings/
import 'package:regroup/sidemenu/Community/Announcements/AnnouncementRequest.dart';
import 'package:regroup/sidemenu/Community/Announcements/ManageMembers.dart';
import 'package:regroup/sidemenu/Community/Announcements/NewAnnouncement/NewAnnounceent.dart';
import 'package:regroup/sidemenu/Community/Members/CommunityMembers.dart';
import 'package:regroup/sidemenu/Community/MyCommunity/AddGroups.dart';
import 'package:regroup/sidemenu/Community/MyCommunity/NewCommunity.dart';
import 'package:regroup/sidemenu/Community/MyCommunity/View/RequestsScreen.dart';
@@ -537,10 +538,18 @@ class AppRoutes {
name: RouteName.viewalluserspinned,
page: () => const Viewtusertags(),
),
GetPage(
name: RouteName.communitymembers,
page: () => const CommunityMembers(),
),
GetPage(
name: RouteName.requestscreen,
page: () => const RequestsScreen(),
),
];
}

View File

@@ -19,36 +19,12 @@ class Group extends StatefulWidget {
}
class _GroupState extends State<Group> {
List GroupData = [
{
"imagepath": "assets/images/png/img45.png",
"title": "Cardio crusaders circle",
"subtitle": "Iron titans fitness crew",
"members": "7 members"
},
{
"imagepath": "assets/images/png/Rectangle 25.png",
"title": "Strength squad syndicate",
"subtitle": "Iron titans fitness crew",
"members": "7 members"
},
{
"imagepath": "assets/images/png/img2.png",
"title": "Flexibility faction force",
"subtitle": "Iron titans fitness crew",
"members": "7 members"
},
];
late Future myfuture;
int id = Get.arguments["id"];
bool iscommunity = Get.arguments["iscommunity"];
@override
void initState() {
// TODO: implement initState
// myfuture = Sidegetmethod().getJoinedusergroups(id);
super.initState();
}

View File

@@ -0,0 +1,266 @@
import 'dart:async';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:regroup/Common/CommonWidget.dart';
import 'package:regroup/Common/controller/CommonTextFormField.dart';
import 'package:regroup/Utils/Common/CommonAppbar.dart';
import 'package:regroup/Utils/Common/sized_box.dart';
import 'package:regroup/Utils/texts.dart';
import 'package:regroup/resources/routes/route_name.dart';
import 'package:regroup/sidemenu/Community/MyCommunity/Model/communityMebersModel.dart';
import 'package:regroup/sidemenu/Community/MyCommunity/view_model/getmethod.dart';
import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart';
class CommunityMembers extends StatefulWidget {
const CommunityMembers({super.key});
@override
State<CommunityMembers> createState() => _CommunityMembersState();
}
class _CommunityMembersState extends State<CommunityMembers> {
StreamController<CommunityMembersModel> searchcontroller = StreamController();
int communityid = Get.arguments["communityid"];
@override
void initState() {
var updata = communityid;
var updata2 = "";
Getcommunity().getCommunityMemberssearch(updata, updata2,
streamController: searchcontroller);
super.initState();
}
@override
void dispose() {
searchcontroller.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFF222935),
extendBody: true,
appBar: const CommonAppbar(
titleTxt: "Members",
),
resizeToAvoidBottomInset: false,
body: Stack(children: [
Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/png/Ellipse 1496.png"),
fit: BoxFit.fill)),
),
SingleChildScrollView(
child: Column(children: [
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: CustomTextFormField(
leadingIcon: SizedBox(
height: 23,
width: 23,
child: Center(
child: Image.asset(
"assets/images/png/ion_search-outline.png",
height: 23,
width: 23,
),
),
),
texttype: TextInputType.text,
inputFormatters: [
RemoveEmojiInputFormatter(),
],
onInput: (value) {
Getcommunity().getCommunityMemberssearch(communityid, value,
streamController: searchcontroller);
},
hintText: "Search people",
),
),
sizedBoxHeight(25.h),
StreamBuilder<CommunityMembersModel>(
stream: searchcontroller.stream,
builder: (ctx, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
// Display shimmer effect while waiting for data
return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
// Handle error state
return Center(
child: Text(
'${snapshot.error} occurred',
style: const TextStyle(fontSize: 18),
),
);
} else {
// Data has been loaded, show actual UI
return communitymembersobj!.data.isEmpty
? _buildNoDataBody(context)
: ListView.separated(
physics: const ScrollPhysics(),
shrinkWrap: true,
itemCount: communitymembersobj!.data.length,
separatorBuilder:
(BuildContext context, int index) {
return commonDivider();
},
itemBuilder: (context, index) {
var mainFollowersData =
communitymembersobj!.data[index];
return GestureDetector(
onTap: () {
mainFollowersData
.iamPrincipal!.principalTypeXid ==
1
? Get.toNamed(
RouteName.profiletabindguest,
arguments: {
"FolloweridIndex":
mainFollowersData
.iamPrincipalXid!,
})
: Get.toNamed(
RouteName.profiletabbusguest,
arguments: {
"FolloweridIndex":
mainFollowersData
.iamPrincipalXid!,
});
},
child: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(
vertical: 16.h, horizontal: 16.w),
child: Row(
children: [
mainFollowersData.iamPrincipal!
.profilePhoto ==
null ||
mainFollowersData
.iamPrincipal!
.profilePhoto!
.isEmpty
? CircleAvatar(
backgroundImage: const AssetImage(
'assets/images/png/Ellipse 43.png'),
radius: 25.r,
)
: CircleAvatar(
backgroundImage:
CachedNetworkImageProvider(
mainFollowersData
.iamPrincipal!
.profilePhoto!,
),
// NetworkImage(
// mainFollowersData
// .iamPrincipal!
// .profilePhoto!),
radius: 25.r,
child: CachedNetworkImage(
cacheKey: mainFollowersData
.iamPrincipalXid
.toString(),
maxHeightDiskCache: 100,
maxWidthDiskCache: 100,
imageUrl: mainFollowersData
.iamPrincipal!
.profilePhoto!,
placeholder:
(context, url) =>
Container(),
errorWidget:
(context, url, error) =>
Icon(Icons.error),
imageBuilder: (context,
imageProvider) =>
CircleAvatar(
backgroundImage:
imageProvider,
radius: 25.r,
),
),
),
sizedBoxWidth(10.w),
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
mainFollowersData.iamPrincipal!
.userName ==
null ||
mainFollowersData
.iamPrincipal!
.userName!
.isEmpty ==
true
? text16w400_FCFCFC("Regroup")
: text16w400_FCFCFC(
mainFollowersData
.iamPrincipal!
.userName!),
sizedBoxHeight(4.h),
mainFollowersData.iamPrincipal!
.userName ==
null ||
mainFollowersData
.iamPrincipal!
.userName!
.isEmpty ==
true
? text12w400_FCFCFC_blur(
"regroup")
: text12w400_FCFCFC_blur(
mainFollowersData
.iamPrincipal!
.userName!)
],
),
],
),
)
],
),
);
},
);
}
},
),
])
]),
)
]),
);
}
Widget _buildNoDataBody(context) {
return Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"No Members Found",
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontWeight: FontWeight.w600),
)
],
),
);
}
}

View File

@@ -0,0 +1,74 @@
class CommunityMembersModel {
CommunityMembersModel({
required this.status,
required this.statusCode,
required this.message,
required this.data,
});
final String? status;
final int? statusCode;
final String? message;
final List<Datum> data;
factory CommunityMembersModel.fromJson(Map<String, dynamic> json){
return CommunityMembersModel(
status: json["status"],
statusCode: json["status_code"],
message: json["message"],
data: json["data"] == null ? [] : List<Datum>.from(json["data"]!.map((x) => Datum.fromJson(x))),
);
}
}
class Datum {
Datum({
required this.id,
required this.iamPrincipalXid,
required this.manageCommunityXid,
required this.iamPrincipal,
});
final int? id;
final int? iamPrincipalXid;
final int? manageCommunityXid;
final IamPrincipal? iamPrincipal;
factory Datum.fromJson(Map<String, dynamic> json){
return Datum(
id: json["id"],
iamPrincipalXid: json["iam_principal_xid"],
manageCommunityXid: json["manage_community_xid"],
iamPrincipal: json["iam_principal"] == null ? null : IamPrincipal.fromJson(json["iam_principal"]),
);
}
}
class IamPrincipal {
IamPrincipal({
required this.id,
required this.principalTypeXid,
required this.userName,
required this.profilePhoto,
required this.isUserPinned,
});
final int? id;
final int? principalTypeXid;
final String? userName;
final String? profilePhoto;
final bool? isUserPinned;
factory IamPrincipal.fromJson(Map<String, dynamic> json){
return IamPrincipal(
id: json["id"],
principalTypeXid: json["principal_type_xid"],
userName: json["user_name"],
profilePhoto: json["profile_photo"],
isUserPinned: json["is_user_pinned"],
);
}
}

View File

@@ -4,11 +4,14 @@ 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/sidemenu/Community/MyCommunity/Model/communityMebersModel.dart';
import 'package:regroup/sidemenu/Community/MyCommunity/Model/communityaddgroupsModel.dart';
import 'package:regroup/sidemenu/Community/MyCommunity/Model/communitygroupsModel.dart';
CommunityAddgroupsModel? communityaddgroupobj;
CommunitygroupsModel? communitygroupspobj;
CommunityMembersModel? communitymembersobj;
@@ -41,4 +44,19 @@ class Getcommunity {
return response;
}
Future<ResponseData<dynamic>> getCommunityMemberssearch(updata,updata2,
{required StreamController<CommunityMembersModel> streamController}) async {
final response =
await NetworkApiServices().getApi(
"${ApiUrls.getcommunitymembers}?manage_community_xid=$updata&search=$updata2",
);
if (response.status == ResponseStatus.SUCCESS) {
communitymembersobj = CommunityMembersModel.fromJson(response.data);
if (!streamController.isClosed) streamController.sink.add(communitymembersobj!);
}
return response;
}
}

View File

@@ -1214,7 +1214,9 @@ packages:
source: hosted
version: "7.0.0"
sqflite:
dependency: transitive
description:
name: sqflite
sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d

View File

@@ -77,6 +77,9 @@ dependencies:
flutter_html: ^3.0.0-beta.2
comment_tree: ^0.3.0
flutter_keyboard_visibility: ^6.0.0
sqflite: ^2.3.3+1
cached_network_image: any