我是flutter的新手,但我做了很多工作来学习项目所需的一切。
我有一个服务器使用HTTP:发送的JSON
[{"equipe1":"PSG","equipe2":"DIJON","type_prono":"1N2"},
{"equipe1":"MONACO","equipe2":"REIMS","type_prono":"1N2"},
{"equipe1":"TOULOUSE","equipe2":"RENNES","type_prono":"1N2"},`{"equipe1":"MONTPELLIER","equipe2":"STRASBOURG","type_prono":"1N2"},{"equipe1":"AMIENS","equipe2":"METZ","type_prono":"1N2"},{"equipe1":"BREST","equipe2":"ANGERS","type_prono":"1N2"},{"equipe1":"LORIENT","equipe2":"CHAMBLY","type_prono":"1N2"}]`
我试着把它设置成一个数据表小部件,但这似乎很复杂
现在是我的全部代码:
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'dart:async';
// Create a Form widget.
class Affiche_grille extends StatefulWidget {
@override
Affiche_grille_State createState() {
return Affiche_grille_State();
}
}
// Create a corresponding State class.
// This class holds data related to the form.
class Affiche_grille_State extends State<Affiche_grille> {
@override
final _formKey = GlobalKey<FormState>();
Grille_display() async {
// SERVER LOGIN API URL
var url = 'http://www.axis-medias.fr/game_app/display_grid.php';
// Store all data with Param Name.
var data = {'id_grille': 1};
// Starting Web API Call.
var response = await http.post(url, body: json.encode(data));
// Getting Server response into variable.
var match = json.decode(response.body);
return match;
}
Widget build(BuildContext context) {
// Build a Form widget using the _formKey created above.
var valjson = Grille_display();
var ListEquipe=EquipeList(breed: [valjson]);
return Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
DataTable(
columnSpacing: 20,
columns: [
DataColumn(
label: Text("Eq 1"),
numeric: false,
tooltip: "",
),
DataColumn(
label: Text("Eq 2"),
numeric: false,
tooltip: "",
),
DataColumn(
label: Text("Type pro"),
numeric: false,
tooltip: "",
),
],
rows: ListEquipe.breed.map((Match_detail) => DataRow(
cells: [
DataCell(
Text(Match_detail.equipe1.toString()),
),
DataCell(
Text(Match_detail.equipe2.toString()),
),
DataCell(
Text(Match_detail.typeProno.toString()),
),
]),
).toList(),
)
],
)
);
}
}
class Match_detail {
String equipe1;
String equipe2;
String typeProno;
Match_detail({this.equipe1, this.equipe2, this.typeProno});
Match_detail.fromJson(Map<String, dynamic> json) {
equipe1 = json['equipe1'];
equipe2 = json['equipe2'];
typeProno = json['type_prono'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['equipe1'] = this.equipe1;
data['equipe2'] = this.equipe2;
data['type_prono'] = this.typeProno;
return data;
}
}
class EquipeList {
List <Match_detail> breed;
EquipeList({this.breed});
factory EquipeList.fromJson(List<dynamic> json) {
return EquipeList(
breed: json
.map((e) => Match_detail.fromJson(e as Map<String, dynamic>))
.toList());
}
}
我现在已经更改了最后的信息,但现在没有来自flutter/dart的错误,但在android上模拟时出现错误,我有一个错误
类型"Future"不是类型"Match_detail"的子类型
因为您不能从类本身访问实例成员。
class EquipeList {
List<Match_detail> breeds;
EquipeList({this.breeds});
...
}
breeds
是实例成员(没有static
修饰符(。
您需要构造一个实例,然后访问其成员,而不是EquipeList.breeds
。
var equipeList = EquipeList(breeds: [ ... ]);
...
rows: equipeList.breeds.map( ... ).toList()
静态成员/实例成员
class Demo {
// Static member
static int var1;
// Instance member
int var2;
}
class AnotherClass {
void main() {
// Accessing static member via class
Demo.var1 = 15; // works
// Accessing instance member via instance
var inst = Demo();
inst.var2 = 24; // works
// Accessing static member via instance
inst.var1 = 45; // fails
// Accessing instance member via class
Demo.var2 = 64; // fails
}
}
使用FutureBuilder构建小工具。
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Match_detail>>(
future: Grille_display(),
builder: (context, snapshot) {
if (!snapshot.hasData) return Container();
return Form(/* ... */);
});
}
Future<List<Match_detail>> Grille_display() async {
// ...
return EquipeList.fromJson(response.body);
}
将JSON字符串转换为列表。
class EquipeList {
// ...
factory EquipeList.fromJson(String jsonArrayString) {
List<Map<String, dynamic>> jsonMapList =
json.decode(jsonArrayString).cast<Map<String, dynamic>>();
List<Match_detail> result = jsonMapList
.map((json) => Match_detail.fromJson(json))
.cast<Match_detail>()
.toList();
return EquipeList(breed: result);
}
}
请参阅有效的Dart:Style,如果我们在整个Dart生态系统中使用一致的风格,我们所有人都可以更容易地学习和贡献彼此的代码。