Closed yuuya-1205 closed 1 year ago
- ハッシュタグボタンをたくさん作ったが、コードが長くなるので別の方法があれば教えていただきたいです!
いい感じですね!うしさんの実装を土台に、以下のようにしてみました! ボタンデータと widget 定義を切り離せて コードが長くならず、各ボタンの タップ状態も保持できます。
class SearchItem {
final String label;
SearchItem({required this.label});
bool isSelected = false;
}
class _LeaningCommunitySearchState extends State<LeaningCommunitySearch> {
List<SearchItem> searchItems = [
SearchItem(label: '作曲'),
SearchItem(label: '路上パフォーマンス'),
SearchItem(label: 'ピアノ'),
SearchItem(label: 'DTM'),
SearchItem(label: '弾いてみた動画'),
SearchItem(label: 'ギター'),
SearchItem(label: 'バイオリン'),
SearchItem(label: 'クラシック'),
SearchItem(label: '機材'),
SearchItem(label: 'アニソン'),
SearchItem(label: 'レコーディング'),
SearchItem(label: '音大受験'),
];
@override
Widget build(BuildContext context) {
return Scaffold(...
Column( children: [...,
TextFormField(...),
SizedBox(...),
/* ここから */
SizedBox(
height: 120,
width: double.infinity,
child: Wrap(
alignment: WrapAlignment.spaceAround,
children: searchItems.map((item) {
return ElevatedButton(
onPressed: () => setState(() {
item.isSelected = !item.isSelected;
}),
style: ElevatedButton.styleFrom(
// ボタンの背景色を設定
backgroundColor: item.isSelected
? Theme.of(context).primaryColor
: Colors.white,
// ボタンの文字色を設定
foregroundColor: item.isSelected
? Colors.white
: Theme.of(context).primaryColor,
),
child: Text(
item.label,
style: const TextStyle(
fontSize: 11,
fontWeight: FontWeight.bold,
),
),
);
}).toList(),
),
),
/* ここまで */
SizedBox(...),
Center(...),
...
(Draft 初めて知りました、僕も使ってみようかな)
@ken-ty ありがとうございます! そんな方法があるんですね!! これでやってみます!
(Draft 初めて知りました、僕も使ってみようかな)
これ楽でいいっすよ!
これ、Enumでも書けそうだなって思いました! 一度これでPR出します!
description のここ, めっちゃ見やすいですね笑 良いですね!
ボタンの感じがデザインだと左上からたすき掛けにグラデーションしてますが実装だと左中央から右中央など Figma とちょっとだけ差がありますが, 作り込んでもデザイン変わる可能性あるので現状で十分だと思いました. ボタンはサイズ感など共通 Widget で調整したいなと思いましたー ( 共通化するとしても, この PR じゃなくて良さげ )!Figma 隣に貼ってくれなかったら気づかないくらいの差分笑
やったこと
learning_community_search画面の作成
キャプチャ
Figma | 実装 |