Right deleting items from cart
This commit is contained in:
@@ -42,7 +42,6 @@ List<Map<String, dynamic>> cart = [
|
||||
}
|
||||
];
|
||||
|
||||
//TODO: Сделать правильное удаление из корзины по одному
|
||||
class BasketPage extends StatefulWidget {
|
||||
const BasketPage({super.key});
|
||||
|
||||
@@ -59,22 +58,51 @@ class _BasketPageState extends State<BasketPage> {
|
||||
super.initState();
|
||||
getCart().then((value) {
|
||||
setState(() {
|
||||
cartItems = cart
|
||||
.where((element) => value.any((e) => e['id'] == element['id']))
|
||||
.toList();
|
||||
totalPrice =
|
||||
cartItems.fold(0, (sum, item) => sum + int.parse(item['price']));
|
||||
cartItems = value.map((element) {
|
||||
final item = cart.firstWhere((e) => e['id'] == element['id']);
|
||||
return {...item, 'count': element['count'] as int};
|
||||
}).toList();
|
||||
totalPrice = cartItems.fold(
|
||||
0,
|
||||
(sum, item) =>
|
||||
sum + int.parse(item['price']) * item['count'] as int);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void removeItem(String id) async {
|
||||
final item = cartItems.firstWhere((element) => element['id'] == id);
|
||||
bool toDelete = false;
|
||||
setState(() {
|
||||
cartItems.removeWhere((element) => element['id'] == id);
|
||||
totalPrice =
|
||||
cartItems.fold(0, (sum, item) => sum + int.parse(item['price']));
|
||||
if (item['count'] > 1) {
|
||||
item['count']--;
|
||||
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);
|
||||
});
|
||||
await removeItemFromCart(id);
|
||||
if (toDelete) {
|
||||
await _deleteItemAlert(id, item['name']);
|
||||
} else {
|
||||
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 {
|
||||
@@ -101,7 +129,10 @@ class _BasketPageState extends State<BasketPage> {
|
||||
TextButton(
|
||||
child: const Text('Удалить'),
|
||||
onPressed: () {
|
||||
removeItem(id);
|
||||
removeItemFromCart(id);
|
||||
setState(() {
|
||||
cartItems.removeWhere((element) => element['id'] == id);
|
||||
});
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
@@ -196,8 +227,10 @@ class _BasketPageState extends State<BasketPage> {
|
||||
item['image'],
|
||||
width: 50,
|
||||
),
|
||||
onTap: () =>
|
||||
_deleteItemAlert(item['id'], item['name']),
|
||||
onTapPlus: () => addItem(item['id'].toString()),
|
||||
onTapMinus: () =>
|
||||
removeItem(item['id'].toString()),
|
||||
quantity: item['count'].toString(),
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
@@ -78,7 +78,9 @@ class _DetailPageState extends State<DetailPage> {
|
||||
});
|
||||
},
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Text('$quantity'),
|
||||
const SizedBox(width: 10),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.add),
|
||||
onPressed: () async {
|
||||
|
||||
Reference in New Issue
Block a user