ラジオボタンを独自のボタンデザインで作りたく、
https://www.366service.com/jp/qa/8588605ff2da41d5287b3fbc2159ac29
を参考に組んでみてるのですが、
type 'RadioModel' is not a subtype of type 'String'
のエラーが吐かれてしまいます。
「RadioItem」と「RadioModel」というクラスを使って、ボタンを作っている感じですが、「RadioModel」のところで Stringタイプじゃないからダメ、と言われているのですかね。
それに対してどういう対処をすれば良いのか想像もつかずでして、、今回知識をお借りいただければと思います。
以下コードです。
ラジオ機能自体はまだ動くか確認できていません(エラーが出て赤画面になってしまうので...)。
なので、今回のエラーの原因と対処法だけ見ていただければと思っています。
flutter
1 2//ラジオボタン のデザイン 3class RadioItem extends StatelessWidget { 4 final RadioModel _item; 5 RadioItem(this._item); 6 @override 7 Widget build(BuildContext context) { 8 return Container( 9 margin: EdgeInsets.all(15.0), 10 child: Row( 11 mainAxisSize: MainAxisSize.max, 12 children: <Widget>[ 13 Container( 14 height: 50.0, 15 width: 50.0, 16 child: Center( 17 child: Text(_item.buttonText, 18 style: TextStyle( 19 color: _item.isSelected ? Colors.white : Colors.black, 20 //fontWeight: FontWeight.bold, 21 fontSize: 18.0)), 22 ), 23 decoration: BoxDecoration( 24 color: _item.isSelected ? Colors.blueAccent : Colors.transparent, 25 border: Border.all( 26 width: 1.0, 27 color: _item.isSelected ? Colors.blueAccent : Colors.grey), 28 borderRadius: const BorderRadius.all(const Radius.circular(2.0)), 29 ), 30 ), 31 ], 32 ), 33 ); 34 } 35} 36 37//エラー的にはここがStringタイプじゃない?と言われているんですかね 38class RadioModel { 39 bool isSelected; 40 final String buttonText; 41 RadioModel(this.isSelected, this.buttonText); 42} 43 44class SearchCast extends StatefulWidget { 45 @override 46 _SearchCastState createState() => _SearchCastState(); 47} 48 49class _SearchCastState extends State<SearchCast> { 50 bool _alreadyDisposed = false; 51 bool isSelected; 52 53 String _sortGradeChecked = ""; 54 final _sortGrade = []; 55 56 @override 57 void initState() { 58 super.initState(); 59 setState(() { 60 _sortGrade.add(RadioModel(false, 'りんご')); 61 _sortGrade.add(RadioModel(false, 'ばなな')); 62 _sortGrade.add(RadioModel(false, 'みかん')); 63 _sortGrade.add(RadioModel(false, 'ぶどう')); 64 _sortGradeChecked = _sortGrade.first; 65 }); 66 } 67 68 @override 69 void setState(Function fn) { 70 if (_alreadyDisposed) return; 71 super.setState(fn); 72 } 73 74 @override 75 void dispose() { 76 _alreadyDisposed = true; 77 super.dispose(); 78 } 79 80 bool _inputGradeMix = false; 81 82 List<Widget> _sortGradeList(StateSetter setState) { 83 List<Widget> sortGradeCheckedList = List(); 84 85 _sortGrade.forEach((_item) { 86 sortGradeCheckedList.add(Container( 87 width: double.infinity, 88 height: 60, 89 decoration: BoxDecoration( 90 border: Border.all(color: Colors.black87, width: 1), 91 borderRadius: BorderRadius.circular(8), 92 ), 93 margin: const EdgeInsets.symmetric(horizontal: 4.0, vertical: 8.0), 94 child: _item.buttonText != 'みかん' 95 ? GestureDetector( 96 behavior: HitTestBehavior.opaque, 97 onTap: () { 98 setState(() { 99 _sortGradeChecked = _item.isSelected; 100 print(_sortGradeChecked); 101 _inputGradeMix = false; 102 }); 103 }, 104 child: Container( 105 color: _item.buttonText == 'みかん' 106 ? Colors.pink 107 : Colors.transparent, 108 child: Text( 109 _item.buttonText, 110 style: TextStyle(), 111 ), 112 )) 113 : Column( 114 children: [ 115 GestureDetector( 116 behavior: HitTestBehavior.opaque, 117 onTap: () { 118 _sortGradeChecked = _item.isSelected; 119 print(_sortGradeChecked); 120 _inputGradeMix = true; 121 }, 122 child: Container( 123 color: _item.buttonText != 'みかん' 124 ? Colors.pink 125 : Colors.transparent, 126 child: Text(_item.buttonText)), 127 ), 128 _inputGradeMix == true 129 ? Container( 130 child: Text('a'), 131 ) 132 : Container() 133 ], 134 ))); 135 }); 136 return sortGradeCheckedList; 137 } 138 139 Widget sortGradeWidget() { 140 return Column( 141 crossAxisAlignment: CrossAxisAlignment.start, 142 children: [ 143 Column( 144 children: _sortGradeList(setState), 145 ), 146 _inputGradeMix == true 147 ? OutlineButton( 148 color: Colors.white, 149 disabledBorderColor: Colors.black, 150 onPressed: () { 151 null; 152 }, 153 child: Text(_currentIndex), 154 ) 155 : Container(), 156 ], 157 ); 158 } 159 160@override 161 Widget build(BuildContext context) { 162 return Material( 163 child: sortGradeWidget(), 164 ); 165} 166} 167
もし不足している情報などがあれば言ってください。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/02 07:15