84 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'dart:convert';
 | |
| 
 | |
| import 'package:flutter/foundation.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter_hbb/common.dart';
 | |
| import 'package:flutter_hbb/models/platform_model.dart';
 | |
| import 'package:get/get.dart';
 | |
| 
 | |
| void showPeerSelectionDialog(
 | |
|     {bool singleSelection = false,
 | |
|     required Function(List<String>) onPeersCallback}) {
 | |
|   final peers = bind.mainLoadRecentPeersSync();
 | |
|   if (peers.isEmpty) {
 | |
|     debugPrint("load recent peers sync failed.");
 | |
|     return;
 | |
|   }
 | |
|   Map<String, dynamic> map = jsonDecode(peers);
 | |
|   List<dynamic> peersList = map['peers'] ?? [];
 | |
|   final selected = List<String>.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<String, dynamic> 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,
 | |
|     );
 | |
|   });
 | |
| }
 |