266 lines
10 KiB
Dart
266 lines
10 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:onufitness/constants/string_constant.dart';
|
|
import 'package:onufitness/screens/rise/controllers/rise_controller.dart';
|
|
import 'package:onufitness/screens/rise/views/detailed_rise_screen.dart';
|
|
import 'package:onufitness/screens/rise/widgets/challenge_card.dart';
|
|
|
|
Widget paginationGridView(RiseController controller, bool isOngoing) {
|
|
final challenges =
|
|
isOngoing ? controller.ongoingChallenges : controller.upcomingChallenges;
|
|
final isLoading =
|
|
isOngoing ? controller.isOngoingLoading : controller.isUpcomingLoading;
|
|
final hasMoreData =
|
|
isOngoing
|
|
? controller.ongoingHasMoreData
|
|
: controller.upcomingHasMoreData;
|
|
|
|
return NotificationListener<ScrollNotification>(
|
|
onNotification: (ScrollNotification scrollInfo) {
|
|
if (scrollInfo is ScrollEndNotification &&
|
|
scrollInfo.metrics.pixels >=
|
|
scrollInfo.metrics.maxScrollExtent - 50 &&
|
|
scrollInfo.metrics.pixels > 100 &&
|
|
!isLoading.value &&
|
|
hasMoreData.value) {
|
|
if (isOngoing) {
|
|
controller.loadMoreOngoingChallenges();
|
|
} else {
|
|
controller.loadMoreUpcomingChallenges();
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
child: GridView.builder(
|
|
padding: EdgeInsets.all(15.w),
|
|
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
|
crossAxisCount: 2,
|
|
crossAxisSpacing: 10,
|
|
mainAxisSpacing: 10,
|
|
childAspectRatio: 0.8,
|
|
),
|
|
itemCount: challenges.length + (hasMoreData.value ? 1 : 0),
|
|
itemBuilder: (context, index) {
|
|
if (index == challenges.length) {
|
|
return Center(
|
|
child:
|
|
isLoading.value
|
|
? CircularProgressIndicator()
|
|
: SizedBox.shrink(),
|
|
);
|
|
}
|
|
|
|
final challenge = challenges[index];
|
|
return Padding(
|
|
padding: EdgeInsets.only(bottom: 12.h),
|
|
child: InkWell(
|
|
onTap: () {
|
|
Get.to(
|
|
() => ChallengeDetailsScreen(
|
|
riseController: controller,
|
|
index: index,
|
|
challengeItem: challenge,
|
|
),
|
|
);
|
|
},
|
|
child:
|
|
isOngoing
|
|
? ChallengeCard(
|
|
tabName: riseExploreTabOngoing,
|
|
title: challenge.challengeTitle ?? 'Unknown Challenge',
|
|
category: challenge.fitnessGoalTitle ?? 'General Fitness',
|
|
participants:
|
|
'${challenge.totalParticipants ?? 0} Participants',
|
|
imageUrl: challenge.challengeImageName,
|
|
onJoinPressed: () {
|
|
controller
|
|
.joinChallenge(challengeID: challenge.challengeId!)
|
|
.then((value) {
|
|
if (value) {
|
|
controller.fetchOngoingChallenges(
|
|
isRefresh: true,
|
|
);
|
|
|
|
controller.fetchCreatedChallenges(
|
|
isRefresh: true,
|
|
);
|
|
|
|
controller.fetchJoinedChallenges(
|
|
isRefresh: true,
|
|
);
|
|
}
|
|
});
|
|
},
|
|
isLoading: controller.isJoiningChallengeLoading,
|
|
challengeID: challenge.challengeId,
|
|
isChallengeJoined: challenge.isChallengeJoined!,
|
|
isChallengeStarted: challenge.isChallengeStarted!,
|
|
)
|
|
: ChallengeCard(
|
|
isLoading: controller.isJoiningChallengeLoading,
|
|
challengeID: challenge.challengeId,
|
|
isChallengeJoined: challenge.isChallengeJoined!,
|
|
isChallengeStarted: challenge.isChallengeStarted!,
|
|
tabName: riseExploreTabUpcoming,
|
|
title: challenge.challengeTitle ?? 'Unknown Challenge',
|
|
category: challenge.fitnessGoalTitle ?? 'General Fitness',
|
|
participants:
|
|
'${challenge.totalParticipants ?? 0} Participants',
|
|
|
|
imageUrl: challenge.challengeImageName,
|
|
|
|
onJoinPressed: () {
|
|
controller
|
|
.joinChallenge(challengeID: challenge.challengeId!)
|
|
.then((value) {
|
|
if (value) {
|
|
controller.fetchUpcomingChallenges(
|
|
isRefresh: true,
|
|
);
|
|
|
|
controller.fetchCreatedChallenges(
|
|
isRefresh: true,
|
|
);
|
|
|
|
controller.fetchJoinedChallenges(
|
|
isRefresh: true,
|
|
);
|
|
}
|
|
});
|
|
},
|
|
),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget paginationListView(RiseController controller, bool isOngoing) {
|
|
final challenges =
|
|
isOngoing ? controller.ongoingChallenges : controller.upcomingChallenges;
|
|
final isLoading =
|
|
isOngoing ? controller.isOngoingLoading : controller.isUpcomingLoading;
|
|
final hasMoreData =
|
|
isOngoing
|
|
? controller.ongoingHasMoreData
|
|
: controller.upcomingHasMoreData;
|
|
|
|
return NotificationListener<ScrollNotification>(
|
|
onNotification: (ScrollNotification scrollInfo) {
|
|
if (scrollInfo is ScrollEndNotification &&
|
|
scrollInfo.metrics.pixels >=
|
|
scrollInfo.metrics.maxScrollExtent - 50 &&
|
|
scrollInfo.metrics.pixels > 100 &&
|
|
!isLoading.value &&
|
|
hasMoreData.value) {
|
|
if (isOngoing) {
|
|
controller.loadMoreOngoingChallenges();
|
|
} else {
|
|
controller.loadMoreUpcomingChallenges();
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
child: ListView.builder(
|
|
padding: EdgeInsets.all(16.w),
|
|
itemCount: challenges.length + (hasMoreData.value ? 1 : 0),
|
|
itemBuilder: (context, index) {
|
|
if (index == challenges.length) {
|
|
return Container(
|
|
padding: EdgeInsets.all(16.h),
|
|
child: Center(
|
|
child:
|
|
isLoading.value
|
|
? CircularProgressIndicator(color: Colors.black)
|
|
: SizedBox.shrink(),
|
|
),
|
|
);
|
|
}
|
|
|
|
final challenge = challenges[index];
|
|
return Padding(
|
|
padding: EdgeInsets.only(bottom: 12.h),
|
|
child: InkWell(
|
|
onTap: () {
|
|
Get.to(
|
|
() => ChallengeDetailsScreen(
|
|
riseController: controller,
|
|
index: index,
|
|
challengeItem: challenge,
|
|
),
|
|
);
|
|
},
|
|
child:
|
|
isOngoing
|
|
? ChallengeCard(
|
|
tabName: riseExploreTabOngoing,
|
|
title: challenge.challengeTitle ?? 'Unknown Challenge',
|
|
category: challenge.fitnessGoalTitle ?? 'General Fitness',
|
|
participants:
|
|
'${challenge.totalParticipants ?? 0} Participants',
|
|
imageUrl: challenge.challengeImageName,
|
|
|
|
onJoinPressed: () {
|
|
controller
|
|
.joinChallenge(challengeID: challenge.challengeId!)
|
|
.then((value) {
|
|
if (value) {
|
|
controller.fetchOngoingChallenges(
|
|
isRefresh: true,
|
|
);
|
|
|
|
controller.fetchCreatedChallenges(
|
|
isRefresh: true,
|
|
);
|
|
|
|
controller.fetchJoinedChallenges(
|
|
isRefresh: true,
|
|
);
|
|
}
|
|
});
|
|
},
|
|
isLoading: controller.isJoiningChallengeLoading,
|
|
challengeID: challenge.challengeId,
|
|
isChallengeJoined: challenge.isChallengeJoined!,
|
|
isChallengeStarted: challenge.isChallengeStarted!,
|
|
)
|
|
: ChallengeCard(
|
|
isLoading: controller.isJoiningChallengeLoading,
|
|
challengeID: challenge.challengeId,
|
|
tabName: riseExploreTabUpcoming,
|
|
title: challenge.challengeTitle ?? 'Unknown Challenge',
|
|
category: challenge.fitnessGoalTitle ?? 'General Fitness',
|
|
participants:
|
|
'${challenge.totalParticipants ?? 0} Participants',
|
|
imageUrl: challenge.challengeImageName,
|
|
isChallengeJoined: challenge.isChallengeJoined!,
|
|
isChallengeStarted: challenge.isChallengeStarted!,
|
|
onJoinPressed: () {
|
|
controller
|
|
.joinChallenge(challengeID: challenge.challengeId!)
|
|
.then((value) {
|
|
if (value) {
|
|
controller.fetchUpcomingChallenges(
|
|
isRefresh: true,
|
|
);
|
|
|
|
controller.fetchCreatedChallenges(
|
|
isRefresh: true,
|
|
);
|
|
|
|
controller.fetchJoinedChallenges(
|
|
isRefresh: true,
|
|
);
|
|
}
|
|
});
|
|
},
|
|
),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|