Flutter: элемент добавляется только при нажатии кнопки дважды или более (управление инвентарем Riverpod).Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Flutter: элемент добавляется только при нажатии кнопки дважды или более (управление инвентарем Riverpod).

Сообщение Anonymous »

У меня есть приложение, в котором есть список элементов, и я использовал очень похожий подход для методов удаления, добавления и обновления элементов; но кнопка добавления работает только при двойном нажатии. Если я нажму ее 4 раза, один и тот же элемент будет добавлен трижды.
Виджет, в котором есть кнопка (и некоторые другие текстовые поля с названием элемента и т. д.):

Код: Выделить всё

@override
Widget build(BuildContext context) {
final currentItemList = ref.watch(jsonInventoryServiceNotifierProvider);
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text("Manually Add An Item"),
),
body: Form(
key: _formKey,
child: Column(
children: [
//TEXT FIELD HERE TO INPUT ITEM NAME
ElevatedButton(
onPressed: () async {
if (_formKey.currentState!.validate()) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Item Added!')),
);
Item newItem = Item(
productName: productNameTextFieldController.text,
isActive: true,
);
await ref
.read(jsonInventoryServiceNotifierProvider.notifier)
.insertItem(newItem);
currentItemList.when(
data: (item) {
if(item.any((element) =>
element.productName.toLowerCase() ==
(newItem.productName.toLowerCase()))) {
print("OPEN DIALOG BOX TO SAY THIS PRODUCT WAS BOUGHT BEFORE");
}
},
error: (Object error, StackTrace stackTrace) {},
loading: () {});
setState(() {});
}
},
child: const Text('Submit'),
),
],
Добавить метод элемента внутри класса StateNotifierProvider:

Код: Выделить всё

Future insertItem(Item item) async {
final currentState = state;
late var currentList;

if (currentState is AsyncData) {
currentList = currentState.value;
state = AsyncValue.data([...currentList, item]);
} else if (currentState is AsyncLoading) {
} else if (currentState is AsyncError) {
}
inventoryResult.results = currentList;
final jsonmap = inventoryResult.toJson();
storage.writeFile(jsonmap);
}
Очевидно, что мне здесь что-то не хватает в отношении управления состоянием и перестройки виджетов, обработки событий здесь, но я не смог понять, и некоторые рекомендации из аналогичных вопросов SOF не помогли решить.
Сообщайте мне о любых улучшениях или исправлениях в моем коде, спасибо.

Подробнее здесь: https://stackoverflow.com/questions/790 ... rpod-inven
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»