import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:info_popup/info_popup.dart'; import 'package:konectar_events/utils/util.dart'; import 'package:konectar_events/view/eventstab.dart'; import 'package:konectar_events/widgets/custominfopopup.dart'; class DataTableDemo extends StatelessWidget { Widget build(BuildContext context) { return Expanded( child: ListView( padding: const EdgeInsets.all(2), children: [ PaginatedDataTable( dataRowMaxHeight: isTablet ? 150.0 : 150.0, //dataRowMinHeight: 100.0, columnSpacing: 32.0, // header: Row( // children: [ // Text('Events'), // const SizedBox( // width: 20, // ), // SizedBox( // width: double.minPositive, // child: SearchBar( // hintText: 'Search', // shape: MaterialStateProperty.all(RoundedRectangleBorder( // borderRadius: BorderRadius.circular(10))), // ), // ), // ], // ), header: SizedBox.shrink(), rowsPerPage: 6, actions: [], columns: [ DataColumn(label: Center(child: Text(' Event Name'))), DataColumn(label: Text('Start Date')), DataColumn(label: Text('End Date')), DataColumn(label: Text('Number of Attendees')), DataColumn(label: Text('Client Attendees')), ], source: _DataSource(context), ), ], ), ); } } class _Row { _Row(this.name, this.startDate, this.endDate, this.noOfAttendees, this.clientAttendees); final String name; final String startDate; final String endDate; final int noOfAttendees; final int clientAttendees; bool selected = false; } class _DataSource extends DataTableSource { _DataSource(this.context) { _rows = <_Row>[ _Row('Cell A1', '12-09-2024', '12-11-2024', 10, 1), _Row('Cell A2', '12-09-2024', '12-11-2024', 10, 2), _Row('Cell A3', '12-09-2024', '12-11-2024', 20, 3), _Row('Cell A4', '12-09-2024', '12-11-2024', 30, 4), _Row('Cell A1', '12-09-2024', '12-11-2024', 40, 5), _Row('Cell A2', '12-09-2024', '12-11-2024', 10, 6), _Row('Cell A3', '12-09-2024', '12-11-2024', 10, 7), _Row('Cell A4', '12-09-2024', '12-11-2024', 90, 8), ]; } final BuildContext context; late List<_Row> _rows; int _selectedCount = 0; @override DataRow? getRow(int index) { assert(index >= 0); if (index >= _rows.length) return null; final row = _rows[index]; return DataRow.byIndex( index: index, selected: row.selected, onSelectChanged: (value) { if (row.selected != value) { _selectedCount += value! ? 1 : -1; assert(_selectedCount >= 0); row.selected = value; notifyListeners(); } }, cells: [ DataCell(InkWell( // onTap: () => // Navigator.of(context).push( // MaterialPageRoute( // builder: (context) => EventsTab(), // ), // ), child: eventNameContainer(), )), DataCell(Text(row.startDate)), DataCell(Text(row.endDate)), DataCell(Text(row.noOfAttendees.toString())), DataCell(Text(row.clientAttendees.toString())), ], ); } @override int get rowCount => _rows.length; @override bool get isRowCountApproximate => false; @override int get selectedRowCount => _selectedCount; Widget eventNameContainer() { return Container( height: 300, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ // IconButton( // onPressed: () { // MaterialPageRoute( // builder: (_) { // return const CustomInfoPopup(); // }, // ); // }, // icon: const Icon( // Icons.info, // size: 20, // )), _infopopup(context), Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( width: isTablet ? MediaQuery.of(context).size.width * 0.50 : MediaQuery.of(context).size.width * 0.65, child: Text( '2024 Hematology/Oncology Pharmacy Association Annual Conference (HOPA)', style: TextStyle( // decoration: TextDecoration.underline, // decorationColor: Colors.blue, color: Colors.blue, fontWeight: FontWeight.bold, fontSize: 16, ), maxLines: 2, softWrap: true, overflow: TextOverflow.ellipsis, ), ), SizedBox( width: isTablet ? MediaQuery.of(context).size.width * 0.25 : MediaQuery.of(context).size.width * 0.5, child: Text( 'Tampa,Florida,United States', style: TextStyle( color: Colors.black, fontStyle: FontStyle.italic, fontSize: 14), ), ), SizedBox( width: isTablet ? MediaQuery.of(context).size.width * 0.25 : MediaQuery.of(context).size.width * 0.35, child: Text( 'Organizer: Hematology/Oncology Pharmacy Association (HOPA)', style: TextStyle( color: Colors.black, fontStyle: FontStyle.italic, fontSize: 14), ), ), ], ), ], ), ); } _infopopup(BuildContext context) { return InfoPopupWidget( customContent: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), ), padding: const EdgeInsets.all(10), child: Column( children: const [ Text( ' Speaker Count : 1 \n Session Notes : 0 \n Surveys : 0 \n Program: Completed', style: TextStyle( fontSize: 16.0, color: Colors.black, ), ), ], ), ), arrowTheme: const InfoPopupArrowTheme( color: Color.fromARGB(255, 248, 238, 238), arrowDirection: ArrowDirection.up, ), dismissTriggerBehavior: PopupDismissTriggerBehavior.anyWhere, areaBackgroundColor: Colors.transparent, indicatorOffset: Offset.zero, contentOffset: Offset.zero, onControllerCreated: (controller) { print('Info Popup Controller Created'); }, onAreaPressed: (InfoPopupController controller) { print('Area Pressed'); }, infoPopupDismissed: () { // Navigator.pop(context); print('Info Popup Dismissed'); }, onLayoutMounted: (Size size) { print('Info Popup Layout Mounted'); }, child: Icon( Icons.info, color: Colors.blue, ), ); } }