我有一个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);
答案 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()),
);
}
}