working_2_21_10_sidenavbar
working_2_21_10_sidenavbar
import '/backend/backend.dart';
import '/backend/schema/structs/index.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/widgets/index.dart'; // Imports other custom widgets
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom widget code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
import
'package:sliver_sticky_collapsable_panel/sliver_sticky_collapsable_panel.dart';
import 'package:intl/intl.dart';
@override
State<AlarmsEventssideBar> createState() => _AlarmsEventssideBarState();
}
/*
Widget _buildAlertCard(AlertItem alert, Color color) {
return Card(
margin: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
child: ListTile(
leading: Icon(Icons.notification_important, color: color),
title: Text(alert.title),
subtitle: Text(alert.description),
trailing: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
DateFormat('HH:mm').format(alert.timestamp),
style: TextStyle(fontSize: 12),
),
Text(
alert.status,
style: TextStyle(
color: color,
fontSize: 12,
fontWeight: FontWeight.bold,
),
),
],
),
onTap: () => _showAlertDetails(alert),
),
);
}
*/
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
controller: _scrollController,
slivers: [
// Alerts Segment
_buildMainSegment(
controller: alertsController,
title: 'Alerts',
color: Colors.purple,
majorItems: majorAlerts,
minorItems: minorAlerts,
lowItems: lowAlerts,
majorController: alertsMajorController,
minorController: alertsMinorController,
lowController: alertsLowController,
),
// Alarms Segment
_buildMainSegment(
controller: alarmsController,
title: 'Alarms',
color: Colors.teal,
majorItems: majorAlarms,
minorItems: minorAlarms,
lowItems: lowAlarms,
majorController: alarmsMajorController,
minorController: alarmsMinorController,
lowController: alarmsLowController,
),
],
),
);
}
Widget _buildMainSegment({
required StickyCollapsablePanelController controller,
required String title,
required Color color,
required List<AlertItem> majorItems,
required List<AlertItem> minorItems,
required List<AlertItem> lowItems,
required StickyCollapsablePanelController majorController,
required StickyCollapsablePanelController minorController,
required StickyCollapsablePanelController lowController,
}) {
return SliverStickyCollapsablePanel(
scrollController: _scrollController,
controller: controller,
iOSStyleSticky: true,
headerBuilder: (context, status) =>
_buildSegmentHeader(title, color, status.isExpanded),
sliverPanel: SliverList(
delegate: SliverChildListDelegate([
Container(
padding: EdgeInsets.all(0),
child: Column(
spacing: 0,
children: [
// Major Items Section
_buildSubSection(
title: 'Major $title',
color: Colors.red,
items: majorItems,
controller: majorController,
),
// Minor Items Section
_buildSubSection(
title: 'Minor $title',
color: Colors.orange,
items: minorItems,
controller: minorController,
),
// Low Priority Items Section
_buildSubSection(
title: 'Low Priority $title',
color: Colors.blue,
items: lowItems,
controller: lowController,
),
],
),
),
]),
),
);
}
Widget _buildSubSection({
required String title,
required Color color,
required List<AlertItem> items,
required StickyCollapsablePanelController controller,
}) {
return ExpansionTile(
title: _buildSubHeader(title, color, true),
backgroundColor: Colors.transparent,
collapsedBackgroundColor: Colors.transparent,
tilePadding: EdgeInsets.zero, // Set background color when collapsed
childrenPadding: const EdgeInsets.all(0), // Padding for children
children: items.map((item) => _buildAlertCard(item, color)).toList(),
);
}
class AlertItem {
final String id;
final String title;
final String description;
final DateTime timestamp;
final String status;
final String priority;
AlertItem({
required this.id,
required this.title,
required this.description,
required this.timestamp,
required this.status,
required this.priority,
});
}