import 'package:flutter/material.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; typedef ApiCall = Future Function(); Future request(BuildContext context, ApiCall api) async { var start = DateTime.now().millisecondsSinceEpoch; var pop = false; showDialog( barrierDismissible: false, context: context, child: Dialog( backgroundColor: Colors.transparent, elevation: 0, child: GestureDetector( onTap: () { var end = DateTime.now().millisecondsSinceEpoch; if (end - start > 10 * 1000) { pop = true; Navigator.of(context).pop(); } }, child: Container( padding: EdgeInsets.all(16.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Container( width: 100, height: 100, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10.0)), color: Colors.black45, ), child: SpinKitFadingCircle( color: Theme.of(context).accentColor, ), ), ], )), ))); var data = await api.call().catchError((onError) { print("[onError]:$onError"); }); if (!pop) Navigator.of(context).pop(); return data; }