首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><Future>获取调用返回“Snippet”的实例

<Future>获取调用返回“Snippet”的实例
EN

Stack Overflow用户
提问于 2021-01-06 03:54:14
回答 1查看 43关注 0票数 0

我尝试遵循Flutter文档中的Future builder小部件指南。

然而,当我调用fetch并试图显示信息时,我得到了'Instance of 'Snippet‘。

我注意到,当我jsonDecode(res.body)时,它正确地显示了响应的JSON,但是在我通过Snippet.fromJson运行它并返回之后,它是当我得到'Instance of 'Snippet‘的时候。

这是我创建类的代码,在它下面是我调用它的地方。

代码语言:javascript
复制
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,
    );
  }
}
代码语言:javascript
复制
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}'),
                  [...]
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 04:06:29

jsonDecode解析字符串并返回结果Json对象。因此,您可以在调试控制台中看到已解析的Json对象。然后使用fromJson(jsonDecode(res.body))构造代码片段对象,得到的是真正的代码片段,而不是Json对象。然后你会得到“Instance of”代码段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65585668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档