当前位置: 首页 > 知识库问答 >
问题:

如何在Flatter应用程序中从本地存储返回json数据

伍弘盛
2023-03-14

我有一个json文件,我想在容器中显示它。我试过很多东西,但都不管用。目前,我在使用jsonDecode()时遇到了这个错误,我知道它会返回一个像这样的映射

我有产品类和ItemCard类:

class ItemCard extends StatelessWidget{
  final Product product;
  final Function press;
  const ItemCard({ Key key, this.product, this.press }) : super(key: key);

  @override
  Widget build(BuildContext context){
    return GestureDetector(
      onTap: press,
      child: Column(
        children: <Widget>[
          Expanded(
            child: Container(
              padding: EdgeInsets.all(20),
              decoration: BoxDecoration(
                color: Colors.green,
                borderRadius: BorderRadius.circular(16),
              ),
              /*
              child: Hero(
                tag: "${product.id}",
                child: Image.asset(product.image),
              ),
              */
            ),
          ),
          Text(product.brand),
        ],
      ),
    );
  }
}

在正文中,我列出:

        Container(
          child: Expanded(
            child: FutureBuilder(
              future: DefaultAssetBundle.of(context)
                .loadString('assets/watches.json'),
              builder: (context,snapshot){

                //print(snapshot.data);
                var jsondata = jsonDecode(snapshot.data.toString());
                
                  return GridView.builder(
                    itemCount: jsondata.length,
                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                      crossAxisCount: 2,
                      mainAxisSpacing: 10,
                      crossAxisSpacing: 10,
                      childAspectRatio: 0.75
                    ),
                    itemBuilder: (context, index) => ItemCard(
                      product: jsondata[index],
                      press: (){}
                    ),
                  );
              },
            ),
          ),
        ),

我怎样才能解决这个问题?任何想法都会有帮助

共有1个答案

穆丁雨
2023-03-14

您需要将映射的jsondata[index]转换为Products实例。通常情况下,您会有一个fromJson方法来从json映射创建实例。

product: Product.fromJson(jsondata[index]),

这是toJsonfromJson实现的一个示例

class User {
  final String name;
  final String email;

  User(this.name, this.email);

  User.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        email = json['email'];

  Map<String, dynamic> toJson() =>
    {
      'name': name,
      'email': email,
    };
}
 类似资料:
  • 问题内容: 我目前正在使用Swift开发的iOS应用程序,需要在设备上存储一些用户创建的内容,但似乎找不到一种简单快捷的方法来在设备上存储/接收用户内容。 有人可以解释如何存储和访问本地存储吗? 想法是在用户执行操作时存储数据,并在应用程序启动时接收数据。 问题答案: 如果仅存储两个字符串,最简单的解决方案是,在Swift 3中,该类已重命名为just 。 最好将密钥存储在全局位置,以便您可以在代

  • 问题内容: 我有一个返回JSON的MVC控制器。我想使用jQuery读取/获取JSON并遍历JSON项目/行。 基本上,我正在阅读一堆评论,然后逐一显示评论。 有人有代码示例吗? 我正确地获取了json。请参阅下面的返回数据。 谢谢 编辑: 如何循环这些由控制器返回的json?我需要循环3次,然后对于每一行,我需要访问该行中的所有键和值。 问题答案: 第一个问题的答案是允许Json在GET中工作。

  • 问题内容: 目前,我正在使用一项服务来执行操作,即从服务器检索数据,然后将数据存储在服务器本身上。 取而代之的是,我想将数据放入本地存储中,而不是将其存储在服务器上。我该怎么做呢? 问题答案: 这是我存储和检索到本地存储的代码的一部分。我使用广播事件来保存和恢复模型中的值。

  • 我试着用我的Flutter应用程序打电话。用以下代码: 我在GitHub Flatter repo上找到了这个函数:https://github.com/flutter/flutter/issues/4856 但是这对我不起作用。这个功能还在Flutter中吗?在哪个包中?或者有更好的选择从我的应用程序打电话吗?

  • 我必须从错误中读取数据。yml文件,并将其存储在下面的结构图中。当使用下面的配置来存储值时,我得到了null。有人能帮我吗?谢谢 配置类: @Configuration@PropertySource(value=“classpath:error.yml”,factory=YamlPropertyResourceFactory.class)@EnableConfigurationProperties

  • 我正在创建一个基于网络的android应用程序。所以 1)我已经在eclipse IDE中安装了Google App Engine插件,并开始开发基于网络的android应用程序,其中客户的所有信息都存储在GAE Datastore中。 2)我已经创建了一个新的Web应用程序,并在数据存储中存储了实体。我可以检索这些值并显示在我的android应用程序中,并将新的细节从我的应用程序添加到GAE数据