FlutterでGridviewを使ってリスト表示させています。
それぞれアイテムはGestureDetectorで囲って「ontap」でクリックイベントを発火させるのですが、
現状タップした時に、全てのアイテムに発火してしまいます。
(コードを見直せば、そりゃそうだよなって理解はあるのですが...)
bool checked = false; void _checked() { setState(() { checked = true; }); } void _unchecked() { this.setState(() { checked = false; }); } Widget recommendFromFamily() { return Container( margin: EdgeInsets.only(top: 10.0), child: Column( children: <Widget>[ //アイテムリスト GridView.builder( shrinkWrap: true, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, childAspectRatio: 0.8, mainAxisSpacing: 4.0, crossAxisSpacing: 4.0, ), itemCount: castsItems?.length ?? 3, itemBuilder: (BuildContext context, int index) { child: GestureDetector( checked == false ? Center( child: Text( 'チェックする', style: TextStyle( height: 2.3, color: Colors.amber, fontSize: 12, fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), ) : Center( child: Text( 'チェック取り消す', style: TextStyle( height: 2.3, color: Colors.black87, fontSize: 12, fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), ) onTap: () { castId = index; print(index); if (checked == true) { _checked(); } else if (checked == true) { _unchecked(); } }, ), }, ), ], ), ); }
これを、タップした要素のみにSetStateを制御したいのですが、それを実現するにはどのようにするのでしょう?
ご教授よろしくお願いいたします。
追記 9/19 16:37
onTapの条件分岐コードに関係のないものが混じっていたので修正しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/19 09:28