我使用Mysql数据库作为颤振Web应用程序的后端。我创建了api和模型,以便从mysql获取数据。我能够以Json格式获得表数据。我能够从浏览器中获取json数据。我想获取这些数据到paginatedDataTable上的颤振网页应用程序。我面临的问题是如何将这些数据输入到paginatedDataTable中。PLease帮我做这件事。如何在颤振web应用程序中将json数据提取到paginatedDataTable。
下面的
是从浏览器获取的json数据:
[{"empid":1,"empname":"empname","empemail":"email1"},{"empid":2,"empname":"name2","empemail":"email2"},{"empid":3,"empname":"t1","empemail":"e1"},{"empid":7,"empname":"t2","empemail":"e2"}]下面的
是API:
import 'package:http/http.dart' as http;
import 'employees_model.dart';
Future<List> fetchEmployees() async {
Uri url = Uri.parse("http://localhost:3000/employees_router/all");
final response = await http.get(url);
return employeesFromJson(response.body);
}下面的
是员工模型:
import 'dart:convert';
List<Employees> employeesFromJson(String str) =>
List<Employees>.from(json.decode(str).map((x) => Employees.fromJson(x)));
String employeesToJson(List<Employees> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Employees {
Employees({
required this.id,
required this.name,
required this.email,
});
int id;
String name;
String email;
factory Employees.fromJson(Map<String, dynamic> json) => Employees(
id: json["empid"],
name: json["empname"],
email: json["empemail"],
);
Map<String, dynamic> toJson() => {
"empid": id,
"empname": name,
"empemail": email,
};
}下面是我使用paginatedDataTable编写的不完整示例代码:
import 'package:flutter/material.dart';
import 'package:webappmysql/employees_model.dart';
import 'package:webappmysql/employees_api.dart';
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Fetch Data Example'),
),
body: Container(
padding: const EdgeInsets.all(16.0),
child: FutureBuilder(
future: fetchEmployees(),
builder: (BuildContext ctx, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
//shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
Employees employee = snapshot.data[index];
////return Text(user.title);
return PaginatedDataTable(
source: _dataSource,
header: const Text('Employees'),
columns: const [
DataColumn(label: Text('ID')),
DataColumn(label: Text('Name')),
DataColumn(label: Text('Email')),
],
columnSpacing: 100,
horizontalMargin: 10,
rowsPerPage: 8,
showCheckboxColumn: false,
);
// return ListTile(
// title: Text(employee.id.toString()),
// subtitle: Text(employee.name),
// contentPadding: const EdgeInsets.only(bottom: 20.0),
// );
},
);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
// By default, show a loading spinner.
return const CircularProgressIndicator();
},
),
),
);
}
}发布于 2022-01-27 20:19:52
将您的HomePage更改为此。
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Fetch Data Example'),
),
body: FutureBuilder(
future: fetchEmployees(),
builder: (BuildContext ctx, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return SingleChildScrollView(
scrollDirection: Axis.vertical,
child: PaginatedDataTable(
source: dataSource(snapshot.data),
header: const Text('Employees'),
columns: const [
DataColumn(label: Text('ID')),
DataColumn(label: Text('Name')),
DataColumn(label: Text('Email')),
],
showCheckboxColumn: false,
),
);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
// By default, show a loading spinner.
return const CircularProgressIndicator();
},
),
);
}
DataTableSource dataSource(List<Employees> employeesList) =>
MyData(dataList: employeesList);
}
class MyData extends DataTableSource {
MyData({required this.dataList});
final List<Employees> dataList;
// Generate some made-up data
@override
bool get isRowCountApproximate => false;
@override
int get rowCount => dataList.length;
@override
int get selectedRowCount => 0;
@override
DataRow getRow(int index) {
return DataRow(
cells: [
DataCell(
Text(dataList[index].id.toString()),
),
DataCell(
Text(dataList[index].name),
),
DataCell(
Text(dataList[index].email),
),
],
);
}
}https://stackoverflow.com/questions/70859513
复制相似问题