【问题标题】:Flutter Dart Turn String into List from another ListFlutter Dart 将字符串从另一个列表转换为列表
【发布时间】:2020-07-05 16:49:18
【问题描述】:

从一个 api 我得到一个带有封面艺术 id 的专辑列表,我把这个列表放入一个函数中,以从 api 获取封面艺术的 URL。我的问题是我正在尝试将 URL 转换为列表,但出现错误:“类型字符串不是列表的子类型”。如果我不尝试将其转换为列表,则 URL 很好,但我无法访问单个 URL,因此我可以将其显示在网格列表中。当我尝试将其编入索引时,它会返回单个字母而不是单个 URL。

class _RecentlyAddedAlbumsState extends State<RecentlyAddedAlbums> {
  Future<List<Album>> albums;
  List<String> coverARTLIST;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      /* backgroundColor: Colors.black, */
      body: Container(
        child: FutureBuilder(
            future: fetchRecentlyAddedAlbums(),
            builder: (context, AsyncSnapshot<List<Album>> data) {
              switch (data.connectionState) {
                case ConnectionState.none:
                  return Text(
                    "none",
                    style: TextStyle(color: Colors.black),
                  );
                case ConnectionState.waiting:
                  return Center(
                      child: CircularProgressIndicator(
                    valueColor: AlwaysStoppedAnimation<Color>(Colors.black),
                  ));
                case ConnectionState.active:
                  return Text('');
                case ConnectionState.done:
                  if (data.hasData) {
                    List<Album> albums = data.data;
                    return ListView.builder(
                      itemCount: albums.length,
                      itemBuilder: (context, index) {
                        return FutureBuilder(
                            future: recentAlbumArt(albums[index].coverArt),
                            builder: (context, AsyncSnapshot cover) {
                              switch (cover.connectionState) {
                                case ConnectionState.none:
                                  return Text(
                                    "none",
                                    style: TextStyle(color: Colors.black),
                                  );
                                case ConnectionState.waiting:
                                  return Center(
                                      child: CircularProgressIndicator(
                                    valueColor: AlwaysStoppedAnimation<Color>(
                                        Colors.black),
                                  ));
                                case ConnectionState.active:
                                  return Text('');
                                case ConnectionState.done:
                                  if (cover.hasData) {
                                    List<String> coverARTLIST = cover.data;
                                    print(coverARTLIST);
                                    return GridView.count(
                                      scrollDirection: Axis.vertical,
                                      crossAxisCount: 2,
                                      shrinkWrap: true,
                                      padding: const EdgeInsets.all(5),
                                      crossAxisSpacing: 10,
                                      children: <Widget>[Text("TEST")],
                                    );
                                  }
                              }
                            });
                      },
                    );
                  }
              }
            }),
      ),
    );
  }
}

封面功能:

Future recentAlbumArt(String coverArtID) async {
  try {
    var salt = randomToken(6);
    var token = makeToken("$password", "$salt");
    var uRL =
        "$server/rest/getCoverArt/?u=$username&t=$token&s=$salt&v=$tapeOutVerison&c=$client$format&id=$coverArtID";
    return uRL.toString();
  } catch (e) {
    print(e);
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    List&lt;String&gt; coverARTLIST = cover.data; 此行是您出错​​的原因。您正在尝试将字符串分配给字符串列表。 试试这个

    List<String> coverARTLIST=[];
    coverARTLIST.add(cover.data);
    print(coverARTLIST[0]);
    

    【讨论】:

    • 这成功了!附带问题,有没有办法将它们放在一个新列表中但作为单独的对象?当我使用这种方法时,它们似乎都是一个对象,但在它们都是不同的对象之前?
    • 我没听懂你
    • 所以在“专辑”列表之前,当我在列表中调用 .length 时,它有 13 个项目。但是当我使用上面的方法将它添加到“coverARTLIST”之后,它说当我在列表上调用.length时它有1个项目。因此,当我尝试在网格中显示时,它显示为好像只有 1 个大项目。这有意义吗?
    • @limitlessbritt 声明 List&lt;String&gt; coverARTLIST=[]; 不在列表构建器内的未来构建器中
    • 很抱歉再次打扰您,但由于某种原因它使列表加倍,例如原始列表大小为 10,但随后 coverARTLIST 为 20,URL 似乎被添加了两次?另外,当我去打印时,可以说 coverARTLIST[0] 它会多次打印 URL
    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2022-12-19
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多