feat(example): clean up for android
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:nearby_service/nearby_service.dart';
|
||||
|
||||
class ConnectedDeviceView extends StatelessWidget {
|
||||
const ConnectedDeviceView({
|
||||
super.key,
|
||||
required this.device,
|
||||
required this.onDisconnect,
|
||||
});
|
||||
|
||||
final NearbyDevice device;
|
||||
final VoidCallback onDisconnect;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: const BoxDecoration(color: Colors.blueAccent),
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
device.info.displayName,
|
||||
style: const TextStyle(color: Colors.white),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed:onDisconnect,
|
||||
child: const Text('Disconnect'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:nearby_service/nearby_service.dart';
|
||||
|
||||
class FilesMessagingView extends StatefulWidget {
|
||||
const FilesMessagingView({super.key, required this.onSend});
|
||||
|
||||
final ValueChanged<List<NearbyFileInfo>> onSend;
|
||||
|
||||
@override
|
||||
State<FilesMessagingView> createState() => _FilesMessagingViewState();
|
||||
}
|
||||
|
||||
class _FilesMessagingViewState extends State<FilesMessagingView> {
|
||||
List<PlatformFile> _pickedFiles = [];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
final result = await FilePicker.platform.pickFiles(
|
||||
allowMultiple: true,
|
||||
);
|
||||
if (result != null) {
|
||||
setState(() => _pickedFiles = result.files);
|
||||
}
|
||||
},
|
||||
child: const Text('Pick the files'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () => widget.onSend(
|
||||
_pickedFiles.map((e) => NearbyFileInfo(path: e.path!)).toList(),
|
||||
),
|
||||
child: const Text('Send files'),
|
||||
),
|
||||
const Text('Picked files:', style: TextStyle(fontSize: 16)),
|
||||
..._pickedFiles.map((e) => Text(e.name)),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class IOSRoleSelector extends StatelessWidget {
|
||||
const IOSRoleSelector({
|
||||
super.key,
|
||||
required this.isIosBrowser,
|
||||
required this.onSelect,
|
||||
});
|
||||
|
||||
final bool isIosBrowser;
|
||||
final ValueChanged<bool> onSelect;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Center(
|
||||
child: Text(
|
||||
'You are ${isIosBrowser ? 'Browser' : 'Advertiser'}',
|
||||
),
|
||||
),
|
||||
Switch(
|
||||
value: isIosBrowser,
|
||||
onChanged: onSelect,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:nearby_service/nearby_service.dart';
|
||||
|
||||
class PeerWidget extends StatelessWidget {
|
||||
const PeerWidget({
|
||||
super.key,
|
||||
required this.device,
|
||||
required this.isIosBrowser,
|
||||
required this.onConnect,
|
||||
});
|
||||
|
||||
final NearbyDevice device;
|
||||
final bool isIosBrowser;
|
||||
final ValueChanged<NearbyDevice> onConnect;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final status =
|
||||
device.status.isConnected ? 'Tap to chat' : device.status.name;
|
||||
return ListTile(
|
||||
title: Text(
|
||||
'${isIosBrowser ? 'Found device' : 'Pending invitation'} | ${device.info.displayName} | $status',
|
||||
),
|
||||
onTap: () => onConnect(device),
|
||||
tileColor: Colors.blueAccent,
|
||||
textColor: Colors.white,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class TextMessagingView extends StatefulWidget {
|
||||
const TextMessagingView({super.key, required this.onSend});
|
||||
|
||||
final ValueChanged<String> onSend;
|
||||
|
||||
@override
|
||||
State<TextMessagingView> createState() => _TextMessagingViewState();
|
||||
}
|
||||
|
||||
class _TextMessagingViewState extends State<TextMessagingView> {
|
||||
String _message = '';
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
TextField(
|
||||
onChanged: (value) => setState(() => _message = value),
|
||||
decoration: const InputDecoration(
|
||||
hintText: 'Enter your message',
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
ElevatedButton(
|
||||
onPressed: () => widget.onSend(_message),
|
||||
child: const Text('Send message'),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user