feat(example): clean up for android

This commit is contained in:
ksenia312
2024-02-08 12:44:04 +01:00
parent b6989a2226
commit 31ebe78ce7
8 changed files with 351 additions and 215 deletions
@@ -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,
),
],
);
}
}
+29
View File
@@ -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'),
),
],
);
}
}