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”),
),