如何将本地 json 加载到 List 变量中?

2024-03-30

如何将本地 json 加载到 List 变量中?

这是我本地的 json.

[
  {“id”: 00”, “name”: ”TRL”},
  {“id”: 01”, “name”: ”USD”},
  {“id”: 02”, “name”: ”GBP”},
  {“id”: 03”, “name”: ”EUR”},
]

然而这有效:

List<Map> _myCurrency = [
  {“id”: 00”, “name”: ”TRL”},
  {“id”: 01”, “name”: ”USD”},
  {“id”: 02”, “name”: ”GBP”},
  {“id”: 03”, “name”: ”EUR”},
];

我的问题是我将货币数据移至currency.json 文件中。我可以加载 json,但无法分配给 List 变量。有什么帮助吗?

UPDATE:

String jsonTCBanks =
await rootBundle.loadString("packages/capi/currency.json");
List<Map> _myCurrency = json.decode(jsonTCBanks);

我得到的错误是;

type 'List<dynamic>' is not a subtype of type 'List<Map<dynamic, dynamic>>'

如果我使用 Map _myCurrency json.decode 可以工作,但我会丢失键、值属性。

更新2:我不断收到错误:

I/flutter (16273): The following assertion was thrown building MyHomePage(dirty, state: _MyHomePageState#44865):
I/flutter (16273): type 'MappedListIterable<Map<dynamic, dynamic>, DropdownMenuItem<dynamic>>' is not a subtype of type
I/flutter (16273): 'List<DropdownMenuItem<String>>'
    class _MyHomePageState extends State<MyHomePage> {
      String _mySelectedCurrency;
      List<Map> _myCurrencies;

      @override
      void initState() {
        // TODO: implement initState
        super.initState();
        _loadLocalJsonData();
      }

      Future _loadLocalJsonData() async {
        String jsonCurrency = await rootBundle
            .loadString("packages/capi/currency.json");
        setState(() {
          _myCurrencies = List<Map>.from(jsonDecode(jsonCurrency) as List);
          print("*******_myCurrencies: $_myCurrencies");// This part works correctly
        }); 
      }

      @override
      Widget build(BuildContext context) {
        return _myCurrencies == null ? _buildWait(context) : _buildRun(context);
      }

  // TODO: BUILD RUN
  Widget _buildRun(BuildContext context) {
    final _itemsName = _myCurrencies.map((c) {
      return new DropdownMenuItem<String>(
        value: c["id"].toString(),
        child: new Text(c["name"].toString()),
      );
    }).toList();

    return new Scaffold(
        key: _scaffoldKey,
        body: new SafeArea(
            top: false,
            bottom: false,
            child: new Form(
                key: _formKey,
                child: new ListView(
                  padding: const EdgeInsets.symmetric(
                      horizontal: 16.0, vertical: 32.0),
                  children: <Widget>[
                    //TODO: CURRENCY ###########################################
                    new FormField<String>(
                      builder: (FormFieldState<String> state) {
                        return InputDecorator(
                          decoration: InputDecoration(
                            labelText: 'CHOOSE CURRENCY',
                            labelStyle: TextStyle(
                                fontSize: 18.0,
                                fontWeight: FontWeight.bold,
                                color: Colors.green.shade700),
                            errorText: state.hasError ? state.errorText : null,
                          ),
                          isEmpty: _mySelectedCurrency == '',
                          child: new DropdownButtonHideUnderline(
                            child: new DropdownButton<String>(
                              style: TextStyle(
                                fontSize: 14.0,
                                color: Colors.black,
                                fontWeight: FontWeight.w500,
                              ),
                              value: _mySelectedCurrency,
                              isDense: true,
                              onChanged: (String newValue) {
                                setState(() {
                                  _mySelectedCurrency = newValue;
                                  state.didChange(newValue);
                                });
                              },
                              items: _itemsName,
                            ),
                          ),
                        );
                      },
                      validator: (val) {
                        return val != '' ? null : 'Choose Currency...';
                      },
                    ),
                  ],
                ))));
  }

      // TODO: BUILD WAIT
      Widget _buildWait(BuildContext context) {
        return new Scaffold(
          body: new Center(child: CircularProgressIndicator()),
        );
      }

    }

您需要将其从字符串解码为数据结构,并通过创建具有所需类型的新列表来调整类型,您可以在其中传递从返回的列表jsonDecode:

import 'dart:convert';

...

List<Map> _myCurrency = List<Map>.from(jsonDecode(json) as List);
final currencyItems = _myCurrency.map(
    (c) => DropdownMenuItem<String>(c['id'], child: Text(c['name'])).toList();
DropdownButton(items: currencyItems);     
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将本地 json 加载到 List 变量中? 的相关文章

随机推荐

  • 使用 iTextSharp 实现 PDF 中的图像透明度

    我有一个传入的 jpg 文件 我可以将其颜色设置为透明 当我将图像添加到另一个图像时 效果非常好 我正在尝试使用 iTextSharp 将相同的图像添加到 PDF 但我无法使透明度发挥作用 我尝试了两种方法 但都不起作用 第一种方法是在位图
  • 两个 Android 应用程序如何相互通信?

    两个 Android 应用程序的一般通信架构是什么 Case 1 我有两个Android应用程序 a 一个是服务器 等待客户端请求 处理请求 从某些 sqlite 数据库读取数据 并将结果返回给客户端 该服务器应用程序在其自己独立的 And
  • 是否可以通过 iOS SDK 在 Facebook 请求对话框中显示所有好友?

    我正在使用 Facebook iOS SDK v3 17 我希望允许用户邀请多个朋友到我的应用程序 而不使用可邀请的朋友 API 我没有 Canvas 应用程序 想知道是否真的可以在多好友选择器中看到用户的所有好友 我的代码是 FBWebD
  • 重命名 CloudFormation 模板中的资源

    您可以重命名 CloudFormation 模板中的资源吗 假设我创建了一个堆栈模板来创建单个 lambda 函数 GetTheFunnyPhraseText Type AWS Serverless Function Properties
  • 如何在纯 Ruby 中使用 Capybara(没有 Rails)?

    我正在尝试让 Capybara 在一个简单的 Ruby 脚本中运行 即没有 在 Rails 之外 这是脚本 require rubygems require capybara require capybara dsl include Cap
  • Python子进程:如何三次使用管道? [复制]

    这个问题在这里已经有答案了 我想在以下行中使用子进程 convert loxie orig png bmp mkbitmap f 2 s 2 t 0 48 potrace t 5 progress s o DSC00232 svg 我发现感
  • Spring WebClient 无法从 REST API 读取数据

    在我的 Spring Boot 应用程序中 我想使用 Spring WebClient 从以下 API 读取数据 如下所示 我之前没有经验 在对许多页面和文章进行多次搜索后 我决定使用 Spring WebClient 端点 URL 是 s
  • 从 Flash 或纯 AS3 项目使用 RemoteObject (AMF)

    我最近将一些代码从 Flex 项目移植到新的纯 AS3 项目 当我尝试进行 AMF 调用时 收到如下错误消息 TypeError 错误 1034 类型强制失败 无法将 Object 5425371 转换为 mx messaging mess
  • MVC.net 2 - 更改 ValidationMessageFor 输出的 HTML - 这可以通过模板进行吗?

    MVC net 2 默认输出验证消息 如下所示 span class field validation valid A Validation message span 我希望它这样做
  • 用JPA继承抽象类(+Hibernate)

    您将如何在以下示例代码中配置注释 我想只坚持使用 JPA 注释并避免 Hibernate 特定的依赖项 下面的代码正确吗 Entity public class RefExample extends RefData 这些类将有多个版本 Re
  • Android 警报对话框中的 EditText

    我有一种在片段中创建警报对话框的方法 private void alertDialog final EditText editTextField new EditText this getContext AlertDialog dialog
  • 如何通过单击 Android 中当前选项卡中的按钮来转到其他选项卡?

    我试图在 Android 中编写一段代码 通过单击按钮从一个选项卡切换到另一个选项卡 我知道通过单击选项卡我们可以从一个选项卡切换到另一个选项卡 但是是否可以通过单击一个按钮从一个选项卡切换到另一个选项卡 我尝试了以下教程 http www
  • 是否有一个选项可以从 Azure 函数的部署中获取输出值处的事件网格触发器 url + 键?

    是否有一个选项可以从 Azure 函数的部署中获取输出值处的事件网格触发器 url 键 我们想要做的场景如下 我们通过 ARM 在 VSTS 版本中部署功能服务 部署函数服务后 我们部署事件网格订阅 谢谢 什拉达 阿格拉瓦尔 是的 有一种方
  • Maven依赖解析(冲突)

    假设我有四个项目 项目A 依赖于B和D 项目 B 依赖于 D 项目 C 依赖于 D 项目D 在这种情况下 如果我运行项目 A Maven 将正确解析对 D 的依赖关系 如果我理解正确 Maven 总是采用最短路径的依赖关系 由于 D 是 A
  • asyncio:睡眠亚毫秒间隔

    我正在构建一个基于树莓派的设备 它将具有多个应同时工作的并发功能 在这种情况下 使用 asyncio 看起来是一个合理的选择 好吧 我可以用线程用 C 编写所有这些东西 但 python 代码看起来更紧凑 其中一项功能是通过 GPIO 脉冲
  • 使用 VirtualAllocEX 时出现错误代码 487 (ERROR_INVALID_ADDRESS)

    我正在尝试使用 VirtualAllocEx 当我设置dwSize 第三个参数 为大于约 63 MB 的数字 当我查看时会导致生成错误代码 487GetLastError 但是 它适用于较小的大小 例如 4MB 这是我的代码的一部分 Vir
  • 处理传递给 WCF 服务的无效 URI

    我有 WebGet 和 WebInvoke 属性来描述我的合约 但是处理无效 URI 的最佳方法是什么 现在 如果用户传递的 URI 与我当前的操作不匹配 他们会收到 未找到端点 的消息 信息 我想传回更具描述性的消息 例如 我的 URI
  • Android 动态功能:错误 -2 模块不可用

    我一整天都在调试 没有任何结果 我遵循了每个文档和谷歌代码实验室 并将捆绑包上传到内部测试 但错误仍然存 在 模块不可用 下面是我的实现 Module AndroidManifest xml
  • GAE 向所有活动实例发送请求

    有没有办法将请求发送到 Google App Engine 中模块 服务的所有活动实例 如果我可以获得所有活动实例 ID 的列表 我可以发出如下请求https instance dot version dot service dot app
  • 如何将本地 json 加载到 List 变量中?

    如何将本地 json 加载到 List 变量中 这是我本地的 json id 00 name TRL id 01 name USD id 02 name GBP id 03 name EUR 然而这有效 List