mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2024-11-28 15:29:35 +01:00
54 lines
1.7 KiB
Dart
54 lines
1.7 KiB
Dart
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);
|
|
|
|
Future<dynamic> tryRequestWithLoadingDialog(Future<dynamic> request,
|
|
{Function(MatrixException) onAdditionalAuth}) async {
|
|
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(),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
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);
|
|
}
|
|
} catch (exception) {
|
|
await FlushbarHelper.createError(message: exception.toString())
|
|
.show(context);
|
|
return false;
|
|
}
|
|
}
|
|
}
|