Я звоню в API, когда элемент добавляется в корзину, и если его успех, Snackbar покажет для успеха, но что, если пользователь добавит один после одного слишком большого количества продуктов, то All Snackbars покажут один за другим, поэтому я хочу Когда пользователь останавливается, тогда Snackbar должен показывать только один раз последнюю последнюю с MSG
MyCart API < /p>
Timer? debounceSnackBarTimer;
Future addToCart(Package package) async {
final prefs = await SharedPreferences.getInstance();
final accessToken = prefs.getString('accessToken');
final String apiUrl = await AppNetworkingUrls.addtoCart;
if (accessToken == null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Please log in to add items to the cart',
style: GoogleFonts.poppins(),
),
),
);
return;
}
final url = Uri.parse(apiUrl);
final headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer $accessToken',
};
final body = jsonEncode({
'quantity': 1,
'productId': product.id,
'packageId': package.id,
});
debounceSnackBarTimer?.cancel();
debounceSnackBarTimer = Timer(Duration(milliseconds: 800), () async {
try {
final response = await http.post(
url,
headers: headers,
body: body,
);
if (response.statusCode == 200) {
final responseData = jsonDecode(response.body);
print(response.body);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: AppColors.buttonColor,
duration: Duration(seconds: 2),
content: Text(
responseData['message'] ?? 'Item added to cart',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
final cartProvider = Provider.of(context, listen: false);
await cartProvider.fetchCartItems();
} else {
final responseData = jsonDecode(response.body);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: Colors.red,
duration: Duration(seconds: 2),
content: Text(
responseData['message'] ?? 'Failed to add item',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
}
} catch (error) {
print('Error adding to cart: $error');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: Colors.red,
duration: Duration(seconds: 2),
content: Text(
'Something went wrong. Please try again.',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
}
});
}
< /code>
Существуют продукты Diff, и у каждого продукта есть пакеты Diff, пользователь также добавит несколько продуктов, но я хочу показать последнее только один раз < /p>
У меня есть Также попробовал Debounce, но он не работает, как я хотел, пожалуйста, если кто -то может помочь мне в этом дебюре, работает только в том случае, если пользователь добавляет одинаковые продукты снова и снова и снова, то это работает, но я хочу, чтобы он работал во всех продуктах и пакетах
Подробнее здесь: https://stackoverflow.com/questions/794 ... -only-once
Как показать закусочную только один раз ⇐ IOS
Программируем под IOS
1739866240
Anonymous
Я звоню в API, когда элемент добавляется в корзину, и если его успех, Snackbar покажет для успеха, но что, если пользователь добавит один после одного слишком большого количества продуктов, то All Snackbars покажут один за другим, поэтому я хочу Когда пользователь останавливается, тогда Snackbar должен показывать только один раз последнюю последнюю с MSG
MyCart API < /p>
Timer? debounceSnackBarTimer;
Future addToCart(Package package) async {
final prefs = await SharedPreferences.getInstance();
final accessToken = prefs.getString('accessToken');
final String apiUrl = await AppNetworkingUrls.addtoCart;
if (accessToken == null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Please log in to add items to the cart',
style: GoogleFonts.poppins(),
),
),
);
return;
}
final url = Uri.parse(apiUrl);
final headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer $accessToken',
};
final body = jsonEncode({
'quantity': 1,
'productId': product.id,
'packageId': package.id,
});
debounceSnackBarTimer?.cancel();
debounceSnackBarTimer = Timer(Duration(milliseconds: 800), () async {
try {
final response = await http.post(
url,
headers: headers,
body: body,
);
if (response.statusCode == 200) {
final responseData = jsonDecode(response.body);
print(response.body);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: AppColors.buttonColor,
duration: Duration(seconds: 2),
content: Text(
responseData['message'] ?? 'Item added to cart',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
final cartProvider = Provider.of(context, listen: false);
await cartProvider.fetchCartItems();
} else {
final responseData = jsonDecode(response.body);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: Colors.red,
duration: Duration(seconds: 2),
content: Text(
responseData['message'] ?? 'Failed to add item',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
}
} catch (error) {
print('Error adding to cart: $error');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: Colors.red,
duration: Duration(seconds: 2),
content: Text(
'Something went wrong. Please try again.',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
}
});
}
< /code>
Существуют продукты Diff, и у каждого продукта есть пакеты Diff, пользователь также добавит несколько продуктов, но я хочу показать последнее только один раз < /p>
У меня есть Также попробовал Debounce, но он не работает, как я хотел, пожалуйста, если кто -то может помочь мне в этом дебюре, работает только в том случае, если пользователь добавляет одинаковые продукты снова и снова и снова, то это работает, но я хочу, чтобы он работал во всех продуктах и пакетах
Подробнее здесь: [url]https://stackoverflow.com/questions/79447530/how-to-show-snackbar-only-once[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия