'List<dynamic>' 型不是 'function result' 的 'List<MaintenanceInfo>' 型的子类型



我想将List data;(列表<动态>数据(更改为List<MaintenanceInfo> data;

class MaintenanceInfo {
final String serial;
MaintenanceInfo({this.serial,});
factory MaintenanceInfo.fromJson(Map<String, dynamic> json) {
return new MaintenanceInfo(
serial: json['serial'], );}}

或者有没有任何方法可以像forEach一样提取JSON数据?

我正努力效仿这个例子(https://stackoverflow.com/a/50569613/12908336)我正面临这样的问题。

看看我为您创建的这个例子:

import 'dart:async';
import 'package:flutter/material.dart';
import 'dart:convert';
//import 'package:http/http.dart' as http;
void main() => runApp(new MaterialApp(
home: new HomePage(),
debugShowCheckedModeBanner: false,
));
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => new _HomePageState();
}
class _HomePageState extends State<HomePage> {
TextEditingController controller = new TextEditingController();
String apiData =
'''{"ResultText": "Success","ResultStatus": 0,"data": [{"serial": "sample1"},{"serial": "sample2"},{"serial": "sample3"},{"serial": "sample4"},{"serial": "sample5"},{"serial": "sample6"}]} ''';
// Get json result and convert it to model. Then add
Future<Null> getUserDetails() async {
// final response = await http.get(url);
// final responseJson = json.decode(response.body);
// this is where you apis gets hit i have taken the sample json you provided.
final maintenanceInfo = maintenanceInfoFromJson(apiData);
setState(() {
/*   for (Map user in responseJson) {
_userDetails.add(UserDetails.fromJson(user));
} */
maintenanceInfo.data.forEach((element) {
_userDetails.add(element);
});
});
}
@override
void initState() {
super.initState();
getUserDetails();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Home'),
elevation: 0.0,
),
body: new Column(
children: <Widget>[
new Container(
color: Theme.of(context).primaryColor,
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Card(
child: new ListTile(
leading: new Icon(Icons.search),
title: new TextField(
controller: controller,
decoration: new InputDecoration(
hintText: 'Search', border: InputBorder.none),
onChanged: onSearchTextChanged,
),
trailing: new IconButton(
icon: new Icon(Icons.cancel),
onPressed: () {
controller.clear();
onSearchTextChanged('');
},
),
),
),
),
),
new Expanded(
child: _searchResult.length != 0 || controller.text.isNotEmpty
? new ListView.builder(
itemCount: _searchResult.length,
itemBuilder: (context, i) {
return new Card(
child: new ListTile(
title: new Text(_searchResult[i].serial),
),
margin: const EdgeInsets.all(0.0),
);
},
)
: new ListView.builder(
itemCount: _userDetails.length,
itemBuilder: (context, index) {
return new Card(
child: new ListTile(
title: new Text(_userDetails[index].serial),
),
margin: const EdgeInsets.all(0.0),
);
},
),
),
],
),
);
}
onSearchTextChanged(String text) async {
_searchResult.clear();
if (text.isEmpty) {
setState(() {});
return;
}
_userDetails.forEach((userDetail) {
if (userDetail.serial.contains(text)) _searchResult.add(userDetail);
});
setState(() {});
}
}
List<Serials> _searchResult = [];
List<Serials> _userDetails = [];
// To parse this JSON data, do
//
//     final maintenanceInfo = maintenanceInfoFromJson(jsonString);
MaintenanceInfo maintenanceInfoFromJson(String str) =>
MaintenanceInfo.fromJson(json.decode(str));
String maintenanceInfoToJson(MaintenanceInfo data) =>
json.encode(data.toJson());
class MaintenanceInfo {
MaintenanceInfo({
this.resultText,
this.resultStatus,
this.data,
});
String resultText;
int resultStatus;
List<Serials> data;
factory MaintenanceInfo.fromJson(Map<String, dynamic> json) =>
MaintenanceInfo(
resultText: json["ResultText"],
resultStatus: json["ResultStatus"],
data: List<Serials>.from(json["data"].map((x) => Serials.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"ResultText": resultText,
"ResultStatus": resultStatus,
"data": List<dynamic>.from(data.map((x) => x.toJson())),
};
}
class Serials {
Serials({
this.serial,
});
String serial;
factory Serials.fromJson(Map<String, dynamic> json) => Serials(
serial: json["serial"],
);
Map<String, dynamic> toJson() => {
"serial": serial,
};
}

如果有效,请告诉我。

相关内容

最新更新