fluffychat/lib/components/dialogs/simple_dialogs.dart

54 lines
1.7 KiB
Dart
Raw Normal View History

import 'package:flushbar/flushbar_helper.dart';
import 'package:famedlysdk/famedlysdk.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
class SimpleDialogs {
final BuildContext context;
const SimpleDialogs(this.context);
2020-04-27 13:36:39 +02:00
Future<dynamic> tryRequestWithLoadingDialog(Future<dynamic> request,
{Function(MatrixException) onAdditionalAuth}) async {
2020-10-02 14:44:05 +02:00
var completed = false;
final futureResult = tryRequestWithErrorToast(
request,
onAdditionalAuth: onAdditionalAuth,
).whenComplete(() => completed = true);
await Future.delayed(Duration(seconds: 1));
if (completed) return futureResult;
return showDialog<dynamic>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
futureResult.then(
(result) => Navigator.of(context).pop<dynamic>(result),
);
return AlertDialog(
title: Text(L10n.of(context).loadingPleaseWait),
content: LinearProgressIndicator(),
);
},
);
2020-04-27 13:36:39 +02:00
}
Future<dynamic> tryRequestWithErrorToast(Future<dynamic> request,
{Function(MatrixException) onAdditionalAuth}) async {
try {
return await request;
} on MatrixException catch (exception) {
if (exception.requireAdditionalAuthentication &&
onAdditionalAuth != null) {
return await tryRequestWithErrorToast(onAdditionalAuth(exception));
} else {
await FlushbarHelper.createError(message: exception.errorMessage)
.show(context);
2020-04-27 13:36:39 +02:00
}
} catch (exception) {
await FlushbarHelper.createError(message: exception.toString())
.show(context);
2020-04-27 13:36:39 +02:00
return false;
}
}
}