Как добавить список в повторно используемый DataRow из API во Flutter | Getx
Я добавил список в DataRow из API с помощью List.generate, но когда я пытаюсь создать общий DataTable для его повторного использования, как я могу добавить list.generate при вызове этого виджета. есть ли способ сделать это? или есть другой способ, кроме list.generate?
Многоразовый или общий виджет.
class MyPurchaseDataTable extends StatelessWidget {
final String column1;
final String column2;
final String column3;
final String row1;
final String row2;
final String row3;
const MyPurchaseDataTable({
Key? key,
required this.row1,
required this.row2,
required this.row3,
required this.column1,
required this.column2,
required this.column3,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return FittedBox(
child: DataTable(
columns: [
const DataColumn(
label: CustomUnderlineText(text: ""),
),
DataColumn(
label: CustomUnderlineText(text: column1),
),
DataColumn(
label: CustomUnderlineText(text: column2),
),
DataColumn(
label: CustomUnderlineText(text: column3),
)
],
rows: [
DataRow(
cells: <DataCell>[
DataCell(Icon(
Icons.square,
size: 12.0.sp,
color: colorPrimary,
)),
DataCell(CustomTextDataCell(text: row1)),
DataCell(CustomTextDataCell(text: row2)),
DataCell(CustomTextDataCell(text: row3))
],
),
],
),
);
}
}
Обычно я так звоню
rows: List.generate(
controller.myPackageList.length,
(index) {
var myAttenList = controller.myPackageList[index];
return DataRow(cells: [
DataCell(
Text(myAttenList.xattendancedate.toString()),
),
DataCell(
Text(myAttenList.xattendancetime.toString()),
),
DataCell(
Text(myAttenList.xreaderName.toString()),
),
]);
},
).toList(),
Контроллер
class MyPackagesController extends GetxController {
SecureStorage secureStorage = SecureStorage();
final myPackageList = <MyPackageModel>[].obs;
@override
void onInit() async {
super.onInit();
await fetchMyAttendance();
}
Future fetchMyAttendance() async {
var response = await MyPackageRepo().myPackage();
if (response.status == ApiResponseStatus.completed) {
if (response.data != null) {
myPackageList.value = response.data!;
}
} else {
Get.defaultDialog(title: response.message.toString());
}
}
}
Часть представления
Column(
children: [
PurchasePackageHeading(
heading: "My Membership Package",
color: colorPrimary,
height: 46.0.h,
style: TextStyle(fontSize: 18.0.sp, color: Colors.white),
),
CustomSizedBox(height: 4.0.h),
MyPurchaseDataTable(
length: controller.myPackageList.length,
myList: controller.myPackageList,
row1: 'Package Name', // i want to assign the list here
row2: '01-11-2021', // i want to assign the list here
row3: '01-11-2021', // i want to assign the list here
column1: 'Package Name',
column2: 'Start Date',
column3: 'Expire Date',
),
PurchasePackageHeading(
heading: "My Personal Training",
color: colorPrimary,
height: 46.0.h,
style: TextStyle(fontSize: 18.0.sp, color: Colors.white),
),
CustomSizedBox(height: 4.0.h),
const MyPurchaseDataTable(
row1: 'Package Name', // i want to assign the list here
row2: '01-11-2021', // i want to assign the list here
row3: '01-11-2021', // i want to assign the list here
column1: 'Package Name',
column2: 'Start Date',
column3: 'Expire Date',
),
],
),