第 1 步:
我已经准备好虚拟json数据,如果实时情况不同,我们必须在getData()方法中做一些修改
[
{
"REPORT_DETAIL": [
{
"firstName": "Shiv",
"lastName": "A",
"docNo": "0",
"docDate": "05-Jan-2021",
"address": "Bangalore",
"stateName": "35-ANDAMAN & NICOBAR ISLANDS",
"panNumber": "AAAPZ1234C",
"adharNumber": "678954321234"
},
{
"firstName": "Bala",
"lastName": "A",
"docNo": "0",
"docDate": "05-Jan-2021",
"address": "Bangalore",
"stateName": "35-ANDAMAN & NICOBAR ISLANDS",
"panNumber": "AAAPZ1234C",
"adharNumber": "678954321234"
},
{
"firstName": "Deva",
"lastName": "A",
"docNo": "0",
"docDate": "05-Jan-2021",
"address": "Bangalore",
"stateName": "35-ANDAMAN & NICOBAR ISLANDS",
"panNumber": "AAAPZ1234C",
"adharNumber": "678954321234"
}
]
}
]
第 2 步:
--> 填充 DataGrid 中的行所需的源。
class EmployeeDataGridSource extends DataGridSource<dynamic> {
List<dynamic> employeeData = [];
@override
List<dynamic> get dataSource => employeeData.map<dynamic>((e) {
return e.entries.toList();
}).toList();
@override
dynamic getValue(dynamic data, String columnName) {
return data.firstWhere((e) => e.key == columnName).value;
}
}
第 3 步:
---> 我使用了本地 json 和提供的数据,所以我使用了 FutureBuilder。如果您直接从 firebase 或 azure 获取,请使用 SteamBuilder
class _EmployeesListState extends State<EmployeesList> {
EmployeeDataGridSource _employeeDataGridSource;
@override
void initState() {
super.initState();
_employeeDataGridSource = EmployeeDataGridSource();
}
Future<List<dynamic>> getData() async {
String responseBody = await rootBundle.loadString("assets/demo_data.json");
var data = await json.decode(responseBody);
data = data[0]['REPORT_DETAIL'];
_employeeDataGridSource.employeeData = [];
for (final val in data) {
_employeeDataGridSource.employeeData.add(val);
}
return Future<List<dynamic>>.value(data);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Dynamic SfDataGrid'),
),
body: FutureBuilder<List<dynamic>>(
future: getData(),
builder: (context, snapShot) {
if (snapShot.hasError ||
snapShot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
dynamic headerData = snapShot.data[0];
headerData = headerData.keys.toList();
return SfDataGrid(
source: _employeeDataGridSource,
columns: headerData
.map<GridColumn>((e) => GridTextColumn(
mappingName: e,
overflow: TextOverflow.clip,
headerTextOverflow: TextOverflow.clip,
maxLines: 2,
padding: EdgeInsets.all(2),
headerPadding: EdgeInsets.all(2)))
.toList());
},
));
}
}
我在代码中使用了动态类型..您可以将其正确转换为必要的步骤