首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在类与类之间抛出颤动数组的变量结果

如何在类与类之间抛出颤动数组的变量结果
EN

Stack Overflow用户
提问于 2019-05-27 06:55:10
回答 1查看 729关注 0票数 0

我正在尝试将json process的函数结果从类传输到另一个类。这是我呈现的json:

代码语言:javascript
复制
[
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat",
    "body": "quia et suscipit\nsuscipit"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi"
  }
]

当我试图在该方法中打印时,方法的结果会显示出来,但没有打印在目标类上。以下是我的代码:

源类:

代码语言:javascript
复制
class DataNews {
  final String id;
  final String title;
  final String body;

  DataNews({this.id, this.title, this.body});

  factory DataNews.fromJson(json) {
    return DataNews(id: json['id'].toString(), title: json['title'], body: json['body']);
  }
}

getData() async {
    final response = await http.get('https://jsonplaceholder.typicode.com/posts');
    List data = json.decode(response.body);
    final items = (data).map((i) => new DataNews.fromJson(i));
    print('Satu');
    print(items.elementAt(1).id);
    print(items.elementAt(1).title);
    print(items.elementAt(1).body);
    print('Dua');
    return items;
}

Destionation类:

代码语言:javascript
复制
class News extends StatefulWidget {  
  @override
  _NewsState createState() => _NewsState(post: getData());
}

class _NewsState extends State<News> {
  Iterable<dynamic> post;
  _NewsState({Key key, this.post});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Text(post.elementAt(0).title),
      ),
    );
  }
}

我想在Container上展示一个结果。如何做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 07:42:36

首先,您的方法getData()不返回Iterable,它返回Future<Iterable>,但是如果它返回Future<List>会更好。请对您正在使用的类型进行注释,这将使您的工作更轻松。

代码语言:javascript
复制
Future<List<DataNews>> getData() async {
  final response = await http.get('https://jsonplaceholder.typicode.com/posts');
  List data = json.decode(response.body);
  List<DataNews> items = data.map((i) => DataNews.fromJson(i)).toList();
  return items;
}

其次,您不应该将任何数据传递给_NewsState。要么数据来自父Widget并存储在News中,要么您在_NewsState内部获取数据。FutureBuilder可以帮助您显示来自Future的内容。

代码语言:javascript
复制
class News extends StatefulWidget {
  @override
  _NewsState createState() => _NewsState();
}

class _NewsState extends State<News> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: getData(), // Fetch the data
        builder: (_, AsyncSnapshot snapshot) {
          if (snapshot.hasData) {
            // If your List got fetched, them show each DataNews using a ListView
            List<DataNews> newsList = snapshot.data;
            return ListView.builder(
              itemCount: newsList.length,
              itemBuilder: (_, int index) {
                return Container(
                  child: Text(newsList[index].title),
                );
              },
            );
          } else {
            // If you have no data, show a progress indicator
            return Center(
              child: CircularProgressIndicator(),
            );
          }
        },
      ),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56317977

复制
相关文章

相似问题

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