getListWidget method
Widget
getListWidget(
- Widget? itemBuilder(
- T item
- Widget? onEmptyList,
- Widget? dividerBuilder(
- dynamic value
- PartOfDate partOfDate = PartOfDate.day,
- Key? key,
Виджет списка объектов
Если задать grFieldName
в контроллере!!! - то сгруппирует элементы по заданному полю.
Автоматически добавит в начало сортировку по grFieldName
в направлении sortDirection
(по умолчанию NsgSortingDirection.ascending
).
После добавит sortingParams
, а затем getRequestFilter.sorting
.
В случае, если grFieldName
- дата, будет считать объеты различными согласно partOfDate
.
Для каждой группы будет выведен заголовок dividerBuilder
, а если список пуст - onEmptyList
.
matchC.getListWidget(
(match) {
return
child: MatchNewCard(
matchItem: match
);
},
dividerBuilder: (currentDate) {
currentDate as DateTime;
return Container(
margin: const EdgeInsets.only(bottom: 10, right: 20, left: 20),
padding: const EdgeInsets.all(5),
width: double.infinity,
decoration: BoxDecoration(color: nsgtheme.colorSecondary, borderRadius: BorderRadius.circular(6)),
child: Text(
'${NsgDateFormat.dateFormat(currentDate, format: (currentDate.year < DateTime.now().year)
? 'dd MMMM yyyy, EE'
: 'dd MMMM, EE', locale: FutbolistaApp.defaultLocale.languageCode)}'.toUpperCase(),
textAlign: TextAlign.center,
),
);
},
),
Implementation
Widget getListWidget(
Widget? Function(T item) itemBuilder, {
Widget? onEmptyList,
Widget? Function(dynamic value)? dividerBuilder,
PartOfDate partOfDate = PartOfDate.day,
Key? key,
}) => obx((state) {
DataGroupList dataGroups;
if (grFieldName != null) {
dataGroups = DataGroupList(_getGroupsByFieldName(grFieldName!, partOfDate), needDivider: true);
} else {
dataGroups = DataGroupList([DataGroup(data: items, groupFieldName: "")]);
}
//scrollController.heightMap.clear();
scrollController.dataGroups = dataGroups;
Future.delayed(Duration(seconds: 0), () => scrollController.jumpTo(scrollController.lastOffset));
return ListView.builder(
controller: scrollController,
itemCount: scrollController.dataGroups.length + (items.isEmpty ? 1 : 2),
itemBuilder: (context, i) {
if (items.isEmpty) {
return onEmptyList ?? Padding(padding: EdgeInsets.only(top: 15, left: 20), child: Text(tran.empty_list));
} else {
if (i > scrollController.dataGroups.length) {
if (scrollController.status == NsgLoadingScrollStatus.loading) {
return NsgBaseController.getDefaultProgressIndicator();
} else {
return const SizedBox();
}
} else {
var elem = scrollController.dataGroups.getElemet(i);
if (elem.isDivider) {
if (dividerBuilder != null) {
return Container(
key: elem.key,
/*onHeight: (h) => scrollController.heightMap.addAll({i: h}),*/ child: dividerBuilder(elem.value) ?? SizedBox(),
);
} else {
return Container(key: elem.key, /*onHeight: (h) => scrollController.heightMap.addAll({i: h}),*/ child: elem.group.goupDividerWidget);
}
} else {
return Container(
key: elem.key,
/*onHeight: (h) => scrollController.heightMap.addAll({i: h}),*/ child: itemBuilder(elem.value as T) ?? SizedBox(),
);
}
}
// if (i >= items.length) {
// if (scrollController.status == NsgLoadingScrollStatus.loading) {
// return NsgBaseController.getDefaultProgressIndicator();
// } else {
// return const SizedBox();
// }
// } else {
// return itemBuilder(items[i]);
// }
}
},
);
});