import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:local_spend/common/functions/save_current_login.dart'; import 'package:local_spend/model/json/login_model.dart'; Future _incorrectDialog(BuildContext context, bool isLoginWrong) async { return showDialog( context: context, barrierDismissible: true, builder: (BuildContext context) { return AnimatedContainer( duration: Duration(seconds: 2), child: AlertDialog( title: Text("Uh-oh!"), content: Text(isLoginWrong ? "Incorrect login details. Please try again." : "Our servers are having issues at the moment; sorry for the inconvenience. Please try again later."), actions: [ FlatButton( child: Text('OK'), onPressed: () { Navigator.of(context).pop(); }, ), ], ), ); }, ); } Future requestLoginAPI( BuildContext context, String email, String password) async { final url = "https://dev.localspend.co.uk/api/login"; Map body = { 'email': email, 'password': password, }; try { final response = await http .post( url, body: json.encode(body), ) .timeout(Duration(seconds: 5)); if (response.statusCode == 200) { final responseJson = json.decode(response.body); saveCurrentLogin(responseJson, body["email"]); await Navigator.of(context).pushReplacementNamed('/HomePage'); return LoginModel.fromJson(responseJson); } else { final responseJson = json.decode(response.body); saveCurrentLogin(responseJson, body["email"]); await _incorrectDialog(context, true); return null; } } on TimeoutException catch (_) { await _incorrectDialog(context, false); } catch (error) { debugPrint(error.toString()); await _incorrectDialog(context, false); } return null; }