Код: Выделить всё
@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;
}
}
Класс хранения:< /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');
}
}
Код: Выделить всё
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;
}
Любые предложения по улучшению или исправлению очень приветствуются, поскольку я начал только в прошлом месяце.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -local-fil