リスト内のお気に入りボタンを押したところ、現状全てのリストにお気に入りマークがついてしまうので、それを個別につくようにしたいと思っております。[画像参照]
現状ハートボタンを押すと、ハートON/OFFは切り替わりますが、全てのハートマークが同時にトグルされてしまいます。
Widgetsを分けてみたりしたのですが、結果は同じでどうしても一つ一つにON/OFFを実装することができません。
Flutter自体が始めたばかりで理解がまだよくできていないのですが、どなたかわかる方はいらっしゃいますでしょうか。
↓リストのCardのwidgetです。
class ListCards extends StatelessWidget { var name; ListCards({@required this.name}); @override Widget build(BuildContext context) { return Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15.0), ), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), gradient: LinearGradient( colors: [ Colors.lightBlue, Colors.lightBlueAccent, ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), child: ListTile( contentPadding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 20.0), onTap: () { Navigator.of(context).pushNamed( SentencesScreen.routeName, arguments: { 'id': name.id.toString(), 'title': name.title.toString(), }, ); }, leading: Text( name.id + '.', style: TextStyle( color: Colors.white, fontSize: 20.0, fontWeight: FontWeight.bold, ), ), title: Container( child: Text( name.title, style: TextStyle( fontSize: 20.0, fontWeight: FontWeight.bold, color: Colors.white, ), ), ), trailing: Material( color: Colors.transparent, child: Consumer<Course>( builder: (context, color, _) => IconButton( icon: Icon(color.isFavorite ? Icons.favorite : Icons.favorite_border), iconSize: 40, autofocus: true, highlightColor: Colors.pinkAccent, hoverColor: Colors.pink, onPressed: () { color.favoriteToggle(); }, ), ), ), ), ), ); } }
↓ここでListViewをビルドしています。
class CourseList extends StatelessWidget { var name; CourseList({@required this.name}); @override Widget build(BuildContext context) { return ListView.builder( padding: const EdgeInsets.all(8), itemCount: name.length, itemBuilder: (context, index) { return ListCards(name: name[index]); } ); } }
↓各コースのmodelとお気に入りのの動作を調整しています。
class Course with ChangeNotifier { final String id; final String title; final Color color; bool isFavorite; Course({ @required this.id, @required this.title, this.color = Colors.blue, this.isFavorite = false, }); void favoriteToggle() { isFavorite = !isFavorite; notifyListeners(); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/18 11:54