Управление запасами Flutter: чтение из файла ресурсов json, запись в локальный файл и добавление в список элементов, упрAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Управление запасами Flutter: чтение из файла ресурсов json, запись в локальный файл и добавление в список элементов, упр

Сообщение Anonymous »

Я пытаюсь изучить Flutter с помощью приложения для инвентаризации. Мое приложение в настоящее время считывает список элементов из файла JSON, управляемого RiverPod, эта часть работает. Я также прочитал, что Flutter не позволяет записывать ресурсы, поэтому я написал метод InsertItem(), который записывает в локальный файл, а также добавляет новый элемент в управляемый текущий список элементов. Ни один из них не генерируется, без ошибок. Я просто вижу снэк-бар «Элемент добавлен», список инвентаря такой же на экране списка инвентаря, а также файл отсутствует в проводнике файлов локального устройства. Я постараюсь кратко добавить соответствующие части кода, дайте мне знать, если захотите увидеть другие части. Чтение из части файла ресурсов Json работает нормально.

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

@riverpod
class JsonInventoryService extends _$JsonInventoryService {
late Future _currentItems;
late InventoryResult inventoryResult;
@override
Future build() {
return Future.value([Item(id: 0, productName: 'NULL ITEM'),]);
}

Future loadItems() async {
var jsonString = await rootBundle.loadString('assets/inventorylist.json');
inventoryResult =
InventoryResult.fromJson(jsonDecode(jsonString));
_currentItems = Future.value(inventoryResultsToItems(inventoryResult));

}
Future fetchData() async {
return _currentItems;
}
МЕТОД ВСТАВКИ ЭЛЕМЕНТА:

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

 Map insertItem(Item item) {
inventoryResult.results.add(item);
final jsonmap = inventoryResult.toJson(); //json_serializable automatically handles nested class
storage.writeFile(jsonmap);
return jsonmap;
}

}
Inventory Result — это просто класс модели, в котором есть области для свойств элемента и toJson, fromJson, которым управляет json_serializable.
Класс хранения:< /p>

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

class Storage {
Future get _localPath async {
final directory = await getApplicationDocumentsDirectory();

return directory.path;
}

Future get _localFile async {
final path = await _localPath;
return File('$path/inventorylist.json');
}

Future writeFile(dynamic jsonmap) async {
final file = await _localFile;
return file.writeAsString('$jsonmap');
}
}
ДОБАВИТЬ НОВЫЙ ФАЙЛ DART:

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

class AddItemButton extends ConsumerStatefulWidget {

const AddItemButton({
required this.image,
required this.mode,
required this.storage,
super.key,
});

final Storage storage;
@override
ConsumerState createState() => _AddItemButtonState();
}

class _AddItemButtonState extends ConsumerState {
late var inventoryService = ref.watch(serviceProvider);
late var currentItemList = inventoryService.fetchData();

@override
Widget build(BuildContext context) {

Item addNewItem({int? barcodeNo, required String productName}) {
int id = Random().nextInt(100);
Item newItem =
Item(id: id, productName: productName, barcodeNo: barcodeNo, isActive: true,);
inventoryService.insertItem(newItem);
print("Added $productName!");
return newItem;
}
Объект хранилища создается в main.dart и передается на соответствующие экраны и классы. Кнопка «Добавить элемент» использует функцию InsertItem(). Экран, на котором отображаются элементы инвентаря, использует функцию fetchData(). Пожалуйста, дайте мне знать, если нужны дополнительные разъяснения.
Любые предложения по улучшению или исправлению очень приветствуются, поскольку я начал только в прошлом месяце.
РЕДАКТИРОВАТЬ:
Я отредактировал код в качестве предложений, поэтому теперь метод build() поставщика услуг RiverPod возвращает список текущих элементов, но я не могу использовать это list в любом месте моего приложения, так как он выдает ошибку AsyncValue>, которая не может быть назначена ошибкам типа List или Future в нескольких местах, где я использовал исходный список с FutureBuilder, или даже когда я пытаюсь использовать состояние в качестве списка. Что мне здесь не хватает?

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

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

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

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

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

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

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