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,
 | 
						|
    );
 | 
						|
  });
 | 
						|
}
 |