filter group peers without http request
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
parent
af309096c9
commit
ec9062f505
@ -48,7 +48,7 @@ class PeerPayload {
|
|||||||
note = json['note'] ?? '';
|
note = json['note'] ?? '';
|
||||||
|
|
||||||
static Peer toPeer(PeerPayload p) {
|
static Peer toPeer(PeerPayload p) {
|
||||||
return Peer.fromJson({"id": p.id});
|
return Peer.fromJson({"id": p.id, "username": p.user_name});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,8 +16,8 @@ class MyGroup extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _MyGroupState extends State<MyGroup> {
|
class _MyGroupState extends State<MyGroup> {
|
||||||
static final RxString selectedUser = ''.obs;
|
RxString get selectedUser => gFFI.groupModel.selectedUser;
|
||||||
static final RxString searchUserText = ''.obs;
|
RxString get searchUserText => gFFI.groupModel.searchUserText;
|
||||||
static TextEditingController searchUserController = TextEditingController();
|
static TextEditingController searchUserController = TextEditingController();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -37,8 +37,10 @@ class _MyGroupState extends State<MyGroup> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Future<Widget> buildBody(BuildContext context) async {
|
Future<Widget> buildBody(BuildContext context) async {
|
||||||
|
gFFI.groupModel.pullUserPeers();
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
if (gFFI.groupModel.groupLoading.value) {
|
if (gFFI.groupModel.groupLoading.value ||
|
||||||
|
gFFI.groupModel.peerLoading.value) {
|
||||||
return const Center(
|
return const Center(
|
||||||
child: CircularProgressIndicator(),
|
child: CircularProgressIndicator(),
|
||||||
);
|
);
|
||||||
@ -70,85 +72,81 @@ class _MyGroupState extends State<MyGroup> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildDesktop() {
|
Widget _buildDesktop() {
|
||||||
return Obx(
|
return Row(
|
||||||
() => Row(
|
children: [
|
||||||
children: [
|
Card(
|
||||||
Card(
|
margin: EdgeInsets.symmetric(horizontal: 4.0),
|
||||||
margin: EdgeInsets.symmetric(horizontal: 4.0),
|
shape: RoundedRectangleBorder(
|
||||||
shape: RoundedRectangleBorder(
|
borderRadius: BorderRadius.circular(12),
|
||||||
borderRadius: BorderRadius.circular(12),
|
side:
|
||||||
side: BorderSide(
|
BorderSide(color: Theme.of(context).scaffoldBackgroundColor)),
|
||||||
color: Theme.of(context).scaffoldBackgroundColor)),
|
child: Container(
|
||||||
child: Container(
|
width: 200,
|
||||||
width: 200,
|
height: double.infinity,
|
||||||
height: double.infinity,
|
padding:
|
||||||
padding:
|
const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0),
|
||||||
const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0),
|
child: Column(
|
||||||
child: Column(
|
children: [
|
||||||
children: [
|
_buildLeftHeader(),
|
||||||
_buildLeftHeader(),
|
Expanded(
|
||||||
Expanded(
|
child: Container(
|
||||||
child: Container(
|
width: double.infinity,
|
||||||
width: double.infinity,
|
height: double.infinity,
|
||||||
height: double.infinity,
|
decoration:
|
||||||
decoration:
|
BoxDecoration(borderRadius: BorderRadius.circular(2)),
|
||||||
BoxDecoration(borderRadius: BorderRadius.circular(2)),
|
child: _buildUserContacts(),
|
||||||
child: _buildUserContacts(),
|
).marginSymmetric(vertical: 8.0),
|
||||||
).marginSymmetric(vertical: 8.0),
|
)
|
||||||
)
|
],
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
).marginOnly(right: 8.0),
|
),
|
||||||
Expanded(
|
).marginOnly(right: 8.0),
|
||||||
child: Align(
|
Expanded(
|
||||||
alignment: Alignment.topLeft,
|
child: Align(
|
||||||
child: MyGroupPeerView(
|
alignment: Alignment.topLeft,
|
||||||
menuPadding: widget.menuPadding,
|
child: MyGroupPeerView(
|
||||||
initPeers: gFFI.groupModel.peersShow.value)),
|
menuPadding: widget.menuPadding,
|
||||||
)
|
initPeers: gFFI.groupModel.peersShow)),
|
||||||
],
|
)
|
||||||
),
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMobile() {
|
Widget _buildMobile() {
|
||||||
return Obx(
|
return Column(
|
||||||
() => Column(
|
children: [
|
||||||
children: [
|
Card(
|
||||||
Card(
|
margin: EdgeInsets.symmetric(horizontal: 4.0),
|
||||||
margin: EdgeInsets.symmetric(horizontal: 4.0),
|
shape: RoundedRectangleBorder(
|
||||||
shape: RoundedRectangleBorder(
|
borderRadius: BorderRadius.circular(12),
|
||||||
borderRadius: BorderRadius.circular(12),
|
side:
|
||||||
side: BorderSide(
|
BorderSide(color: Theme.of(context).scaffoldBackgroundColor)),
|
||||||
color: Theme.of(context).scaffoldBackgroundColor)),
|
child: Container(
|
||||||
child: Container(
|
padding:
|
||||||
padding:
|
const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0),
|
||||||
const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0),
|
child: Column(
|
||||||
child: Column(
|
mainAxisSize: MainAxisSize.min,
|
||||||
mainAxisSize: MainAxisSize.min,
|
children: [
|
||||||
children: [
|
_buildLeftHeader(),
|
||||||
_buildLeftHeader(),
|
Container(
|
||||||
Container(
|
width: double.infinity,
|
||||||
width: double.infinity,
|
decoration:
|
||||||
decoration:
|
BoxDecoration(borderRadius: BorderRadius.circular(4)),
|
||||||
BoxDecoration(borderRadius: BorderRadius.circular(4)),
|
child: _buildUserContacts(),
|
||||||
child: _buildUserContacts(),
|
).marginSymmetric(vertical: 8.0)
|
||||||
).marginSymmetric(vertical: 8.0)
|
],
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Divider(),
|
),
|
||||||
Expanded(
|
Divider(),
|
||||||
child: Align(
|
Expanded(
|
||||||
alignment: Alignment.topLeft,
|
child: Align(
|
||||||
child: MyGroupPeerView(
|
alignment: Alignment.topLeft,
|
||||||
menuPadding: widget.menuPadding,
|
child: MyGroupPeerView(
|
||||||
initPeers: gFFI.groupModel.peersShow.value)),
|
menuPadding: widget.menuPadding,
|
||||||
)
|
initPeers: gFFI.groupModel.peersShow)),
|
||||||
],
|
)
|
||||||
),
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +196,8 @@ class _MyGroupState extends State<MyGroup> {
|
|||||||
return InkWell(onTap: () {
|
return InkWell(onTap: () {
|
||||||
if (selectedUser.value != username) {
|
if (selectedUser.value != username) {
|
||||||
selectedUser.value = username;
|
selectedUser.value = username;
|
||||||
gFFI.groupModel.pullUserPeers(user);
|
} else {
|
||||||
|
selectedUser.value = '';
|
||||||
}
|
}
|
||||||
}, child: Obx(
|
}, child: Obx(
|
||||||
() {
|
() {
|
||||||
|
@ -427,10 +427,25 @@ class MyGroupPeerView extends BasePeersView {
|
|||||||
key: key,
|
key: key,
|
||||||
name: 'my group peer',
|
name: 'my group peer',
|
||||||
loadEvent: 'load_my_group_peers',
|
loadEvent: 'load_my_group_peers',
|
||||||
|
peerFilter: filter,
|
||||||
peerCardBuilder: (Peer peer) => MyGroupPeerCard(
|
peerCardBuilder: (Peer peer) => MyGroupPeerCard(
|
||||||
peer: peer,
|
peer: peer,
|
||||||
menuPadding: menuPadding,
|
menuPadding: menuPadding,
|
||||||
),
|
),
|
||||||
initPeers: initPeers,
|
initPeers: initPeers,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static bool filter(Peer peer) {
|
||||||
|
if (gFFI.groupModel.searchUserText.isNotEmpty) {
|
||||||
|
if (!peer.username.contains(gFFI.groupModel.searchUserText)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gFFI.groupModel.selectedUser.isNotEmpty) {
|
||||||
|
if (gFFI.groupModel.selectedUser.value != peer.username) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,9 @@ class GroupModel {
|
|||||||
final RxString groupName = ''.obs;
|
final RxString groupName = ''.obs;
|
||||||
final RxString groupId = ''.obs;
|
final RxString groupId = ''.obs;
|
||||||
final RxList<UserPayload> users = RxList.empty(growable: true);
|
final RxList<UserPayload> users = RxList.empty(growable: true);
|
||||||
final RxList<PeerPayload> peerPayloads = RxList.empty(growable: true);
|
final List<Peer> peersShow = List.empty(growable: true);
|
||||||
final RxList<Peer> peersShow = RxList.empty(growable: true);
|
final RxString selectedUser = ''.obs;
|
||||||
|
final RxString searchUserText = ''.obs;
|
||||||
WeakReference<FFI> parent;
|
WeakReference<FFI> parent;
|
||||||
|
|
||||||
GroupModel(this.parent);
|
GroupModel(this.parent);
|
||||||
@ -30,7 +31,6 @@ class GroupModel {
|
|||||||
groupName.value = '';
|
groupName.value = '';
|
||||||
groupId.value = '';
|
groupId.value = '';
|
||||||
users.clear();
|
users.clear();
|
||||||
peerPayloads.clear();
|
|
||||||
peersShow.clear();
|
peersShow.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ class GroupModel {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
debugPrintStack(label: '$e');
|
debugPrint('$e');
|
||||||
reset();
|
reset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ class GroupModel {
|
|||||||
}
|
}
|
||||||
} while (current * pageSize < total);
|
} while (current * pageSize < total);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
debugPrintStack(label: '$err');
|
debugPrint('$err');
|
||||||
groupLoadError.value = err.toString();
|
groupLoadError.value = err.toString();
|
||||||
} finally {
|
} finally {
|
||||||
groupLoading.value = false;
|
groupLoading.value = false;
|
||||||
@ -128,23 +128,30 @@ class GroupModel {
|
|||||||
groupId.value = data['id'] ?? '';
|
groupId.value = data['id'] ?? '';
|
||||||
return groupId.value.isNotEmpty && groupName.isNotEmpty;
|
return groupId.value.isNotEmpty && groupName.isNotEmpty;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
debugPrintStack(label: '$e');
|
debugPrint('$e');
|
||||||
} finally {}
|
} finally {}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> pullUserPeers(UserPayload user) async {
|
Future<void> pullUserPeers() async {
|
||||||
peerPayloads.clear();
|
|
||||||
peersShow.clear();
|
peersShow.clear();
|
||||||
peerLoading.value = true;
|
peerLoading.value = true;
|
||||||
peerLoadError.value = "";
|
peerLoadError.value = "";
|
||||||
|
List<PeerPayload> peerPayloads = List.empty(growable: true);
|
||||||
final api = "${await bind.mainGetApiServer()}/api/peers";
|
final api = "${await bind.mainGetApiServer()}/api/peers";
|
||||||
try {
|
try {
|
||||||
var uri0 = Uri.parse(api);
|
var uri0 = Uri.parse(api);
|
||||||
final pageSize = 20;
|
final pageSize = 20;
|
||||||
var total = 0;
|
var total = 0;
|
||||||
int current = 0;
|
int current = 0;
|
||||||
|
var queryParameters = {
|
||||||
|
'current': current.toString(),
|
||||||
|
'pageSize': pageSize.toString(),
|
||||||
|
};
|
||||||
|
if (!gFFI.userModel.isAdmin.value) {
|
||||||
|
queryParameters.addAll({'grp': groupId.value});
|
||||||
|
}
|
||||||
do {
|
do {
|
||||||
current += 1;
|
current += 1;
|
||||||
var uri = Uri(
|
var uri = Uri(
|
||||||
@ -152,11 +159,7 @@ class GroupModel {
|
|||||||
host: uri0.host,
|
host: uri0.host,
|
||||||
path: uri0.path,
|
path: uri0.path,
|
||||||
port: uri0.port,
|
port: uri0.port,
|
||||||
queryParameters: {
|
queryParameters: queryParameters);
|
||||||
'current': current.toString(),
|
|
||||||
'pageSize': pageSize.toString(),
|
|
||||||
'target_user': user.id,
|
|
||||||
});
|
|
||||||
final resp = await http.get(uri, headers: getHttpHeaders());
|
final resp = await http.get(uri, headers: getHttpHeaders());
|
||||||
if (resp.body.isNotEmpty && resp.body.toLowerCase() != "null") {
|
if (resp.body.isNotEmpty && resp.body.toLowerCase() != "null") {
|
||||||
Map<String, dynamic> json = jsonDecode(utf8.decode(resp.bodyBytes));
|
Map<String, dynamic> json = jsonDecode(utf8.decode(resp.bodyBytes));
|
||||||
@ -180,7 +183,7 @@ class GroupModel {
|
|||||||
}
|
}
|
||||||
} while (current * pageSize < total);
|
} while (current * pageSize < total);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
debugPrintStack(label: '$err');
|
debugPrint('$err');
|
||||||
peerLoadError.value = err.toString();
|
peerLoadError.value = err.toString();
|
||||||
} finally {
|
} finally {
|
||||||
peerLoading.value = false;
|
peerLoading.value = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user