Appearance
Overview
- File:
lib/views/events_page.dart
The EventsPage is a Flutter widget that displays and manages events in the HVC Mobile application. It provides functionality for viewing, searching, joining, and managing events with infinite scrolling and real-time updates.
Class Structure
Class Definition
dart
class EventsPage extends StatefulWidget {
static const String routeName = '/EventsPage';
EventsPage({Key? key}) : super(key: key);
@override
_EventsPageState createState() => _EventsPageState();
}Controllers
dart
final EventsController eventsController = Get.find();
final RealTimeController realTimeController = Get.find();State Variables
dart
late UserData user;
final TextEditingController searchCtrl = TextEditingController();Dependencies
Required Packages
flutter/material.dart- Core Flutter UI componentsget/get.dart- State management and routinginfinite_scroll_pagination- Infinite scrolling functionalitypermission_handler- Permission management
Internal Dependencies
events_controller.dart- Event management logicreal_time_controller.dart- Real-time communicationhlk_helpers/- Custom helper utilitiesmodels/- Data modelsshared/- Shared constants and configurationswidgets/- Custom widgets
State Management
Initialization
dart
@override
void initState() {
super.initState();
eventsController.reload();
if (eventsController.events.isEmpty) eventsController.fetchPage(1);
}Reactive State
dart
Obx(() => eventsController.loadingEvent.value &&
eventsController.events.isEmpty
? const Center(child: CircularProgressIndicator())
: Column(...))Event Management
Event Loading
dart
PagedListView<int, HvcEvent>(
pagingController: eventsController.pagingController,
builderDelegate: PagedChildBuilderDelegate<HvcEvent>(
itemBuilder: (BuildContext context, HvcEvent event, int index) => ...
),
)Event Actions
- Join Meeting
dart
Future<void> joinTheMeeting(HvcEvent event) async {
await eventsController.getParticipants(event);
final callDto = InitCallDto(
from: user.userId,
fromName: user.name,
title: event.title,
eventId: event.eventId,
source: 'Mobile',
platform: Platform.isIOS ? 'iOS' : 'Android',
);
await validatePermission(
Permission.camera,
() async => await validatePermission(
Permission.microphone,
() async {
await realTimeController.makeCall(
callDto,
null,
isEventOwner(event),
false
);
}
)
);
}- Cancel Event
dart
cancelEvent: () async {
await eventsController.cancelEvent([event.eventId]);
}- Modify Event
dart
modifyEvent: () async {
await eventsController.getParticipants(event);
Get.to(EventFormPage(event: event));
}UI Components
Search Box
dart
if (eventsController.showSearchBox.value)
Padding(
padding: const EdgeInsets.only(left: 24, right: 12, top: 10),
child: Row(
children: [
Expanded(
child: TextFormField(
controller: searchCtrl,
validator: requiredValidator,
decoration: getInputDecoration('Search Event', false),
),
),
IconButton(
onPressed: () async {
setState(() {
eventsController.showSearchBox.value = false;
eventsController.name.value = searchCtrl.text;
});
await eventsController.reload();
searchCtrl.clear();
},
icon: const Icon(Icons.search),
),
],
),
)Event List
dart
PagedListView<int, HvcEvent>(
pagingController: eventsController.pagingController,
builderDelegate: PagedChildBuilderDelegate<HvcEvent>(
itemBuilder: (context, event, index) => EventItem(...),
noItemsFoundIndicatorBuilder: (context) => NoItemLoader(...),
),
)Event Item
dart
EventItem(
isOwner: isEventOwner(event),
event: eventsController.events.elementAt(index),
handleJoinMeeting: () async => await joinTheMeeting(event),
onTapHandler: () async {
await eventsController.getParticipants(event);
Get.to(EventDetailsPage(
event: event,
joinMeeting: () async => await joinTheMeeting(event),
));
},
// ... other properties
)Search Functionality
Search Implementation
dart
onPressed: () async {
setState(() {
eventsController.showSearchBox.value = false;
eventsController.name.value = searchCtrl.text;
});
await eventsController.reload();
searchCtrl.clear();
}Search Box Toggle
dart
if (eventsController.showSearchBox.value)
// Show search box
else
// Hide search boxMeeting Management
Permission Handling
dart
await validatePermission(
Permission.camera,
() async => await validatePermission(
Permission.microphone,
() async {
await realTimeController.makeCall(...)
}
)
)Meeting Join Process
- Get participants
- Create call DTO
- Validate permissions
- Initiate call