mirror of
				https://github.com/hackku21/nearby_connections.git
				synced 2025-06-13 12:53:50 +00:00 
			
		
		
		
	working auto connect
This commit is contained in:
		
							parent
							
								
									c21fa52248
								
							
						
					
					
						commit
						e19633f846
					
				| @ -2,6 +2,8 @@ import 'dart:io'; | ||||
| import 'dart:math'; | ||||
| import 'dart:typed_data'; | ||||
| 
 | ||||
| import 'package:flutter_udid/flutter_udid.dart'; | ||||
| 
 | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:image_picker/image_picker.dart'; | ||||
| import 'package:nearby_connections/nearby_connections.dart'; | ||||
| @ -33,118 +35,34 @@ class Body extends StatefulWidget { | ||||
| } | ||||
| 
 | ||||
| class _MyBodyState extends State<Body> { | ||||
|   final String userName = Random().nextInt(10000).toString(); | ||||
|   @override | ||||
|   void initState() { | ||||
|     super.initState(); | ||||
|     WidgetsBinding.instance!.addPostFrameCallback((_) { | ||||
|       // _userName = await FlutterUdid.consistentUdid; | ||||
|       startAdver(); | ||||
|       startDisco(); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   final String userName = | ||||
|       "00000 11111 22222 33333 44444 55555 66666 77777 88888 99999 aaaaa bbbbb ccccc ddddd eeeee"; // Random().nextInt(10000).toString(); | ||||
|   final Strategy strategy = Strategy.P2P_STAR; | ||||
|   Map<String, ConnectionInfo> endpointMap = Map(); | ||||
| 
 | ||||
|   static String _userName = ""; | ||||
|   File? tempFile; //reference to the file currently being transferred | ||||
|   Map<int, String> map = | ||||
|       Map(); //store filename mapped to corresponding payloadId | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return Center( | ||||
|       child: Padding( | ||||
|         padding: const EdgeInsets.all(8.0), | ||||
|         child: ListView( | ||||
|           children: <Widget>[ | ||||
|             Text( | ||||
|               "Permissions", | ||||
|             ), | ||||
|             Wrap( | ||||
|               children: <Widget>[ | ||||
|                 ElevatedButton( | ||||
|                   child: Text("checkLocationPermission"), | ||||
|                   onPressed: () async { | ||||
|                     if (await Nearby().checkLocationPermission()) { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar(SnackBar( | ||||
|                           content: Text("Location permissions granted :)"))); | ||||
|                     } else { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar(SnackBar( | ||||
|                           content: | ||||
|                               Text("Location permissions not granted :("))); | ||||
|                     } | ||||
|                   }, | ||||
|                 ), | ||||
|                 ElevatedButton( | ||||
|                   child: Text("askLocationPermission"), | ||||
|                   onPressed: () async { | ||||
|                     if (await Nearby().askLocationPermission()) { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar(SnackBar( | ||||
|                           content: Text("Location Permission granted :)"))); | ||||
|                     } else { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar(SnackBar( | ||||
|                           content: | ||||
|                               Text("Location permissions not granted :("))); | ||||
|                     } | ||||
|                   }, | ||||
|                 ), | ||||
|                 ElevatedButton( | ||||
|                   child: Text("checkExternalStoragePermission"), | ||||
|                   onPressed: () async { | ||||
|                     if (await Nearby().checkExternalStoragePermission()) { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar(SnackBar( | ||||
|                           content: | ||||
|                               Text("External Storage permissions granted :)"))); | ||||
|                     } else { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar(SnackBar( | ||||
|                           content: Text( | ||||
|                               "External Storage permissions not granted :("))); | ||||
|                     } | ||||
|                   }, | ||||
|                 ), | ||||
|                 ElevatedButton( | ||||
|                   child: Text("askExternalStoragePermission"), | ||||
|                   onPressed: () { | ||||
|                     Nearby().askExternalStoragePermission(); | ||||
|                   }, | ||||
|                 ), | ||||
|               ], | ||||
|             ), | ||||
|             Divider(), | ||||
|             Text("Location Enabled"), | ||||
|             Wrap( | ||||
|               children: <Widget>[ | ||||
|                 ElevatedButton( | ||||
|                   child: Text("checkLocationEnabled"), | ||||
|                   onPressed: () async { | ||||
|                     if (await Nearby().checkLocationEnabled()) { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar( | ||||
|                           SnackBar(content: Text("Location is ON :)"))); | ||||
|                     } else { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar( | ||||
|                           SnackBar(content: Text("Location is OFF :("))); | ||||
|                     } | ||||
|                   }, | ||||
|                 ), | ||||
|                 ElevatedButton( | ||||
|                   child: Text("enableLocationServices"), | ||||
|                   onPressed: () async { | ||||
|                     if (await Nearby().enableLocationServices()) { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar(SnackBar( | ||||
|                           content: Text("Location Service Enabled :)"))); | ||||
|                     } else { | ||||
|                       ScaffoldMessenger.of(context).showSnackBar(SnackBar( | ||||
|                           content: | ||||
|                               Text("Enabling Location Service Failed :("))); | ||||
|                     } | ||||
|                   }, | ||||
|                 ), | ||||
|               ], | ||||
|             ), | ||||
|             Divider(), | ||||
|             Text("User Name: " + userName), | ||||
|             Wrap( | ||||
|               children: <Widget>[ | ||||
|                 ElevatedButton( | ||||
|                   child: Text("Start Advertising"), | ||||
|                   onPressed: () async { | ||||
|   void startAdver() async { | ||||
|     try { | ||||
|       bool a = await Nearby().startAdvertising( | ||||
|                         userName, | ||||
|         "adv" + userName, | ||||
|         strategy, | ||||
|                         onConnectionInitiated: onConnectionInit, | ||||
|         onConnectionInitiated: discoverOnConnectionInit, | ||||
|         onConnectionResult: (id, status) { | ||||
|           print("userName = $userName"); | ||||
|           print("id = $id"); | ||||
|           showSnackbar(status); | ||||
|         }, | ||||
|         onDisconnected: (id) { | ||||
| @ -159,6 +77,81 @@ class _MyBodyState extends State<Body> { | ||||
|     } catch (exception) { | ||||
|       showSnackbar(exception); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   void startDisco() async { | ||||
|     try { | ||||
|       bool a = await Nearby().startDiscovery( | ||||
|         "dis" + userName, | ||||
|         strategy, | ||||
|         onEndpointFound: (id, name, serviceId) { | ||||
|           print("userName = $userName"); | ||||
|           print("id = $id"); | ||||
| 
 | ||||
|           Nearby().requestConnection( | ||||
|             userName, | ||||
|             id, | ||||
|             onConnectionInitiated: (id, info) { | ||||
|               discoverOnConnectionInit(id, info); | ||||
|             }, | ||||
|             onConnectionResult: (id, status) { | ||||
|               showSnackbar(status); | ||||
|             }, | ||||
|             onDisconnected: (id) { | ||||
|               setState(() { | ||||
|                 endpointMap.remove(id); | ||||
|               }); | ||||
|               showSnackbar( | ||||
|                   "Disconnected from: ${endpointMap[id]!.endpointName}, id $id"); | ||||
|             }, | ||||
|           ); | ||||
|         }, | ||||
|         onEndpointLost: (id) { | ||||
|           showSnackbar( | ||||
|               "Lost discovered Endpoint: ${endpointMap[id]!.endpointName}, id $id"); | ||||
|         }, | ||||
|       ); | ||||
|       showSnackbar("DISCOVERING: " + a.toString()); | ||||
|     } catch (e) { | ||||
|       showSnackbar(e); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return Center( | ||||
|       child: Padding( | ||||
|         padding: const EdgeInsets.all(8.0), | ||||
|         child: ListView( | ||||
|           children: <Widget>[ | ||||
|             Text("User Name: " + userName), | ||||
|             Wrap( | ||||
|               children: <Widget>[ | ||||
|                 ElevatedButton( | ||||
|                   child: Text("Start Advertising"), | ||||
|                   onPressed: () async { | ||||
|                     // try { | ||||
|                     //   bool a = await Nearby().startAdvertising( | ||||
|                     //     "adv" + userName, | ||||
|                     //     strategy, | ||||
|                     //     onConnectionInitiated: discoverOnConnectionInit, | ||||
|                     //     onConnectionResult: (id, status) { | ||||
|                     //       print("userName = $userName"); | ||||
|                     //       print("id = $id"); | ||||
|                     //       showSnackbar(status); | ||||
|                     //     }, | ||||
|                     //     onDisconnected: (id) { | ||||
|                     //       showSnackbar( | ||||
|                     //           "Disconnected: ${endpointMap[id]!.endpointName}, id $id"); | ||||
|                     //       setState(() { | ||||
|                     //         endpointMap.remove(id); | ||||
|                     //       }); | ||||
|                     //     }, | ||||
|                     //   ); | ||||
|                     //   showSnackbar("ADVERTISING: " + a.toString()); | ||||
|                     // } catch (exception) { | ||||
|                     //   showSnackbar(exception); | ||||
|                     // } | ||||
|                   }, | ||||
|                 ), | ||||
|                 ElevatedButton( | ||||
| @ -176,28 +169,17 @@ class _MyBodyState extends State<Body> { | ||||
|                   onPressed: () async { | ||||
|                     try { | ||||
|                       bool a = await Nearby().startDiscovery( | ||||
|                         userName, | ||||
|                         "dis" + userName, | ||||
|                         strategy, | ||||
|                         onEndpointFound: (id, name, serviceId) { | ||||
|                           // show sheet automatically to request connection | ||||
|                           showModalBottomSheet( | ||||
|                             context: context, | ||||
|                             builder: (builder) { | ||||
|                               return Center( | ||||
|                                 child: Column( | ||||
|                                   children: <Widget>[ | ||||
|                                     Text("id: " + id), | ||||
|                                     Text("Name: " + name), | ||||
|                                     Text("ServiceId: " + serviceId), | ||||
|                                     ElevatedButton( | ||||
|                                       child: Text("Request Connection"), | ||||
|                                       onPressed: () { | ||||
|                                         Navigator.pop(context); | ||||
|                           print("userName = $userName"); | ||||
|                           print("id = $id"); | ||||
| 
 | ||||
|                           Nearby().requestConnection( | ||||
|                             userName, | ||||
|                             id, | ||||
|                             onConnectionInitiated: (id, info) { | ||||
|                                             onConnectionInit(id, info); | ||||
|                               discoverOnConnectionInit(id, info); | ||||
|                             }, | ||||
|                             onConnectionResult: (id, status) { | ||||
|                               showSnackbar(status); | ||||
| @ -211,13 +193,6 @@ class _MyBodyState extends State<Body> { | ||||
|                             }, | ||||
|                           ); | ||||
|                         }, | ||||
|                                     ), | ||||
|                                   ], | ||||
|                                 ), | ||||
|                               ); | ||||
|                             }, | ||||
|                           ); | ||||
|                         }, | ||||
|                         onEndpointLost: (id) { | ||||
|                           showSnackbar( | ||||
|                               "Lost discovered Endpoint: ${endpointMap[id]!.endpointName}, id $id"); | ||||
| @ -255,7 +230,8 @@ class _MyBodyState extends State<Body> { | ||||
|               child: Text("Send Random Bytes Payload"), | ||||
|               onPressed: () async { | ||||
|                 endpointMap.forEach((key, value) { | ||||
|                   String a = Random().nextInt(100).toString(); | ||||
|                   String a = | ||||
|                       "00000 11111 22222 33333 44444 55555 66666 77777 88888 99999 aaaaa bbbbb ccccc ddddd eeeee"; //Random().nextInt(100).toString(); | ||||
| 
 | ||||
|                   showSnackbar("Sending $a to ${value.endpointName}, id: $key"); | ||||
|                   Nearby() | ||||
| @ -297,27 +273,14 @@ class _MyBodyState extends State<Body> { | ||||
| 
 | ||||
|   /// Called upon Connection request (on both devices) | ||||
|   /// Both need to accept connection to start sending/receiving | ||||
|   void onConnectionInit(String id, ConnectionInfo info) { | ||||
|     showModalBottomSheet( | ||||
|       context: context, | ||||
|       builder: (builder) { | ||||
|         return Center( | ||||
|           child: Column( | ||||
|             children: <Widget>[ | ||||
|               Text("id: " + id), | ||||
|               Text("Token: " + info.authenticationToken), | ||||
|               Text("Name" + info.endpointName), | ||||
|               Text("Incoming: " + info.isIncomingConnection.toString()), | ||||
|               ElevatedButton( | ||||
|                 child: Text("Accept Connection"), | ||||
|                 onPressed: () { | ||||
|                   Navigator.pop(context); | ||||
|   void discoverOnConnectionInit(String id, ConnectionInfo info) { | ||||
|     setState(() { | ||||
|       endpointMap[id] = info; | ||||
|     }); | ||||
|     Nearby().acceptConnection( | ||||
|       id, | ||||
|       onPayLoadRecieved: (endid, payload) async { | ||||
|         print(payload); | ||||
|         if (payload.type == PayloadType.BYTES) { | ||||
|           String str = String.fromCharCodes(payload.bytes!); | ||||
|           showSnackbar(endid + ": " + str); | ||||
| @ -330,8 +293,7 @@ class _MyBodyState extends State<Body> { | ||||
| 
 | ||||
|             if (map.containsKey(payloadId)) { | ||||
|               if (await tempFile!.exists()) { | ||||
|                               tempFile!.rename( | ||||
|                                   tempFile!.parent.path + "/" + fileName); | ||||
|                 tempFile!.rename(tempFile!.parent.path + "/" + fileName); | ||||
|               } else { | ||||
|                 showSnackbar("File doesn't exist"); | ||||
|               } | ||||
| @ -346,15 +308,12 @@ class _MyBodyState extends State<Body> { | ||||
|         } | ||||
|       }, | ||||
|       onPayloadTransferUpdate: (endid, payloadTransferUpdate) { | ||||
|                       if (payloadTransferUpdate.status == | ||||
|                           PayloadStatus.IN_PROGRESS) { | ||||
|         if (payloadTransferUpdate.status == PayloadStatus.IN_PROGRESS) { | ||||
|           print(payloadTransferUpdate.bytesTransferred); | ||||
|                       } else if (payloadTransferUpdate.status == | ||||
|                           PayloadStatus.FAILURE) { | ||||
|         } else if (payloadTransferUpdate.status == PayloadStatus.FAILURE) { | ||||
|           print("failed"); | ||||
|           showSnackbar(endid + ": FAILED to transfer file"); | ||||
|                       } else if (payloadTransferUpdate.status == | ||||
|                           PayloadStatus.SUCCESS) { | ||||
|         } else if (payloadTransferUpdate.status == PayloadStatus.SUCCESS) { | ||||
|           showSnackbar( | ||||
|               "$endid success, total bytes = ${payloadTransferUpdate.totalBytes}"); | ||||
| 
 | ||||
| @ -369,23 +328,9 @@ class _MyBodyState extends State<Body> { | ||||
|         } | ||||
|       }, | ||||
|     ); | ||||
|                 }, | ||||
|               ), | ||||
|               ElevatedButton( | ||||
|                 child: Text("Reject Connection"), | ||||
|                 onPressed: () async { | ||||
|                   Navigator.pop(context); | ||||
|                   try { | ||||
|                     await Nearby().rejectConnection(id); | ||||
|                   } catch (e) { | ||||
|                     showSnackbar(e); | ||||
|                   } | ||||
|                 }, | ||||
|               ), | ||||
|             ], | ||||
|           ), | ||||
|         ); | ||||
|       }, | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   /// | ||||
|   /// | ||||
|   /// | ||||
| } | ||||
|  | ||||
| @ -43,6 +43,13 @@ packages: | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.15.0" | ||||
|   crypto: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: crypto | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "3.0.1" | ||||
|   fake_async: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @ -67,6 +74,13 @@ packages: | ||||
|     description: flutter | ||||
|     source: sdk | ||||
|     version: "0.0.0" | ||||
|   flutter_udid: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: flutter_udid | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "2.0.0" | ||||
|   flutter_web_plugins: | ||||
|     dependency: transitive | ||||
|     description: flutter | ||||
| @ -219,4 +233,4 @@ packages: | ||||
|     version: "2.1.0" | ||||
| sdks: | ||||
|   dart: ">=2.12.0 <3.0.0" | ||||
|   flutter: ">=1.20.0" | ||||
|   flutter: ">=2.0.0" | ||||
|  | ||||
| @ -12,6 +12,8 @@ dependencies: | ||||
|   flutter: | ||||
|     sdk: flutter | ||||
|   image_picker: ^0.7.4 | ||||
|   flutter_udid: ^2.0.0 | ||||
| 
 | ||||
|   nearby_connections: | ||||
|     # When depending on this package from a real application you should use: | ||||
|     #   nearby_connections: ^x.y.z | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user