作った配列でドロップダウンボタンを作りたいですが、エラーが出ます。
以下コードです。
jsonから年収リストを取ります。
"income": 10,
というようなパラメーターで整数だけが返ってきて、
10(200万未満),20(200万~400万),30(400万~600万),40(600万~800万),50(800万~1,000万),60(1,000万~1,500万),70(1,500万~2,000万),80(2,000万~3,000万),90(3,000万~4,000万),100(4,000万~5,000万),110(5,000万以上)
↑のように整数に文字列を紐づけないといけず、フロント側でmapに変換しなければなりません。
Futureでjsonから得た整数を使って、文字列を取り出して、ドロップダウンに使うイメージです。
dart
1 2///フロント側でmapに変換 3_incomeList = { 4 0: '未選択', 5 10: '(200万未満)', 6 20: '(200万~400万)', 7 30: '(400万~600万)', 8 40: '(600万~800万)', 9 50: '(800万~1,000万)', 10 60: '(1,000万~1,500万)', 11 70: '(1,500万~2,000万)', 12 80: '(2,000万~3,000万)', 13 90: '(3,000万~4,000万)', 14 100: '(4,000万~5,000万)', 15 110: '(5,000万以上)', 16 }; 17 18///jsonの整数レスポンスが入る。これをキーとして使う。 19int _income; 20 21Future _loadYourIncome() async { 22 final completer = Completer<void>(); 23 await ApiUser.get().then((response) { 24 final jsonData = json.decode(utf8.decode(response.bodyBytes)); 25 26 setState(() { 27 ///incomeに代入 28 ///nullで返ってくる場合もあり、その時は0を代入、「未選択」にする 29 if (jsonData["income"] == null) { 30 print('nullなので0代入'); 31 _income = 0; 32 } else { 33 print('nullじゃないのでそのまま代入'); 34 _income = jsonData["income"]; 35 } 36 }); 37 completer.complete(); 38 }).catchError((e) { 39 debugPrint('Error' + e.toString()); 40 completer.complete(); 41 }); 42 } 43 44 45 void initState() { 46 super.initState(); 47 _loadYourIncome().then((value) => setState(() {})); 48 } 49 50 51 void setState(Function fn) { 52 if (_alreadyDisposed) return; 53 super.setState(fn); 54 } 55 56 57 void dispose() { 58 _alreadyDisposed = true; 59 super.dispose(); 60 } 61
以上を踏まえて、ドロップダウンは以下のように作りました。
dart
1DropdownButton<String> _button = DropdownButton<String>( 2 value: _incomeList[_income], 3 items: _incomeList.entries 4 .map<DropdownMenuItem<String>>((MapEntry<int, String> e) { 5 return DropdownMenuItem<String>( 6 value: "${e.key}", 7 child: Text(e.value), 8 ); 9 }).toList(), 10 onChanged: (String newValue) { 11 setState(() { 12 _income = int.parse(newValue); 13 print(_incomeChecked); 14 // print(newValue); 15 }); 16 }, 17 );
以上になります。
このエラーの原因はなんでしょうか?解決策があれば、教えていただければ幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/03 03:56