From 8a3da4eb417ecfea3f177303b6eebc284291e45f Mon Sep 17 00:00:00 2001 From: Kingtous Date: Tue, 26 Jul 2022 17:14:52 +0800 Subject: [PATCH] feat: retry logic Signed-off-by: Kingtous --- .../lib/desktop/pages/connection_page.dart | 24 +++++++++++++- flutter/lib/models/ab_model.dart | 31 ++++++++++--------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index aa9a71d35..56523bee1 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -609,6 +609,18 @@ class _ConnectionPageState extends State { builder: (context, snapshot) { if (snapshot.hasData) { return _buildAddressBook(context); + } else if (snapshot.hasError) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(translate("${snapshot.error}")), + TextButton( + onPressed: () { + setState(() {}); + }, + child: Text(translate("Retry"))) + ], + ); } else { if (model.abLoading) { return Center( @@ -616,7 +628,17 @@ class _ConnectionPageState extends State { ); } else if (model.abError.isNotEmpty) { return Center( - child: Text(translate("${model.abError}")), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(translate("${model.abError}")), + TextButton( + onPressed: () { + setState(() {}); + }, + child: Text(translate("Retry"))) + ], + ), ); } else { return Offstage(); diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 12d48bbb1..4350b6b05 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -24,22 +24,25 @@ class AbModel with ChangeNotifier { notifyListeners(); // request final api = "${await getApiServer()}/api/ab/get"; - final resp = await http.post(Uri.parse(api), headers: await _getHeaders()); - abLoading = false; - Map json = jsonDecode(resp.body); - if (json.containsKey('error')) { - abError = json['error']; - } else if (json.containsKey('data')) { - // {"tags":["aaa","bbb"], - // "peers":[{"id":"aa1234","username":"selfd", - // "hostname":"PC","platform":"Windows","tags":["aaa"]}]} - final data = jsonDecode(json['data']); - tags.value = data['tags']; - peers.value = data['peers']; + try { + final resp = + await http.post(Uri.parse(api), headers: await _getHeaders()); + Map json = jsonDecode(resp.body); + if (json.containsKey('error')) { + abError = json['error']; + } else if (json.containsKey('data')) { + final data = jsonDecode(json['data']); + tags.value = data['tags']; + peers.value = data['peers']; + } + return resp.body; + } catch (err) { + abError = err.toString(); + } finally { + abLoading = false; } - print(json); notifyListeners(); - return resp.body; + return null; } Future getApiServer() async {