Right deleting items from cart
This commit is contained in:
@@ -5,7 +5,9 @@ class BasketItemCard extends StatelessWidget {
|
|||||||
final String price;
|
final String price;
|
||||||
final String id;
|
final String id;
|
||||||
final Image image;
|
final Image image;
|
||||||
final VoidCallback onTap;
|
final String quantity;
|
||||||
|
final VoidCallback onTapPlus;
|
||||||
|
final VoidCallback onTapMinus;
|
||||||
|
|
||||||
const BasketItemCard({
|
const BasketItemCard({
|
||||||
super.key,
|
super.key,
|
||||||
@@ -13,7 +15,9 @@ class BasketItemCard extends StatelessWidget {
|
|||||||
required this.price,
|
required this.price,
|
||||||
required this.id,
|
required this.id,
|
||||||
required this.image,
|
required this.image,
|
||||||
required this.onTap,
|
required this.onTapPlus,
|
||||||
|
required this.quantity,
|
||||||
|
required this.onTapMinus,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -57,9 +61,21 @@ class BasketItemCard extends StatelessWidget {
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: onTap,
|
icon: const Icon(Icons.remove),
|
||||||
icon: const Icon(Icons.close),
|
onPressed: onTapMinus,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
Text(quantity),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
IconButton(
|
||||||
|
icon: const Icon(Icons.add),
|
||||||
|
onPressed: onTapPlus,
|
||||||
|
),
|
||||||
|
],
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ List<Map<String, dynamic>> cart = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
//TODO: Сделать правильное удаление из корзины по одному
|
|
||||||
class BasketPage extends StatefulWidget {
|
class BasketPage extends StatefulWidget {
|
||||||
const BasketPage({super.key});
|
const BasketPage({super.key});
|
||||||
|
|
||||||
@@ -59,23 +58,52 @@ class _BasketPageState extends State<BasketPage> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
getCart().then((value) {
|
getCart().then((value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
cartItems = cart
|
cartItems = value.map((element) {
|
||||||
.where((element) => value.any((e) => e['id'] == element['id']))
|
final item = cart.firstWhere((e) => e['id'] == element['id']);
|
||||||
.toList();
|
return {...item, 'count': element['count'] as int};
|
||||||
totalPrice =
|
}).toList();
|
||||||
cartItems.fold(0, (sum, item) => sum + int.parse(item['price']));
|
totalPrice = cartItems.fold(
|
||||||
|
0,
|
||||||
|
(sum, item) =>
|
||||||
|
sum + int.parse(item['price']) * item['count'] as int);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeItem(String id) async {
|
void removeItem(String id) async {
|
||||||
|
final item = cartItems.firstWhere((element) => element['id'] == id);
|
||||||
|
bool toDelete = false;
|
||||||
setState(() {
|
setState(() {
|
||||||
cartItems.removeWhere((element) => element['id'] == id);
|
if (item['count'] > 1) {
|
||||||
totalPrice =
|
item['count']--;
|
||||||
cartItems.fold(0, (sum, item) => sum + int.parse(item['price']));
|
cartItems[cartItems.indexOf(item)]['count'] = item['count'];
|
||||||
|
} else {
|
||||||
|
toDelete = true;
|
||||||
|
}
|
||||||
|
totalPrice = cartItems.fold(0,
|
||||||
|
(sum, item) => sum + int.parse(item['price']) * item['count'] as int);
|
||||||
});
|
});
|
||||||
|
if (toDelete) {
|
||||||
|
await _deleteItemAlert(id, item['name']);
|
||||||
|
} else {
|
||||||
await removeItemFromCart(id);
|
await removeItemFromCart(id);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void addItem(String id) async {
|
||||||
|
setState(() {
|
||||||
|
final item = cartItems.firstWhere((element) => element['id'] == id,
|
||||||
|
orElse: () => {
|
||||||
|
...cart.firstWhere((element) => element['id'] == id),
|
||||||
|
'count': 0
|
||||||
|
});
|
||||||
|
item['count']++;
|
||||||
|
cartItems[cartItems.indexOf(item)]['count'] = item['count'];
|
||||||
|
totalPrice = cartItems.fold(0,
|
||||||
|
(sum, item) => sum + int.parse(item['price']) * item['count'] as int);
|
||||||
|
});
|
||||||
|
await addItemToCart(id);
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _deleteItemAlert(String id, String name) async {
|
Future<void> _deleteItemAlert(String id, String name) async {
|
||||||
return showDialog<void>(
|
return showDialog<void>(
|
||||||
@@ -101,7 +129,10 @@ class _BasketPageState extends State<BasketPage> {
|
|||||||
TextButton(
|
TextButton(
|
||||||
child: const Text('Удалить'),
|
child: const Text('Удалить'),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
removeItem(id);
|
removeItemFromCart(id);
|
||||||
|
setState(() {
|
||||||
|
cartItems.removeWhere((element) => element['id'] == id);
|
||||||
|
});
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -196,8 +227,10 @@ class _BasketPageState extends State<BasketPage> {
|
|||||||
item['image'],
|
item['image'],
|
||||||
width: 50,
|
width: 50,
|
||||||
),
|
),
|
||||||
onTap: () =>
|
onTapPlus: () => addItem(item['id'].toString()),
|
||||||
_deleteItemAlert(item['id'], item['name']),
|
onTapMinus: () =>
|
||||||
|
removeItem(item['id'].toString()),
|
||||||
|
quantity: item['count'].toString(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -78,7 +78,9 @@ class _DetailPageState extends State<DetailPage> {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
Text('$quantity'),
|
Text('$quantity'),
|
||||||
|
const SizedBox(width: 10),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.add),
|
icon: const Icon(Icons.add),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ dependencies:
|
|||||||
url_launcher: ^6.2.6
|
url_launcher: ^6.2.6
|
||||||
shared_preferences: ^2.2.3
|
shared_preferences: ^2.2.3
|
||||||
flutter_markdown: ^0.7.1
|
flutter_markdown: ^0.7.1
|
||||||
|
http: ^1.2.1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user