首页 > 解决方案 > 颤振,我的 DataTable 和 php Json 输出问题......无法解决

问题描述

现在从三天开始,我正试图让它工作(json数据和Flutter Datatable)它似乎一切正常,我得到了php json数据并且我解码了..但仍然无法找到将它动态放入DataTable行的方法! !

这是处理http请求和解码json数据的主要代码

这是解码前的json数据..

{"results":[{"ID":"1","TYPE_ID":"11","TYPE":"REPORT","SUB":"GOING HOLIDAY","USER_ID":"11","CREATE_DATE":"2021-05-10"},{"ID":"2","TYPE_ID":"11","TYPE":"COMMENTS","SUB":"GOING
HOLIDAY","USER_ID":"11","CREATE_DATE":"2021-05-10"}]}

这是在编码之后

{results: [{ID: 1, TYPE_ID: 11, TYPE: REPORT, SUB: GOING HOLIDAY, USER_ID: 11, CREATE_DATE: 2021-05-10}, {ID: 2, TYPE_ID: 11, TYPE: COMMENTS, SUB: GOING HOLIDAY, USER_ID: 11,CREATE_DATE: 2021-05-10}]}

处理http和json的函数

Future noti_table() async {
  try {
    var url = Uri.parse('192.168.1.111');
    http.Response response = await http.get(url);

    if (response.statusCode == 200) {
      //return response.body;
      // var data = json.decode(utf8.decode(response.bodyBytes));
      print(response.body);
      final responseJson = jsonDecode(response.body);
      print(responseJson);
      Sale sale = new Sale.fromJson(responseJson);
      return sale;
      //print("Result: ${sale.results}");
      //return sale;
    }
  } catch (e) {
    print(e);
    return null;
  }
}

处理json结构的类

class Sale {
  final List<Results> results;

  Sale({this.results});
  factory Sale.fromJson(Map<String, dynamic> json) {
    return Sale(
      results: parsedResult(json),
    );
  }
  static List<Results> parsedResult(resultJson) {
    var list = resultJson['results'] as List;
    List<Results> resultList =
        list.map((data) => Results.fromJson(data)).toList();
    return resultList;
  }
}

class Results {
  final String id;
  final String type;
  Results({this.id, this.type});
  factory Results.fromJson(Map<String, dynamic> json) {
    //print(json['TYPE']);
    return Results(
      id: json['ID'],
      type: json['TYPE'],
    );
  }
}

请注意,现在我只想显示 ID 和类型。

  Future get_table_info() async {
    var output = await noti_table();
    return output;
  }

以及使用 FutureBuilder 查看该数据表的代码,问题代码“return SingleChildScrollView(”

 Widget build(BuildContext context) {
    return Container(
      child: FutureBuilder(
        future: get_table_info(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          if (snapshot.data == null) {
            return Container(child: Center(child: CircularProgressIndicator()));
          } else {
            return SingleChildScrollView(
              scrollDirection: Axis.horizontal,
              child: SingleChildScrollView(
                child: DataTable(
                  columns: [
                    DataColumn(label: Text('ID'), tooltip: 'ID'),
                    DataColumn(label: Text('Type'), tooltip: 'Type'),
                  ],
                  rows: snapshot.data
                      .map((data) =>
                          // we return a DataRow every time
                          DataRow(
                              // List<DataCell> cells is required in every row
                              cells: [
                                DataCell(Text('HOW TO show id HER')),
                                DataCell(Text('HOW TO show TYPE HER')),
                              ]))
                      .toList(),
                ),
              ),
            );
          }
        },
      ),
    );
  }

开始使用 Future builder 后收到的错误...

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building FutureBuilder<dynamic>(dirty, state:
_FutureBuilderState<dynamic>#6bf96):
'map'
Dynamic call of null.
Receiver: Instance of 'Sale'
Arguments: [Instance of '(dynamic) => DataRow']

The relevant error-causing widget was:
  FutureBuilder<dynamic>
  file:///C:/Users/dhd20/Desktop/2022/op%20web/flutter_application_1/lib/screens/NotiTable.dart:29:14

When the exception was thrown, this was the stack:
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 236:49      throw_
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 721:3   defaultNoSuchMethod
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 61:12                 noSuchMethod
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 716:31  noSuchMethod
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 270:9   _checkAndCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 388:10  callMethod
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 392:5   dsend
packages/flutter_application_1/screens/NotiTable.dart 78:10                                                                    <fn>
packages/flutter/src/widgets/async.dart 773:48                                                                                 build
packages/flutter/src/widgets/framework.dart 4612:27                                                                            build
packages/flutter/src/widgets/framework.dart 4495:15                                                                            performRebuild
packages/flutter/src/widgets/framework.dart 4667:11                                                                            performRebuild
packages/flutter/src/widgets/framework.dart 4189:5                                                                             rebuild
packages/flutter/src/widgets/framework.dart 2694:31                                                                            buildScope
packages/flutter/src/widgets/binding.dart 873:9                                                                                drawFrame
packages/flutter/src/rendering/binding.dart 319:5                                                                              [_handlePersistentFrameCallback]
packages/flutter/src/scheduler/binding.dart 1144:15                                                                            [_invokeFrameCallback]
packages/flutter/src/scheduler/binding.dart 1082:9                                                                             handleDrawFrame
packages/flutter/src/scheduler/binding.dart 998:5                                                                              [_handleDrawFrame]
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 896:13                invoke
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 145:5                 invokeOnDrawFrame
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine.dart 259:45                                    <fn>

════════════════════════════════════════════════════════════════════════════════════════════════════

如何在行中显示类型、ID 并在此问题上显示红色..

有任何建议

问候

标签: phpflutterflutter-layoutflutter-webflutter-test

解决方案


推荐阅读