无法在 Flutter 中加载本地 JSON 文件

Posted

技术标签:

【中文标题】无法在 Flutter 中加载本地 JSON 文件【英文标题】:Not able to load local JSON File in Flutter 【发布时间】:2020-10-15 03:02:45 【问题描述】:

我正在开发一个个人 Flutter 项目,其中包含一些本地存储的 JSON 文件

这是代码

class CCategory extends StatefulWidget 
  @override
  _CCategory createState() => _CCategory();

class Prod 
  String Name;
  String Image;
  Prod( this.Name, this.Image);
  factory Prod.fromJson(Map<String, dynamic> parsedJson) 
    return Prod(
        Name: parsedJson['Name'],
        Image: parsedJson['Image']);
  

Future<String> _loadProdAsset() async 
  return await rootBundle.loadString('assets/data/Dabur.json');

Future<Prod> loadProd() async 
  String jsonString = await _loadProdAsset();
  final jsonResponse = json.decode(jsonString);
  return new Prod.fromJson(jsonResponse);


class _CCategory extends State<CCategory> 

  Prod _prod;
  bool _loaded = false;
  @override
  void initState() 
    super.initState();
    loadProd().then((s) => setState(() 
      _prod = s;
      _loaded = true;
    ));
  
  Widget build(BuildContext context) 
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitDown,
      DeviceOrientation.portraitUp,

    ]);
    return MaterialApp(
        title: "Dabur Products",
        theme: ThemeData(
          primaryColor: Colors.black,
        ),
        home: Scaffold(
            appBar: AppBar(
              title: Text("Dabur Products",
              ),
            ),
            body: _loaded?Center(

                child: ListView(

                    children: <Widget>[
                ListTile(
                leading: Image.asset('$_prod.Image'),
                  title: Text('$_prod.Name'),
    )
    ]

    )
    )
                : new Center(
              child: new CircularProgressIndicator(),
            )
        ),
    );

    

    

JSON 文件的内容没有被加载,这是我在调试时遇到的错误

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:“List”类型不是“Map”类型的子类型

有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

我不知道您的 JSON 文件长什么样,但看看您的错误代码,json.decode(jsonString) 似乎给您一个List 而不是Map。我猜你的 JSON 文件实际上是一个列表:

[ 
  ... content ...
]

相反,您的 JSON 文件应如下所示(使用 ):

 
  "Name": ...,
  "Image": ...

【讨论】:

以上是关于无法在 Flutter 中加载本地 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

我想在 html 中加载一个 json 脚本(本地),用作表格

如何在主方法 Flutter 中加载 json?

带有 Firebase 托管的 Flutter web 无法从存储中加载图片

如何在 Javascript 中加载本地 JSON 文件

如何在 Xcode 中加载本地 json 文件以进行单元测试?

在一个活动中加载单个片段两次,从本地json文件中加载2个问题