我尝试遵循Flutter文档中的Future builder小部件指南。
然而,当我调用fetch并试图显示信息时,我得到了'Instance of 'Snippet‘。
我注意到,当我jsonDecode(res.body)时,它正确地显示了响应的JSON,但是在我通过Snippet.fromJson运行它并返回之后,它是当我得到'Instance of 'Snippet‘的时候。
这是我创建类的代码,在它下面是我调用它的地方。
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
class SnippetProvider extends ChangeNotifier {
final String snippetUrl = 'https://endpoint';
Future<Snippet> getSnippets() async {
final res = await http.get(snippetUrl);
if (res.statusCode == 200) {
debugPrint('data: ${jsonDecode(res.body}'); //correct info
return Snippet.fromJson(jsonDecode(res.body));
} else {
throw "No snippets available";
}
}
}
class Snippet {
final int book;
final String title;
final String list;
final String body;
Snippet({this.book, this.title, this.list, this.body});
factory Snippet.fromJson(Map<String, dynamic> json) {
return Snippet(
book: json['book'] as int,
title: json['title'] as String,
list: json['list'] as String,
body: json['body'] as String,
);
}
}class _ShareState extends State<Share> {
Future<Snippet> snippets;
Future<Snippet> _future;
var checkboxStatus = false;
var snippetsToBeShared;
final SnippetProvider method = new SnippetProvider();
@override
void initState() {
snippetsToBeShared = new List();
super.initState();
snippets = pdfSnippets();
}
Future<Snippet> pdfSnippets() async {
final data = await method.getSnippets();
debugPrint('data: $data');
//! this code breaks the app
// data is an obj with nested objs
// setState(() => {
// processedSnippets.add(data),
// processedSnippets[0]
// .map((snippet) => processedSnippets.add(snippet))
// });
return data;
}
child: FutureBuilder<Snippet>(
future: snippets,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return ListView.builder(
//* will have to hide the eccess snippet with overflow
//? and have a max width to fit the trailing checkbox
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('${snapshot.data.body}'),
subtitle: Text('${snapshot.data.title}'),
[...]
)发布于 2021-01-06 04:06:29
jsonDecode解析字符串并返回结果Json对象。因此,您可以在调试控制台中看到已解析的Json对象。然后使用fromJson(jsonDecode(res.body))构造代码片段对象,得到的是真正的代码片段,而不是Json对象。然后你会得到“Instance of”代码段。
https://stackoverflow.com/questions/65585668
复制相似问题