こんにちは。
現在、予約機能UIを作っています。
ラジオボタンで予約時間を選択できて、
「4時間以上」を選択すると、ダイアログでそれ以上の選択肢を選んでもらう仕様です。
添付写真は、現在のコードで出力されたものです。
「4時間以上」を選択した際に、下に現れるボタンを押すと、ダイアログが出てくる仕様で考えています。
その下に現れるボタンには、ダイアログで選択した値がテキスト出力されています。!
しかし、現状ではダイアログ内のラジオを選択しても、タップ反応(一瞬灰色になる)はあるのですが、チェック色が変わらず、ラジオの値もボタンに反映されない状態です。
flutter
1 final List sortTime = ['1時間', '2時間', '3時間', '4時間以上']; 2 3 bool _inputTime = false; 4 //ここにチェックされた選択肢を入れる 5 String sortTimeChecked = ""; 6 List<Widget> get _sortTimeList { 7 List<Widget> sortTimeCheckedList = List(); 8 sortTime.forEach((item) { 9 sortTimeCheckedList.add(Container( 10 margin: const EdgeInsets.symmetric(horizontal: 4.0), 11 child: item != '4時間以上' 12 ? ChoiceChip( 13 labelPadding: EdgeInsets.symmetric(vertical: 4), 14 padding: EdgeInsets.only(left: 12, right: 12), 15 label: Text(item), 16 shape: RoundedRectangleBorder( 17 borderRadius: BorderRadius.circular(8.0)), 18 selected: sortTimeChecked == item, // 判定 19 onSelected: (selected) { 20 setState(() { 21 sortTimeChecked = item; // 代入 22 _inputTime = false; 23 }); 24 }, 25 ) 26 : ChoiceChip( 27 labelPadding: EdgeInsets.symmetric(vertical: 4), 28 padding: EdgeInsets.only(left: 12, right: 12), 29 label: Text(item), 30 shape: RoundedRectangleBorder( 31 borderRadius: BorderRadius.circular(8.0)), 32 selected: sortTimeChecked == item, // 判定 33 onSelected: (selected) { 34 setState(() { 35 sortTimeChecked = item; // 代入 36 _inputTime = true; 37 }); 38 }, 39 ))); 40 }); 41 return sortTimeCheckedList; 42 } 43 44 List<String> sortTimeOthers = ['4時間', '5時間', '6時間', '7時間', '8時間', '9時間']; 45 String _currentIndex = '4時間'; 46 Future _selectsortTimeOthers() async { 47 await showDialog( 48 context: context, 49 builder: (BuildContext context) => new AlertDialog( 50 title: Text(''), 51 actions: <Widget>[ 52 FlatButton( 53 onPressed: () { 54 Navigator.pop(context, null); 55 }, 56 child: Text('CANCEL'), 57 ), 58 FlatButton( 59 onPressed: () { 60 Navigator.pop(context, sortTimeOthers); 61 }, 62 child: Text('OK'), 63 ), 64 ], 65 content: Container( 66 width: double.minPositive, 67 height: 300, 68 child: ListView.builder( 69 shrinkWrap: true, 70 itemCount: sortTimeOthers.length, 71 itemBuilder: (BuildContext context, int index) { 72 return RadioListTile( 73 value: index, 74 activeColor: Colors.blue, 75 groupValue: _currentIndex, 76 title: Text(sortTimeOthers[index]), 77 onChanged: (val) { 78 setState(() { 79 print(index); 80 _currentIndex = val; 81 }); 82 }, 83 ); 84 }, 85 ), 86 ), 87 ), 88 ); 89 } 90 91 Widget sortTimeWidget() { 92 return Column( 93 crossAxisAlignment: CrossAxisAlignment.start, 94 children: [ 95 Wrap( 96 direction: Axis.horizontal, 97 alignment: WrapAlignment.start, 98 children: _sortTimeList, 99 ), 100 _inputTime == true 101 ? OutlineButton( 102 color: Colors.white, 103 disabledBorderColor: Colors.black, 104 onPressed: () { 105 _selectsortTimeOthers(); 106 }, 107 child: Text(_currentIndex), 108 ) 109 : Container(), 110 ], 111 ); 112 } 113
参考から試行錯誤していろいろいじったので、若干違うところが多々あるかと思いますが...
原因がわからず、対処方法をご教授いただければ嬉しいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/24 12:40 編集
2020/09/24 13:00
2020/09/24 13:02
2020/09/24 13:53