showLeaveSpaceDialog function

void showLeaveSpaceDialog(
  1. dynamic context,
  2. dynamic ref,
  3. String spaceId
)

Implementation

void showLeaveSpaceDialog(BuildContext context, WidgetRef ref, String spaceId) {
  showAdaptiveDialog(
    barrierDismissible: true,
    context: context,
    useRootNavigator: false,
    builder: (context) => DefaultDialog(
      title: Column(
        children: <Widget>[
          const Icon(Icons.person_remove_outlined),
          const SizedBox(height: 5),
          Text(
            L10n.of(context).leaveSpace,
            style: Theme.of(context).textTheme.titleMedium,
          ),
        ],
      ),
      subtitle: Text(L10n.of(context).areYouSureYouWantToLeaveSpace),
      actions: <Widget>[
        OutlinedButton(
          onPressed: () => Navigator.pop(context),
          child: Text(L10n.of(context).noIStay),
        ),
        ActerDangerActionButton(
          key: leaveSpaceYesBtn,
          onPressed: () async {
            final lang = L10n.of(context);
            try {
              EasyLoading.show(status: lang.leavingSpace);
              final parentIds =
                  await ref.read(parentIdsProvider(spaceId).future);
              final space = await ref.read(spaceProvider(spaceId).future);
              await space.leave();
              if (!context.mounted) {
                return;
              }
              EasyLoading.showToast(lang.leavingSpaceSuccessful);
              for (final parentId in parentIds) {
                ref.invalidate(spaceRelationsProvider(parentId));
                ref.invalidate(spaceRemoteRelationsProvider(parentId));
              }
              Navigator.pop(context);
              context.goNamed(Routes.dashboard.name);
            } catch (e, s) {
              _log.severe('Failed to leave space', e, s);
              if (!context.mounted) {
                EasyLoading.dismiss();
                return;
              }
              EasyLoading.showError(
                lang.leavingSpaceFailed(e),
                duration: const Duration(seconds: 3),
              );
            }
          },
          child: Text(L10n.of(context).yesLeave),
        ),
      ],
    ),
  );
}