如何将<!-?,?->类型json文件加载到DropdownButton中

时间:2018-11-08 07:36:55

标签: json dart flutter dropdownbox

我有一个json文件,其中包含一些货币值。我使用rootBundle.loadString加载我的json数据。 现在,我需要使用jsonData加载DropdownButton。 DropdownButton文本必须显示json值,例如“ TRL”。但是,如果我尝试选择任何菜单项,则需要保存TRL_00这样的值。我的dropdownbutton在我的代码中不起作用。我的问题是
如何将类型json文件加载到下拉菜单DropdownButton中?

此部分不起作用:

sample.setPrev(new Node())

我的儿子文件:

items: _mapCurrency((String value) {
            return new DropdownMenuItem<String>(
              value: value,
              child: new Text(value),
            );
          }).toList(),

加载json:

{
  "00": "TRL",
  "01": "USD",
  “02”: "GBP",
  “03”: "EUR"
}

下拉部分:

Map _mapCurrency;
String _currency;

String jsonCurrency =
await rootBundle.loadString("packages/currencies.json");
_mapCurrency = json.decode(jsonCurrency);

1 个答案:

答案 0 :(得分:0)

我在这里How do I load my local json into List<Map> variable?问了另一个问题。在GünterZöchbauer的帮助下,我终于完成了项目中的步骤。完整的代码在这里。

这是我的本地json。

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




class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  final GlobalKey<FormState> _formKey = new GlobalKey<FormState>();

  String _mySelectedCurrency;
  List<Map> _myCurrencies;

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

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

  @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>(
                              isExpanded: true,
                              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()),
    );
  }
}