250 lines
8.3 KiB
Dart
250 lines
8.3 KiB
Dart
|
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/custombutton.dart';
|
||
|
import 'package:konectar_events/widgets/customhcpcard.dart';
|
||
|
import 'package:konectar_events/widgets/custominfopopup.dart';
|
||
|
import 'package:konectar_events/widgets/customtopicscard.dart';
|
||
|
import 'package:konectar_events/widgets/eventdetailscontainer.dart';
|
||
|
|
||
|
class EventsDetailsDataTable extends StatelessWidget {
|
||
|
TextEditingController selecttextEditingController = TextEditingController();
|
||
|
|
||
|
Widget build(BuildContext context) {
|
||
|
return LayoutBuilder(builder: (context, constraints) {
|
||
|
return SizedBox(
|
||
|
height: isTablet
|
||
|
? MediaQuery.of(context).size.height * 0.75
|
||
|
: MediaQuery.of(context).size.height * 0.80,
|
||
|
child: ListView(
|
||
|
padding: const EdgeInsets.symmetric(horizontal: 2),
|
||
|
children: [
|
||
|
PaginatedDataTable(
|
||
|
dataRowMaxHeight: isTablet ? 120.0 : 120.0,
|
||
|
showCheckboxColumn: true,
|
||
|
showEmptyRows: false,
|
||
|
sortColumnIndex: 1,
|
||
|
//dataRowMinHeight: 100.0,
|
||
|
showFirstLastButtons: true,
|
||
|
columnSpacing: 32.0,
|
||
|
headingRowHeight: 44,
|
||
|
// header: SizedBox(
|
||
|
// height: 150,
|
||
|
// child: Row(
|
||
|
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
|
// crossAxisAlignment: CrossAxisAlignment.center,
|
||
|
// children: [
|
||
|
// Text('Events Speakers'),
|
||
|
// CustomButton(
|
||
|
// backgroundColor: Colors.green,
|
||
|
// onPressed: () {},
|
||
|
// textColor: Colors.black,
|
||
|
// title: "Add To My Contacts",
|
||
|
// fontsize: 16,
|
||
|
// )
|
||
|
// // const SizedBox(
|
||
|
// // width: 10,
|
||
|
// // ),
|
||
|
// //
|
||
|
// ],
|
||
|
// ),
|
||
|
// ),
|
||
|
header: buildTextFieldWidget(context),
|
||
|
rowsPerPage: isTablet ? 4 : 3,
|
||
|
actions: [],
|
||
|
columns: [
|
||
|
DataColumn(
|
||
|
label: Center(child: Text(' HCP \n Topics')),
|
||
|
onSort: (columnIndex, ascending) {},
|
||
|
),
|
||
|
DataColumn(label: Text('Session Notes')),
|
||
|
DataColumn(label: Text('Medical Insights')),
|
||
|
DataColumn(label: Text('Survey')),
|
||
|
DataColumn(label: Text('Actions')),
|
||
|
],
|
||
|
source: _DataSource(context),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
Widget buildTextFieldWidget(BuildContext context) {
|
||
|
return SizedBox(
|
||
|
width: isTablet ? 150 : MediaQuery.of(context).size.width,
|
||
|
height: isTablet ? 40 : 35,
|
||
|
child: TextField(
|
||
|
textAlignVertical: TextAlignVertical.center,
|
||
|
cursorHeight: 16.0,
|
||
|
maxLines: 1,
|
||
|
controller:
|
||
|
selecttextEditingController, //editing controller of this TextField
|
||
|
decoration: InputDecoration(
|
||
|
// border: OutlineInputBorder(),
|
||
|
hintText: 'Search',
|
||
|
|
||
|
border: OutlineInputBorder(
|
||
|
borderRadius: BorderRadius.circular(10.0),
|
||
|
),
|
||
|
hintStyle: const TextStyle(fontSize: 16),
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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', '10', 10, 1),
|
||
|
_Row('Cell A1', '12', '10', 10, 1),
|
||
|
_Row('Cell A1', '12', '10', 10, 1),
|
||
|
_Row('Cell A1', '12', '10', 10, 1),
|
||
|
_Row('Cell A1', '12', '10', 10, 1),
|
||
|
_Row('Cell A1', '12', '10', 10, 1),
|
||
|
_Row('Cell A1', '12', '10', 10, 1),
|
||
|
];
|
||
|
}
|
||
|
|
||
|
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(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(
|
||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
|
children: [
|
||
|
FittedBox(child: CustomInfoPopup()),
|
||
|
SizedBox(
|
||
|
width: 5,
|
||
|
),
|
||
|
Column(
|
||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||
|
children: [
|
||
|
SizedBox(
|
||
|
width: isTablet
|
||
|
? MediaQuery.of(context).size.width * 0.50
|
||
|
: MediaQuery.of(context).size.width * 0.40,
|
||
|
child: Text(
|
||
|
'Husain Hatim',
|
||
|
style: TextStyle(
|
||
|
fontWeight: FontWeight.bold,
|
||
|
fontSize: 17,
|
||
|
),
|
||
|
maxLines: 2,
|
||
|
softWrap: true,
|
||
|
overflow: TextOverflow.ellipsis,
|
||
|
),
|
||
|
),
|
||
|
FittedBox(
|
||
|
child: InfoPopupWidget(
|
||
|
customContent: Container(
|
||
|
decoration: BoxDecoration(
|
||
|
color: Colors.white,
|
||
|
borderRadius: BorderRadius.circular(10),
|
||
|
),
|
||
|
padding: EdgeInsets.all(isTablet ? 10 : 5),
|
||
|
child: CustomEventTopicsCard(),
|
||
|
),
|
||
|
arrowTheme: const InfoPopupArrowTheme(
|
||
|
color: Colors.white,
|
||
|
arrowDirection: ArrowDirection.down,
|
||
|
),
|
||
|
dismissTriggerBehavior: PopupDismissTriggerBehavior.onTapArea,
|
||
|
areaBackgroundColor: Colors.transparent,
|
||
|
indicatorOffset: Offset.zero,
|
||
|
// contentOffset: isTablet ? Offset(100, 100) : Offset(0, 100),
|
||
|
onControllerCreated: (controller) {
|
||
|
print('Info Popup Controller Created');
|
||
|
},
|
||
|
onAreaPressed: (InfoPopupController controller) {
|
||
|
controller.dismissInfoPopup();
|
||
|
print('Area Pressed');
|
||
|
},
|
||
|
infoPopupDismissed: () {
|
||
|
// Navigator.pop(context);
|
||
|
print('Info Popup Dismissed');
|
||
|
},
|
||
|
onLayoutMounted: (Size size) {
|
||
|
print('Info Popup Layout Mounted');
|
||
|
},
|
||
|
child: SizedBox(
|
||
|
width: isTablet
|
||
|
? MediaQuery.of(context).size.width * 0.25
|
||
|
: MediaQuery.of(context).size.width * 0.5,
|
||
|
child: Text(
|
||
|
'Programmed Cell Death 1 Receptor | Human Epidermal Growth Factor Receptor 2 +6more',
|
||
|
style: TextStyle(
|
||
|
decoration: TextDecoration.underline,
|
||
|
decorationColor: Colors.blue,
|
||
|
color: Colors.blue,
|
||
|
//fontStyle: FontStyle.italic,
|
||
|
fontSize: 14),
|
||
|
),
|
||
|
),
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|