Last active
December 3, 2019 18:25
-
-
Save MaySnow/e300893855f3bb5e3671211919069efc to your computer and use it in GitHub Desktop.
#flutter shop cart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
// 购物车 | |
class Product { | |
const Product({this.name}); | |
final String name; | |
} | |
typedef void CartChangedCallback(Product product, bool inCart); | |
class ShoppingListItem extends StatelessWidget { | |
ShoppingListItem({Product product, this.inCart, this.onCartChanged}) | |
: product = product, | |
super(key: ObjectKey(product)); | |
final Product product; | |
final bool inCart; | |
final CartChangedCallback onCartChanged; | |
Color _getColor(BuildContext context) { | |
return inCart ? Colors.black54 : Theme.of(context).primaryColor; | |
} | |
TextStyle _getTextStyle(BuildContext context) { | |
if (!inCart) return null; | |
return TextStyle( | |
color: Colors.black54, | |
decoration: TextDecoration.lineThrough | |
); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return ListTile( | |
onTap: () { | |
onCartChanged(product, !inCart); | |
}, | |
leading: CircleAvatar( | |
backgroundColor: _getColor(context), | |
child: Text(product.name[0]), | |
), | |
title: Text( | |
product.name, | |
style: _getTextStyle(context), | |
), | |
); | |
} | |
} | |
class ShoppingList extends StatefulWidget { | |
ShoppingList({Key key, this.products}) : super(key: key); | |
final List<Product> products; | |
@override | |
_ShoppingListState createState() => _ShoppingListState(); | |
} | |
class _ShoppingListState extends State<ShoppingList>{ | |
Set<Product> _shoppingCart = Set<Product>(); | |
void _handleCartChanged(Product product, bool inCart) { | |
setState(() { | |
if (inCart) | |
_shoppingCart.add(product); | |
else | |
_shoppingCart.remove(product); | |
}); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar( | |
title: Text('Shopping List'), | |
), | |
body: ListView( | |
padding: EdgeInsets.symmetric(vertical: 8.0), | |
children: widget.products.map((Product product) { | |
return ShoppingListItem( | |
product: product, | |
inCart: _shoppingCart.contains(product), | |
onCartChanged: _handleCartChanged, | |
); | |
}).toList(), | |
) | |
); | |
} | |
} | |
void main() => runApp(MaterialApp( | |
title: 'Shopping App', | |
home: ShoppingList( | |
products: <Product>[ | |
Product(name: 'Eggs'), | |
Product(name: 'Flour'), | |
Product(name: 'Chocolate chips'), | |
], | |
), | |
)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @MaySnow, I'm new to flutter & dart and i'm having a problem understanding the code on lines 11, 12 and 13...could you kindly explain them to me briefly