import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/models/platform_model.dart'; void showPeerSelectionDialog( {bool singleSelection = false, required Function(List) onPeersCallback}) { final peers = bind.mainLoadRecentPeersSync(); if (peers.isEmpty) { debugPrint("load recent peers sync failed."); return; } Map map = jsonDecode(peers); List peersList = map['peers'] ?? []; final selected = List.empty(growable: true); submit() async { onPeersCallback.call(selected); } gFFI.dialogManager.show((setState, close, context) { return CustomAlertDialog( title: Text(translate(singleSelection ? "Select peers" : "Select a peer")), content: SizedBox( height: 300.0, child: ListView.builder( itemBuilder: (context, index) { final Map peer = peersList[index]; final String platform = peer['platform'] ?? ""; final String id = peer['id'] ?? ""; final String alias = peer['alias'] ?? ""; return GestureDetector( onTap: () { setState(() { if (selected.contains(id)) { selected.remove(id); } else { selected.add(id); } }); }, child: Container( key: ValueKey(index), height: 50.0, decoration: BoxDecoration( color: Theme.of(context).highlightColor, borderRadius: BorderRadius.circular(12.0)), padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 4.0), margin: EdgeInsets.symmetric(vertical: 4.0), child: Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ // platform SizedBox( width: 8.0, ), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ getPlatformImage(platform, size: 34.0), ], ), SizedBox( width: 8.0, ), // id/alias Expanded(child: Text(alias.isEmpty ? id : alias)), ], ), ), ); }, itemCount: peersList.length, itemExtent: 50.0, ), ), onSubmit: submit, ); }); }