为什么我不能检索数据? (Flutter-Rest API)

时间:2019-08-26 09:57:58

标签: json rest flutter jwt

我一直在尝试使用REST API从数据库中检索数据。我的代码中没有错误,但是模拟器中没有显示任何数据,并且一直显示循环进度指示器(这意味着没有数据)

这是因为要从共享首选项中获取令牌吗?还是其他?

这是我的getToken代码:

    String token;

  Future<String> getToken() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String token = prefs.getString("token");
    return token;
  }

这是我的ShowPost代码:

Future<List<Post>> showPosts() async {
    String token = await getToken();

    var data = await http.get(
      "https://api-wisapedia.herokuapp.com/posts?sortBy=createdAt:desc",
      headers: {HttpHeaders.authorizationHeader: 'Bearer $token'},
    );
    var dataDecoded = json.decode(data.body);

    List<Post> posts = List();
    dataDecoded.forEach((post) {
      post.add(post["destination"], post["owner"], post["image"]);
    });
    return posts;
  }

这是我的身体代码:

FutureBuilder(
            future: showPosts(),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return ListView.builder(
                    itemCount: snapshot.data.length,
                    itemBuilder: (context, index) {
                      return Card(
                        color: Color(0xFFE1F5FE),
                        child: Column(
                          mainAxisSize: MainAxisSize.min,
                          children: <Widget>[
                            ListTile(
                              leading: Image(
                                  image: AssetImage('lib/images/pantai.jpg')),
                              title: Text(snapshot.data[index].title),
                              subtitle: Text(snapshot.data[index].destination),
                            ),
                            ButtonTheme.bar(
                              // make buttons use the appropriate styles for cards
                              child: ButtonBar(
                                children: <Widget>[
                                  FlatButton(
                                    child: const Text('DETAILS'),
                                    onPressed: () {
                                      Navigator.push(
                                        context,
                                        MaterialPageRoute(builder: (context) {
                                          return DetailPost();
                                        }),
                                      );
                                    },
                                  ),
                                  FlatButton(
                                    child: const Text('JOIN'),
                                    onPressed: () {
                                      /* ... */
                                    },
                                  ),
                                ],
                              ),
                            ),
                          ],
                        ),
                      );
                    });
              } else {
                return Align(
                  alignment: FractionalOffset.center,
                  child: CircularProgressIndicator(),
                );
              }
            })

我该如何解决?

1 个答案:

答案 0 :(得分:0)

在将来的构建器的将来的参数中删除() future : showPosts不是future :showPosts()

编辑

FutureBuilder替换为FutureBuilder<List<Post>>,并将AsyncSnapshot替换为AsyncSnapshot<List<Post>>,以指定传入数据的数据类型。