updatePinIcon function

Future<void> updatePinIcon(
  1. dynamic context,
  2. dynamic ref,
  3. dynamic pin,
  4. dynamic color,
  5. dynamic acterIcon,
)

Implementation

Future<void> updatePinIcon(
  BuildContext context,
  WidgetRef ref,
  ActerPin pin,
  Color color,
  ActerIcon acterIcon,
) async {
  final lang = L10n.of(context);
  try {
    EasyLoading.show(status: lang.updatingIcon);
    // Pin IconData
    final sdk = await ref.watch(sdkProvider.future);
    final displayBuilder = sdk.api.newDisplayBuilder();
    displayBuilder.color(color.toInt());
    displayBuilder.icon('acter-icon', acterIcon.name);

    final updateBuilder = pin.updateBuilder();
    updateBuilder.display(displayBuilder.build());

    await updateBuilder.send();
    EasyLoading.dismiss();

    //TODO : this only fixes the case where we do the update. if the change comes from outside - another user - this will not trigger.
    ref.invalidate(pinProvider);
    ref.invalidate(pinListProvider);
  } catch (e, s) {
    _log.severe('Failed to change icon of pin', e, s);
    if (!context.mounted) {
      EasyLoading.dismiss();
      return;
    }
    EasyLoading.showError(
      lang.updateNameFailed(e),
      duration: const Duration(seconds: 3),
    );
  }
}