saveCategories function

Future<void> saveCategories(
  1. dynamic context,
  2. dynamic ref,
  3. String spaceId,
  4. dynamic categoriesFor,
  5. List categoryList,
)

Implementation

Future<void> saveCategories(
  BuildContext context,
  WidgetRef ref,
  String spaceId,
  CategoriesFor categoriesFor,
  List<CategoryModelLocal> categoryList,
) async {
  final lang = L10n.of(context);
  // Show loading message
  EasyLoading.show(status: lang.updatingCategories);
  try {
    //Get category manager
    final categoriesManager = await ref.read(
      categoryManagerProvider(
        (spaceId: spaceId, categoriesFor: categoriesFor),
      ).future,
    );
    final sdk = await ref.watch(sdkProvider.future);
    final displayBuilder = sdk.api.newDisplayBuilder();

    //Get category builder
    final categoriesBuilder = categoriesManager.updateBuilder();

    //Clear category builder data and Add new
    categoriesBuilder.clear();
    for (final category in categoryList) {
      bool isValidCategory = CategoryUtils().isValidCategory(category);
      if (!isValidCategory) continue;
      final title = category.title;
      if (title == null) continue;
      final newCategoryItem = categoriesManager.newCategoryBuilder();
      //ADD TITLE
      newCategoryItem.title(title);

      //ADD COLOR AND ICON
      category.color.map((color) {
        displayBuilder.color(color.toInt());
      });
      category.icon.map((icon) {
        displayBuilder.icon('acter-icon', icon.name);
      });
      newCategoryItem.display(displayBuilder.build());

      //ADD ENTRIES
      for (final entry in category.entries) {
        newCategoryItem.addEntry(entry);
      }
      categoriesBuilder.add(newCategoryItem.build());
    }

    //Save category builder
    final space = await ref.read(spaceProvider(spaceId).future);
    space.setCategories(categoriesFor.name, categoriesBuilder);

    EasyLoading.dismiss();
  } catch (e, s) {
    _log.severe('Failed to save categories', e, s);
    if (!context.mounted) {
      EasyLoading.dismiss();
      return;
    }
    EasyLoading.showError(
      lang.updatingCategoriesFailed(e),
      duration: const Duration(seconds: 3),
    );
  }
}