add force, quiet to pullAb, no force pull while switch tab, this may be
not good, because data not updated, have to do with refresh button, we may change to quiet pull in the future
This commit is contained in:
parent
977ac2a3b2
commit
58e4d66b44
@ -43,9 +43,6 @@ class _AddressBookState extends State<AddressBook> {
|
|||||||
if (gFFI.abModel.abError.isNotEmpty) {
|
if (gFFI.abModel.abError.isNotEmpty) {
|
||||||
return _buildShowError(gFFI.abModel.abError.value);
|
return _buildShowError(gFFI.abModel.abError.value);
|
||||||
}
|
}
|
||||||
if (gFFI.abModel.fromServer.isFalse) {
|
|
||||||
return Offstage();
|
|
||||||
}
|
|
||||||
return isDesktop
|
return isDesktop
|
||||||
? _buildAddressBookDesktop()
|
? _buildAddressBookDesktop()
|
||||||
: _buildAddressBookMobile();
|
: _buildAddressBookMobile();
|
||||||
|
@ -22,7 +22,7 @@ class PeerTabPage extends StatefulWidget {
|
|||||||
|
|
||||||
class _TabEntry {
|
class _TabEntry {
|
||||||
final Widget widget;
|
final Widget widget;
|
||||||
final Function() load;
|
final Function({dynamic hint}) load;
|
||||||
_TabEntry(this.widget, this.load);
|
_TabEntry(this.widget, this.load);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,12 +52,12 @@ class _PeerTabPageState extends State<PeerTabPage>
|
|||||||
AddressBook(
|
AddressBook(
|
||||||
menuPadding: _menuPadding(),
|
menuPadding: _menuPadding(),
|
||||||
),
|
),
|
||||||
() => gFFI.abModel.pullAb()),
|
({dynamic hint}) => gFFI.abModel.pullAb(force: hint == null)),
|
||||||
_TabEntry(
|
_TabEntry(
|
||||||
MyGroup(
|
MyGroup(
|
||||||
menuPadding: _menuPadding(),
|
menuPadding: _menuPadding(),
|
||||||
),
|
),
|
||||||
() => gFFI.groupModel.pull(),
|
({dynamic hint}) => gFFI.groupModel.pull(force: hint == null),
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ class _PeerTabPageState extends State<PeerTabPage>
|
|||||||
Future<void> handleTabSelection(int tabIndex) async {
|
Future<void> handleTabSelection(int tabIndex) async {
|
||||||
if (tabIndex < entries.length) {
|
if (tabIndex < entries.length) {
|
||||||
gFFI.peerTabModel.setCurrentTab(tabIndex);
|
gFFI.peerTabModel.setCurrentTab(tabIndex);
|
||||||
entries[tabIndex].load();
|
entries[tabIndex].load(hint: false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import 'package:flutter_hbb/models/model.dart';
|
|||||||
import 'package:flutter_hbb/models/peer_model.dart';
|
import 'package:flutter_hbb/models/peer_model.dart';
|
||||||
import 'package:flutter_hbb/models/platform_model.dart';
|
import 'package:flutter_hbb/models/platform_model.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:bot_toast/bot_toast.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
|
|
||||||
import '../common.dart';
|
import '../common.dart';
|
||||||
@ -13,19 +14,23 @@ class AbModel {
|
|||||||
final abLoading = false.obs;
|
final abLoading = false.obs;
|
||||||
final abError = "".obs;
|
final abError = "".obs;
|
||||||
final tags = [].obs;
|
final tags = [].obs;
|
||||||
final RxBool fromServer = false.obs;
|
|
||||||
final peers = List<Peer>.empty(growable: true).obs;
|
final peers = List<Peer>.empty(growable: true).obs;
|
||||||
|
|
||||||
final selectedTags = List<String>.empty(growable: true).obs;
|
final selectedTags = List<String>.empty(growable: true).obs;
|
||||||
|
var initialized = false;
|
||||||
|
|
||||||
WeakReference<FFI> parent;
|
WeakReference<FFI> parent;
|
||||||
|
|
||||||
AbModel(this.parent);
|
AbModel(this.parent);
|
||||||
|
|
||||||
Future<dynamic> pullAb() async {
|
Future<void> pullAb({force = true, quiet = false}) async {
|
||||||
if (gFFI.userModel.userName.isEmpty) return;
|
if (gFFI.userModel.userName.isEmpty) return;
|
||||||
abLoading.value = true;
|
if (abLoading.value) return;
|
||||||
abError.value = "";
|
if (!force && initialized) return;
|
||||||
|
if (!quiet) {
|
||||||
|
abLoading.value = true;
|
||||||
|
abError.value = "";
|
||||||
|
}
|
||||||
final api = "${await bind.mainGetApiServer()}/api/ab/get";
|
final api = "${await bind.mainGetApiServer()}/api/ab/get";
|
||||||
try {
|
try {
|
||||||
var authHeaders = getHttpHeaders();
|
var authHeaders = getHttpHeaders();
|
||||||
@ -50,25 +55,20 @@ class AbModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fromServer.value = true;
|
|
||||||
return resp.body;
|
|
||||||
} else {
|
|
||||||
fromServer.value = true;
|
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
err.printError();
|
|
||||||
abError.value = err.toString();
|
abError.value = err.toString();
|
||||||
} finally {
|
} finally {
|
||||||
abLoading.value = false;
|
abLoading.value = false;
|
||||||
|
initialized = true;
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> reset() async {
|
Future<void> reset() async {
|
||||||
await bind.mainSetLocalOption(key: "selected-tags", value: '');
|
await bind.mainSetLocalOption(key: "selected-tags", value: '');
|
||||||
tags.clear();
|
tags.clear();
|
||||||
peers.clear();
|
peers.clear();
|
||||||
|
initialized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addId(String id, String alias, List<dynamic> tags) {
|
void addId(String id, String alias, List<dynamic> tags) {
|
||||||
@ -104,7 +104,6 @@ class AbModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> pushAb() async {
|
Future<void> pushAb() async {
|
||||||
abLoading.value = true;
|
|
||||||
final api = "${await bind.mainGetApiServer()}/api/ab";
|
final api = "${await bind.mainGetApiServer()}/api/ab";
|
||||||
var authHeaders = getHttpHeaders();
|
var authHeaders = getHttpHeaders();
|
||||||
authHeaders['Content-Type'] = "application/json";
|
authHeaders['Content-Type'] = "application/json";
|
||||||
@ -113,16 +112,11 @@ class AbModel {
|
|||||||
"data": jsonEncode({"tags": tags, "peers": peersJsonData})
|
"data": jsonEncode({"tags": tags, "peers": peersJsonData})
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
final resp =
|
await http.post(Uri.parse(api), headers: authHeaders, body: body);
|
||||||
await http.post(Uri.parse(api), headers: authHeaders, body: body);
|
await pullAb(quiet: true);
|
||||||
abError.value = "";
|
|
||||||
await pullAb();
|
|
||||||
debugPrint("resp: ${resp.body}");
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
abError.value = e.toString();
|
BotToast.showText(contentColor: Colors.red, text: e.toString());
|
||||||
} finally {
|
} finally {}
|
||||||
abLoading.value = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Peer? find(String id) {
|
Peer? find(String id) {
|
||||||
|
@ -18,6 +18,7 @@ class GroupModel {
|
|||||||
final RxString selectedUser = ''.obs;
|
final RxString selectedUser = ''.obs;
|
||||||
final RxString searchUserText = ''.obs;
|
final RxString searchUserText = ''.obs;
|
||||||
WeakReference<FFI> parent;
|
WeakReference<FFI> parent;
|
||||||
|
var initialized = false;
|
||||||
|
|
||||||
GroupModel(this.parent);
|
GroupModel(this.parent);
|
||||||
|
|
||||||
@ -26,13 +27,16 @@ class GroupModel {
|
|||||||
groupId.value = '';
|
groupId.value = '';
|
||||||
users.clear();
|
users.clear();
|
||||||
peersShow.clear();
|
peersShow.clear();
|
||||||
|
initialized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> pull() async {
|
Future<void> pull({force = true}) async {
|
||||||
|
if (!force && initialized) return;
|
||||||
groupLoading.value = true;
|
groupLoading.value = true;
|
||||||
groupLoadError.value = "";
|
groupLoadError.value = "";
|
||||||
await _pull();
|
await _pull();
|
||||||
groupLoading.value = false;
|
groupLoading.value = false;
|
||||||
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _pull() async {
|
Future<void> _pull() async {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user