Flutter 数据表中的颤振图
我想在数据表中映射出一些Flutter 数据表中的颤振图,flutter,mobile,flutter-layout,flutter-provider,flutter-table,Flutter,Mobile,Flutter Layout,Flutter Provider,Flutter Table,我想在数据表中映射出一些数据行的地方得到这个错误 我在前面的一个场景中已经实现了这一点,并且我理解了如何做到这一点,但是在这种场景中,情况似乎有所不同,并且似乎理解了如何定义方法“map”。我想在下图中实现类似的功能,其中列标题是静态的,行是映射出来的 代码如下: import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:providerrest/helpe
数据行
的地方得到这个错误
我在前面的一个场景中已经实现了这一点,并且我理解了如何做到这一点,但是在这种场景中,情况似乎有所不同,并且似乎理解了如何定义方法“map”。我想在下图中实现类似的功能,其中列标题是静态的,行是映射出来的
代码如下:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:providerrest/helpers/apihelper.dart';
import 'package:providerrest/models/post.dart';
import 'package:providerrest/provider/homepageprovider.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
GlobalKey<ScaffoldState> _globalKey = GlobalKey();
_getPosts() async {
var provider = Provider.of<HomePageProvider>(context, listen: false);
var postsResponse = await getPosts();
if (postsResponse.isSuccessful) {
provider.setPostsList(postsResponse.data, notify: false);
} else {
provider.mergePostsList(postsResponse.data, notify: false);
}
provider.setIsHomePageProcessing(false);
}
@override
void initState() {
super.initState();
_getPosts();
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _globalKey,
appBar: AppBar(
title: Text('Provider REST'),
),
body: Consumer<HomePageProvider>(
builder: (_, provider, __) {
return ListView.builder(
itemBuilder: (_, index) {
Post post = provider.getPostByIndex(index);
return DataTable(
columnSpacing: 50,
columns: <DataColumn>[
DataColumn(
label: Text(
'Friendly Name',
style: TextStyle(fontStyle: FontStyle.italic),
),
),
DataColumn(
label: Text(
'Licence Plate',
style: TextStyle(fontStyle: FontStyle.italic),
),
),
DataColumn(
label: Text(
'Delete',
style: TextStyle(fontStyle: FontStyle.italic),
),
),
],
rows: post.map<DataRow>((e) {
return DataRow(
cells: <DataCell>[
DataCell(
Text('${e.friendlyName}'),
),
DataCell(
Text('${e.licencePlate}'),
),
DataCell(
Icon(Icons.delete),
),
],
);
}).toList(),
);
},
itemCount: provider.postsListLength,
);
},
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“包:providerrest/helpers/apihelper.dart”;
导入“包:providerrest/models/post.dart”;
导入“package:providerrest/provider/homepageprovider.dart”;
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
GlobalKey _GlobalKey=GlobalKey();
_getPosts()异步{
var provider=provider.of(上下文,侦听:false);
var postsResponse=await getPosts();
如果(postsResponse.isSuccessful){
provider.setPostsList(postsResponse.data,notify:false);
}否则{
provider.mergePostsList(postsResponse.data,notify:false);
}
provider.setIsHomePageProcessing(false);
}
@凌驾
void initState(){
super.initState();
_getPosts();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
键:_globalKey,
appBar:appBar(
标题:文本(“提供者REST”),
),
主体:消费者(
生成器:(uu,提供者,uu){
返回ListView.builder(
itemBuilder:(\ux,索引){
Post Post=provider.getPostByIndex(索引);
返回数据表(
柱间距:50,
栏目:[
数据列(
标签:文本(
“友好的名字”,
样式:TextStyle(fontStyle:fontStyle.italic),
),
),
数据列(
标签:文本(
"牌照",,
样式:TextStyle(fontStyle:fontStyle.italic),
),
),
数据列(
标签:文本(
“删除”,
样式:TextStyle(fontStyle:fontStyle.italic),
),
),
],
行:post.map((e){
返回数据行(
单元格:[
数据单元(
文本(“${e.friendlyName}”),
),
数据单元(
文本(“${e.licenseplate}”),
),
数据单元(
图标(Icons.delete),
),
],
);
}).toList(),
);
},
itemCount:provider.postsListLength,
);
},
),
);
}
}
后模型
class Post {
int capacity;
String id;
String friendlyName;
String licencePlate;
Post({this.capacity, this.id, this.friendlyName, this.licencePlate});
Post.fromJson(Map<String, dynamic> json) {
capacity = json['capacity'];
id = json['id'];
friendlyName = json['friendlyName'];
licencePlate = json['licencePlate'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['capacity'] = this.capacity;
data['id'] = this.id;
data['friendlyName'] = this.friendlyName;
data['licencePlate'] = this.licencePlate;
return data;
}
}
class Post{
国际能力;
字符串id;
字符串友好名称;
线板;
Post({this.capacity,this.id,this.friendlyName,this.licenseplate});
fromJson(映射json){
容量=json['capacity'];
id=json['id'];
friendlyName=json['friendlyName'];
licencePlate=json['licencePlate'];
}
映射到JSON(){
最终地图数据=新地图();
数据['capacity']=this.capacity;
数据['id']=this.id;
数据['friendlyName']=this.friendlyName;
数据['licenseplate']=此.licenseplate;
返回数据;
}
}
API调用
import 'dart:convert';
import 'package:http/http.dart';
import 'package:providerrest/models/httpresponse.dart';
import 'package:providerrest/models/post.dart';
Future<HTTPResponse<List<Post>>> getPosts() async {
final response =
await get('https://run.mocky.io/v3/d7a00528-176c-402f-850e-76567de3c68d');
if (response.statusCode == 200) {
var body = jsonDecode(response.body)['data'];
List<Post> posts = [];
body.forEach((e) {
Post post = Post.fromJson(e);
posts.add(post);
});
return HTTPResponse<List<Post>>(
true,
posts,
message: 'Request Successful',
statusCode: response.statusCode,
);
} else {
return HTTPResponse<List<Post>>(
false,
null,
message:
'Invalid data received from the server! Please try again in a moment.',
statusCode: response.statusCode,
);
}
}
导入'dart:convert';
导入“包:http/http.dart”;
导入“package:providerrest/models/httpresponse.dart”;
导入“包:providerrest/models/post.dart”;
Future getPosts()异步{
最后答复=
等待得到https://run.mocky.io/v3/d7a00528-176c-402f-850e-76567de3c68d');
如果(response.statusCode==200){
var body=jsonDecode(response.body)['data'];
名单员额=[];
正文.forEach((e){
Post Post=Post.fromJson(e);
增加(员额);
});
返回HTTPResponse(
是的,
帖子,
消息:“请求成功”,
statusCode:response.statusCode,
);
}否则{
返回HTTPResponse(
假,,
无效的
信息:
'接收到来自服务器的无效数据!请稍后重试。',
statusCode:response.statusCode,
);
}
}
供应商:
import 'package:flutter/foundation.dart';
import 'package:providerrest/models/post.dart';
class HomePageProvider extends ChangeNotifier {
bool _isHomePageProcessing = true;
List<Post> _postsList = [];
bool get isHomePageProcessing => _isHomePageProcessing;
setIsHomePageProcessing(bool value) {
_isHomePageProcessing = value;
notifyListeners();
}
List<Post> get postsList => _postsList;
setPostsList(List<Post> list, {bool notify = true}) {
_postsList = list;
if (notify) notifyListeners();
}
mergePostsList(List<Post> list, {bool notify = true}) {
_postsList.addAll(list);
if (notify) notifyListeners();
}
deletePost(Post list) {
_postsList.remove(list);
notifyListeners();
}
addPost(Post post, {bool notify = true}) {
_postsList.add(post);
if (notify) notifyListeners();
}
Post getPostByIndex(int index) => _postsList[index];
int get postsListLength => _postsList.length;
}
导入“包:flift/foundation.dart”;
导入“包:providerrest/models/post.dart”;
类HomePageProvider扩展了ChangeNotifier{
bool_isHomePageProcessing=true;
列表_postsList=[];
bool-get-isHomePageProcessing=>\u-isHomePageProcessing;
setIsHomePageProcessing(布尔值){
_isHomePageProcessing=值;
notifyListeners();
}
List get postsList=>\u postsList;
setPostsList(列表列表,{bool notify=true}){
_postsList=列表;
if(notify)notifyListeners();
}
mergePostsList(列表列表,{bool notify=true}){
_postsList.addAll(列表);
if(notify)notifyListeners();
}
删除帖子(帖子列表){
_postsList.remove(列表);
notifyListeners();
}
addPost(Post Post,{bool notify=true}){
_postsList.add(post);
if(notify)notifyListeners();
}
Post-getPostByIndex(int-index)=>\u-postsList[index];
int get postsList length=>\u postsList.length;
}
我以为我是通过在Post模型中创建一个映射到json()
方法实现的,但似乎我错了
提前感谢您的帮助 我怀疑您需要以下代码 您可以使用List.generate来填充数据行列表,而不是使用ListView.builder
@override
Widget build(BuildContext context) {
return Scaffold(
key: _globalKey,
appBar: AppBar(
title: Text('Provider REST'),
),
body: Consumer<HomePageProvider>(
builder: (_, provider, __) {
return DataTable(
columnSpacing: 50,
columns: <DataColumn>[
DataColumn(
label: Text(
'Friendly Name',
style: TextStyle(fontStyle: FontStyle.italic),
),
),
DataColumn(
label: Text(
'Licence Plate',
style: TextStyle(fontStyle: FontStyle.italic),
),
),
DataColumn(
label: Text(
'Delete',
style: TextStyle(fontStyle: FontStyle.italic),
),
),
],
rows: List.generate(provider._postsList.length, (index) {
Post post = provider.getPostByIndex(index);
return DataRow(
cells: <DataCell>[
DataCell(
Text('${post.friendlyName}'),
),
DataCell(
Text('${post.licencePlate}'),
),
DataCell(
Icon(Icons.delete),
),
],
);
}),
);
},
),
);
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
键:_globalKey,
appBar:appBar(
标题:文本(“提供者REST”),
),