refactir(gui): added flutter version with flutter_rust_bridge
This commit is contained in:
parent
f1e48f6d12
commit
fbb181d95b
200 changed files with 11018 additions and 84 deletions
124
flutter_test_gui/lib/main.dart
Normal file
124
flutter_test_gui/lib/main.dart
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test_gui/src/rust/frb_generated.dart';
|
||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||
import 'package:flutter_test_gui/pages/settings_screen.dart';
|
||||
import 'package:flutter_test_gui/pages/send_screen.dart';
|
||||
import 'package:flutter_test_gui/pages/receive_screen.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
await RustLib.init();
|
||||
runApp(const MyApp());
|
||||
if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
|
||||
doWhenWindowReady(() {
|
||||
final win = appWindow;
|
||||
const initialSize = Size(720, 512);
|
||||
win.minSize = initialSize;
|
||||
win.size = initialSize;
|
||||
win.alignment = Alignment.center;
|
||||
win.title = 'Caesar Test Demo';
|
||||
win.show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const backColor = Color(0xFF32363E);
|
||||
const highlightColor = Color(0xFF98C379);
|
||||
const textColor = Color(0xFFABB2BF);
|
||||
|
||||
class MyApp extends StatefulWidget {
|
||||
const MyApp({super.key});
|
||||
|
||||
@override
|
||||
State<MyApp> createState() => _MyAppState();
|
||||
}
|
||||
|
||||
class _MyAppState extends State<MyApp> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
title: 'Caesar-Transfer',
|
||||
theme: ThemeData(
|
||||
useMaterial3: true,
|
||||
),
|
||||
home: const MyHomePage(title: 'Caesar-Transfer'),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MyHomePage extends StatefulWidget {
|
||||
const MyHomePage({super.key, required this.title});
|
||||
|
||||
final String title;
|
||||
|
||||
@override
|
||||
State<MyHomePage> createState() => _MyHomePageState();
|
||||
}
|
||||
|
||||
class _MyHomePageState extends State<MyHomePage> {
|
||||
final List<Widget> _screens = [
|
||||
SendScreen(),
|
||||
ReceiveScreen(),
|
||||
];
|
||||
int _selectedIndex = 0;
|
||||
void _onItemTapped(int index) {
|
||||
setState(() {
|
||||
_selectedIndex = index;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
home: Scaffold(
|
||||
backgroundColor: backColor,
|
||||
appBar: AppBar(
|
||||
backgroundColor: const Color(0xFF282C34),
|
||||
centerTitle: true,
|
||||
title: Text(
|
||||
widget.title,
|
||||
style: TextStyle(color: textColor),
|
||||
),
|
||||
actions: [
|
||||
PopupMenuButton<String>(
|
||||
onSelected: (String result) {
|
||||
if (result == 'Settings') {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => SettingsScreen()),
|
||||
);
|
||||
}
|
||||
},
|
||||
itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
|
||||
const PopupMenuItem<String>(
|
||||
value: 'Settings',
|
||||
child: Text('Settings'),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
body: _screens[_selectedIndex],
|
||||
bottomNavigationBar: BottomNavigationBar(
|
||||
backgroundColor: const Color(0xFF282C34),
|
||||
items: const <BottomNavigationBarItem>[
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.send),
|
||||
label: 'Send',
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.download),
|
||||
label: 'Receive',
|
||||
),
|
||||
],
|
||||
currentIndex: _selectedIndex,
|
||||
selectedItemColor: highlightColor,
|
||||
unselectedItemColor: textColor,
|
||||
onTap: _onItemTapped,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
163
flutter_test_gui/lib/pages/receive_screen.dart
Normal file
163
flutter_test_gui/lib/pages/receive_screen.dart
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile_scanner/mobile_scanner.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:flutter_test_gui/src/rust/api/simple.dart';
|
||||
import 'package:flutter_test_gui/src/rust/frb_generated.dart';
|
||||
|
||||
const backColor = Color(0xFF32363E);
|
||||
const highlightColor = Color(0xFF98C379);
|
||||
const textColor = Color(0xFFABB2BF);
|
||||
|
||||
class ReceiveScreen extends StatefulWidget {
|
||||
@override
|
||||
_ReceiveScreenState createState() => _ReceiveScreenState();
|
||||
}
|
||||
|
||||
class _ReceiveScreenState extends State<ReceiveScreen> {
|
||||
String appOrigin = '';
|
||||
final myController = TextEditingController();
|
||||
String greetingText = '';
|
||||
bool _showScanner = false;
|
||||
|
||||
Widget _buildQRScanner() {
|
||||
if (Platform.isIOS || Platform.isAndroid) {
|
||||
return MobileScanner(
|
||||
controller: MobileScannerController(
|
||||
detectionSpeed: DetectionSpeed.noDuplicates),
|
||||
onDetect: (barcode) {
|
||||
if (barcode.raw == null) {
|
||||
debugPrint('Failed to scan qr code');
|
||||
} else {
|
||||
final String code = barcode.raw.toString();
|
||||
setState(() {
|
||||
greetingText = code;
|
||||
_showScanner = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
} else {
|
||||
_showScanner = false;
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> loadSettings() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
appOrigin = prefs.getString('app_origin') ??
|
||||
'wss://caesar-transfer-iu.shuttleapp.rs'; // Laden Sie die app_origin
|
||||
}
|
||||
|
||||
Future<void> _startTransfer(String appOrigin) async {
|
||||
final transferName = myController.text.trim();
|
||||
if (transferName.isNotEmpty) {
|
||||
try {
|
||||
final outcome = await startRustReceiver(
|
||||
transfername: transferName, relay: appOrigin);
|
||||
print('Receiver erfolgreich gestartet ');
|
||||
print('Ergebnis von Rust: $outcome');
|
||||
} catch (e) {
|
||||
print('Fehler beim Starten des Receivers: $e');
|
||||
}
|
||||
}
|
||||
print("Transfer startet with app_origin: $appOrigin");
|
||||
}
|
||||
// Future<void> _startTransfer(String appOrigin) async {
|
||||
// final transferName = myController.text.trim();
|
||||
// if (transferName.isNotEmpty) {
|
||||
// final outcome =
|
||||
// startRustReceiver(transfername: transferName, relay: appOrigin);
|
||||
// }
|
||||
// print("Transfer startet with app_origin: $appOrigin");
|
||||
// }
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: backColor,
|
||||
body: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
if (!_showScanner)
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
setState(() {
|
||||
_showScanner = true;
|
||||
});
|
||||
},
|
||||
child: Container(
|
||||
width: 200,
|
||||
height: 200,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: textColor,
|
||||
),
|
||||
child: const Center(
|
||||
child: Icon(
|
||||
Icons.qr_code,
|
||||
color: highlightColor,
|
||||
size: 100,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
if (_showScanner)
|
||||
Container(
|
||||
width: MediaQuery.of(context).size.width * 0.8,
|
||||
height: MediaQuery.of(context).size.height * 0.5,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
),
|
||||
child: _buildQRScanner(),
|
||||
),
|
||||
const SizedBox(height: 32),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width * 0.5,
|
||||
child: TextField(
|
||||
controller: myController,
|
||||
textAlign: TextAlign.center,
|
||||
style: const TextStyle(
|
||||
color: highlightColor,
|
||||
),
|
||||
decoration: const InputDecoration(
|
||||
labelText: 'Enter Transfername',
|
||||
labelStyle: TextStyle(color: Colors.white54),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(color: Colors.white),
|
||||
),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(color: Colors.white),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: textColor,
|
||||
foregroundColor: highlightColor,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
),
|
||||
onPressed: () {
|
||||
loadSettings().then((_) => _startTransfer(appOrigin));
|
||||
},
|
||||
child: const Text('Receive'),
|
||||
),
|
||||
Text(
|
||||
greetingText,
|
||||
style: const TextStyle(color: Colors.white),
|
||||
),
|
||||
],
|
||||
)),
|
||||
);
|
||||
}
|
||||
}
|
||||
133
flutter_test_gui/lib/pages/send_screen.dart
Normal file
133
flutter_test_gui/lib/pages/send_screen.dart
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:desktop_drop/desktop_drop.dart';
|
||||
import 'package:cross_file/cross_file.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter_test_gui/pages/waiting_screen.dart';
|
||||
import 'package:flutter_test_gui/src/rust/api/simple.dart';
|
||||
import 'package:flutter_test_gui/src/rust/frb_generated.dart';
|
||||
|
||||
const backColor = Color(0xFF32363E);
|
||||
const highlightColor = Color(0xFF98C379);
|
||||
const textColor = Color(0xFFABB2BF);
|
||||
|
||||
class SendScreen extends StatefulWidget {
|
||||
@override
|
||||
_SendScreenState createState() => _SendScreenState();
|
||||
}
|
||||
|
||||
class _SendScreenState extends State<SendScreen> {
|
||||
final List<XFile> _list = [];
|
||||
String transferName = '';
|
||||
bool _dragging = false;
|
||||
Future<void> openFilePicker() async {
|
||||
FilePickerResult? result = await FilePicker.platform.pickFiles(
|
||||
allowMultiple: true, // Erlaube die Auswahl mehrerer Dateien
|
||||
);
|
||||
|
||||
if (result != null) {
|
||||
_list.addAll(result.xFiles);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _startTransfer() async {
|
||||
final randomName = generateRandomName(); // Rust-Funktion aufrufen
|
||||
print('Zusammengefügter Text: $randomName');
|
||||
setState(() {
|
||||
transferName = randomName;
|
||||
});
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) =>
|
||||
WaitingScreen(transferName: transferName, files: _list)));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: backColor,
|
||||
body: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Center(
|
||||
child: Stack(
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: openFilePicker,
|
||||
child: DropTarget(
|
||||
onDragDone: (detail) {
|
||||
setState(() {
|
||||
_list.addAll(detail.files);
|
||||
});
|
||||
},
|
||||
onDragEntered: (detail) {
|
||||
setState(() {
|
||||
_dragging = true;
|
||||
});
|
||||
},
|
||||
onDragExited: (detail) {
|
||||
setState(() {
|
||||
_dragging = false;
|
||||
});
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
height: 200,
|
||||
width: 200,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: _dragging
|
||||
? Colors.blue.withOpacity(0.4)
|
||||
: textColor),
|
||||
child: _list.isEmpty
|
||||
? const Center(
|
||||
child: Icon(
|
||||
Icons.add_circle_outlined,
|
||||
color: highlightColor,
|
||||
size: 200,
|
||||
),
|
||||
)
|
||||
: Text(_list.join("\n")),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
if (_list.isNotEmpty)
|
||||
SizedBox(
|
||||
height: 100,
|
||||
child: ListView.builder(
|
||||
itemCount: _list.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Text(
|
||||
_list[index].name,
|
||||
style: const TextStyle(color: Colors.white),
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: textColor,
|
||||
foregroundColor: highlightColor,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
),
|
||||
onPressed: () {
|
||||
_startTransfer();
|
||||
},
|
||||
child: const Text("Send"),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
102
flutter_test_gui/lib/pages/settings_screen.dart
Normal file
102
flutter_test_gui/lib/pages/settings_screen.dart
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class SettingsScreen extends StatefulWidget {
|
||||
@override
|
||||
_SettingsScreenState createState() => _SettingsScreenState();
|
||||
}
|
||||
|
||||
class _SettingsScreenState extends State<SettingsScreen> {
|
||||
final TextEditingController _appEnvironmentController =
|
||||
TextEditingController();
|
||||
final TextEditingController _appHostController = TextEditingController();
|
||||
final TextEditingController _appPortController = TextEditingController();
|
||||
final TextEditingController _appOriginController = TextEditingController();
|
||||
final TextEditingController _appRelayController = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
loadSettings();
|
||||
}
|
||||
|
||||
Future<void> loadSettings() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
String appEnvironment = prefs.getString('app_environment') ?? '';
|
||||
String appHost = prefs.getString('app_host') ?? '';
|
||||
String appPort = prefs.getString('app_port') ?? '';
|
||||
String appOrigin = prefs.getString('app_origin') ?? '';
|
||||
String appRelay = prefs.getString('app_relay') ?? '';
|
||||
|
||||
// Setzen Sie die Controller-Texte nach dem Laden der Einstellungen
|
||||
setState(() {
|
||||
_appEnvironmentController.text = appEnvironment;
|
||||
_appHostController.text = appHost;
|
||||
_appPortController.text = appPort;
|
||||
_appOriginController.text = appOrigin;
|
||||
_appRelayController.text = appRelay;
|
||||
});
|
||||
}
|
||||
// Future<void> loadSettings() async {
|
||||
// SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
// setState(() {
|
||||
// _appEnvironmentController.text = prefs.getString('app_environment') ?? '';
|
||||
// _appHostController.text = prefs.getString('app_host') ?? '';
|
||||
// _appPortController.text = prefs.getString('app_port') ?? '';
|
||||
// _appOriginController.text = prefs.getString('app_origin') ?? '';
|
||||
// _appRelayController.text = prefs.getString('app_relay') ?? '';
|
||||
// });
|
||||
// }
|
||||
|
||||
Future<void> saveSettings() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString('app_environment', _appEnvironmentController.text);
|
||||
await prefs.setString('app_host', _appHostController.text);
|
||||
await prefs.setString('app_port', _appPortController.text);
|
||||
await prefs.setString('app_origin', _appOriginController.text);
|
||||
await prefs.setString('app_relay', _appRelayController.text);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Settings'),
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
TextField(
|
||||
controller: _appEnvironmentController,
|
||||
decoration: InputDecoration(labelText: 'App Environment'),
|
||||
),
|
||||
TextField(
|
||||
controller: _appHostController,
|
||||
decoration: InputDecoration(labelText: 'App Host'),
|
||||
),
|
||||
TextField(
|
||||
controller: _appPortController,
|
||||
decoration: InputDecoration(labelText: 'App Port'),
|
||||
),
|
||||
TextField(
|
||||
controller: _appOriginController,
|
||||
decoration: InputDecoration(labelText: 'App Origin'),
|
||||
),
|
||||
TextField(
|
||||
controller: _appRelayController,
|
||||
decoration: InputDecoration(labelText: 'App Relay'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
await saveSettings();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Text('Save'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
0
flutter_test_gui/lib/pages/succes_screen.dart
Normal file
0
flutter_test_gui/lib/pages/succes_screen.dart
Normal file
0
flutter_test_gui/lib/pages/transfer_screen.dart
Normal file
0
flutter_test_gui/lib/pages/transfer_screen.dart
Normal file
75
flutter_test_gui/lib/pages/waiting_screen.dart
Normal file
75
flutter_test_gui/lib/pages/waiting_screen.dart
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test_gui/pages/send_screen.dart';
|
||||
import 'package:qr_flutter/qr_flutter.dart';
|
||||
import 'package:cross_file/cross_file.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:flutter_test_gui/src/rust/api/simple.dart';
|
||||
import 'package:flutter_test_gui/src/rust/frb_generated.dart';
|
||||
|
||||
const backColor = Color(0xFF32363E);
|
||||
const highlightColor = Color(0xFF98C379);
|
||||
const textColor = Color(0xFFABB2BF);
|
||||
|
||||
class WaitingScreen extends StatefulWidget {
|
||||
final List<XFile> files;
|
||||
final String transferName;
|
||||
|
||||
const WaitingScreen(
|
||||
{Key? key, required this.transferName, required this.files})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
_WaitingScreenState createState() => _WaitingScreenState();
|
||||
}
|
||||
|
||||
class _WaitingScreenState extends State<WaitingScreen> {
|
||||
String appOrigin = '';
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
loadSettings().then((_) => callStartSender(appOrigin));
|
||||
}
|
||||
|
||||
Future<void> loadSettings() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
appOrigin = prefs.getString('app_origin') ??
|
||||
'wss://caesar-transfer-iu.shuttleapp.rs'; // Laden Sie die app_origin
|
||||
}
|
||||
|
||||
Future<void> callStartSender(String appOrigin) async {
|
||||
_startTransfer(appOrigin);
|
||||
}
|
||||
|
||||
Future<void> _startTransfer(String appOrigin) async {
|
||||
List<String> fileNames = widget.files.map((file) => file.path).toList();
|
||||
final outcome = await startRustSender(
|
||||
name: widget.transferName, relay: appOrigin, files: fileNames);
|
||||
Navigator.push(
|
||||
context, MaterialPageRoute(builder: (context) => SendScreen()));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: backColor,
|
||||
body: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
widget.transferName,
|
||||
style: const TextStyle(color: Colors.white, fontSize: 24),
|
||||
),
|
||||
const SizedBox(height: 32),
|
||||
QrImageView(
|
||||
data: widget.transferName,
|
||||
version: QrVersions.auto,
|
||||
size: 200,
|
||||
foregroundColor: highlightColor,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
23
flutter_test_gui/lib/src/rust/api/simple.dart
Normal file
23
flutter_test_gui/lib/src/rust/api/simple.dart
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.33.
|
||||
|
||||
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
|
||||
|
||||
import '../frb_generated.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
|
||||
|
||||
String generateRandomName({dynamic hint}) =>
|
||||
RustLib.instance.api.generateRandomName(hint: hint);
|
||||
|
||||
Future<void> startRustSender(
|
||||
{required String name,
|
||||
required String relay,
|
||||
required List<String> files,
|
||||
dynamic hint}) =>
|
||||
RustLib.instance.api
|
||||
.startRustSender(name: name, relay: relay, files: files, hint: hint);
|
||||
|
||||
Future<String> startRustReceiver(
|
||||
{required String relay, required String transfername, dynamic hint}) =>
|
||||
RustLib.instance.api.startRustReceiver(
|
||||
relay: relay, transfername: transfername, hint: hint);
|
||||
341
flutter_test_gui/lib/src/rust/frb_generated.dart
Normal file
341
flutter_test_gui/lib/src/rust/frb_generated.dart
Normal file
|
|
@ -0,0 +1,341 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.33.
|
||||
|
||||
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
|
||||
|
||||
import 'api/simple.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'frb_generated.io.dart' if (dart.library.html) 'frb_generated.web.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
|
||||
|
||||
/// Main entrypoint of the Rust API
|
||||
class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
|
||||
@internal
|
||||
static final instance = RustLib._();
|
||||
|
||||
RustLib._();
|
||||
|
||||
/// Initialize flutter_rust_bridge
|
||||
static Future<void> init({
|
||||
RustLibApi? api,
|
||||
BaseHandler? handler,
|
||||
ExternalLibrary? externalLibrary,
|
||||
}) async {
|
||||
await instance.initImpl(
|
||||
api: api,
|
||||
handler: handler,
|
||||
externalLibrary: externalLibrary,
|
||||
);
|
||||
}
|
||||
|
||||
/// Dispose flutter_rust_bridge
|
||||
///
|
||||
/// The call to this function is optional, since flutter_rust_bridge (and everything else)
|
||||
/// is automatically disposed when the app stops.
|
||||
static void dispose() => instance.disposeImpl();
|
||||
|
||||
@override
|
||||
ApiImplConstructor<RustLibApiImpl, RustLibWire> get apiImplConstructor =>
|
||||
RustLibApiImpl.new;
|
||||
|
||||
@override
|
||||
WireConstructor<RustLibWire> get wireConstructor =>
|
||||
RustLibWire.fromExternalLibrary;
|
||||
|
||||
@override
|
||||
Future<void> executeRustInitializers() async {
|
||||
await api.initApp();
|
||||
}
|
||||
|
||||
@override
|
||||
ExternalLibraryLoaderConfig get defaultExternalLibraryLoaderConfig =>
|
||||
kDefaultExternalLibraryLoaderConfig;
|
||||
|
||||
@override
|
||||
String get codegenVersion => '2.0.0-dev.33';
|
||||
|
||||
@override
|
||||
int get rustContentHash => 2067418172;
|
||||
|
||||
static const kDefaultExternalLibraryLoaderConfig =
|
||||
ExternalLibraryLoaderConfig(
|
||||
stem: 'rust_lib_flutter_test_gui',
|
||||
ioDirectory: '../flutter_test_lib/target/release/',
|
||||
webPrefix: 'pkg/',
|
||||
);
|
||||
}
|
||||
|
||||
abstract class RustLibApi extends BaseApi {
|
||||
String generateRandomName({dynamic hint});
|
||||
|
||||
Future<void> initApp({dynamic hint});
|
||||
|
||||
Future<String> startRustReceiver(
|
||||
{required String relay, required String transfername, dynamic hint});
|
||||
|
||||
Future<void> startRustSender(
|
||||
{required String name,
|
||||
required String relay,
|
||||
required List<String> files,
|
||||
dynamic hint});
|
||||
}
|
||||
|
||||
class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
|
||||
RustLibApiImpl({
|
||||
required super.handler,
|
||||
required super.wire,
|
||||
required super.generalizedFrbRustBinding,
|
||||
required super.portManager,
|
||||
});
|
||||
|
||||
@override
|
||||
String generateRandomName({dynamic hint}) {
|
||||
return handler.executeSync(SyncTask(
|
||||
callFfi: () {
|
||||
final serializer = SseSerializer(generalizedFrbRustBinding);
|
||||
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2)!;
|
||||
},
|
||||
codec: SseCodec(
|
||||
decodeSuccessData: sse_decode_String,
|
||||
decodeErrorData: null,
|
||||
),
|
||||
constMeta: kGenerateRandomNameConstMeta,
|
||||
argValues: [],
|
||||
apiImpl: this,
|
||||
hint: hint,
|
||||
));
|
||||
}
|
||||
|
||||
TaskConstMeta get kGenerateRandomNameConstMeta => const TaskConstMeta(
|
||||
debugName: "generate_random_name",
|
||||
argNames: [],
|
||||
);
|
||||
|
||||
@override
|
||||
Future<void> initApp({dynamic hint}) {
|
||||
return handler.executeNormal(NormalTask(
|
||||
callFfi: (port_) {
|
||||
final serializer = SseSerializer(generalizedFrbRustBinding);
|
||||
pdeCallFfi(generalizedFrbRustBinding, serializer,
|
||||
funcId: 1, port: port_);
|
||||
},
|
||||
codec: SseCodec(
|
||||
decodeSuccessData: sse_decode_unit,
|
||||
decodeErrorData: null,
|
||||
),
|
||||
constMeta: kInitAppConstMeta,
|
||||
argValues: [],
|
||||
apiImpl: this,
|
||||
hint: hint,
|
||||
));
|
||||
}
|
||||
|
||||
TaskConstMeta get kInitAppConstMeta => const TaskConstMeta(
|
||||
debugName: "init_app",
|
||||
argNames: [],
|
||||
);
|
||||
|
||||
@override
|
||||
Future<String> startRustReceiver(
|
||||
{required String relay, required String transfername, dynamic hint}) {
|
||||
return handler.executeNormal(NormalTask(
|
||||
callFfi: (port_) {
|
||||
final serializer = SseSerializer(generalizedFrbRustBinding);
|
||||
sse_encode_String(relay, serializer);
|
||||
sse_encode_String(transfername, serializer);
|
||||
pdeCallFfi(generalizedFrbRustBinding, serializer,
|
||||
funcId: 4, port: port_);
|
||||
},
|
||||
codec: SseCodec(
|
||||
decodeSuccessData: sse_decode_String,
|
||||
decodeErrorData: sse_decode_AnyhowException,
|
||||
),
|
||||
constMeta: kStartRustReceiverConstMeta,
|
||||
argValues: [relay, transfername],
|
||||
apiImpl: this,
|
||||
hint: hint,
|
||||
));
|
||||
}
|
||||
|
||||
TaskConstMeta get kStartRustReceiverConstMeta => const TaskConstMeta(
|
||||
debugName: "start_rust_receiver",
|
||||
argNames: ["relay", "transfername"],
|
||||
);
|
||||
|
||||
@override
|
||||
Future<void> startRustSender(
|
||||
{required String name,
|
||||
required String relay,
|
||||
required List<String> files,
|
||||
dynamic hint}) {
|
||||
return handler.executeNormal(NormalTask(
|
||||
callFfi: (port_) {
|
||||
final serializer = SseSerializer(generalizedFrbRustBinding);
|
||||
sse_encode_String(name, serializer);
|
||||
sse_encode_String(relay, serializer);
|
||||
sse_encode_list_String(files, serializer);
|
||||
pdeCallFfi(generalizedFrbRustBinding, serializer,
|
||||
funcId: 3, port: port_);
|
||||
},
|
||||
codec: SseCodec(
|
||||
decodeSuccessData: sse_decode_unit,
|
||||
decodeErrorData: sse_decode_AnyhowException,
|
||||
),
|
||||
constMeta: kStartRustSenderConstMeta,
|
||||
argValues: [name, relay, files],
|
||||
apiImpl: this,
|
||||
hint: hint,
|
||||
));
|
||||
}
|
||||
|
||||
TaskConstMeta get kStartRustSenderConstMeta => const TaskConstMeta(
|
||||
debugName: "start_rust_sender",
|
||||
argNames: ["name", "relay", "files"],
|
||||
);
|
||||
|
||||
@protected
|
||||
AnyhowException dco_decode_AnyhowException(dynamic raw) {
|
||||
// Codec=Dco (DartCObject based), see doc to use other codecs
|
||||
return AnyhowException(raw as String);
|
||||
}
|
||||
|
||||
@protected
|
||||
String dco_decode_String(dynamic raw) {
|
||||
// Codec=Dco (DartCObject based), see doc to use other codecs
|
||||
return raw as String;
|
||||
}
|
||||
|
||||
@protected
|
||||
List<String> dco_decode_list_String(dynamic raw) {
|
||||
// Codec=Dco (DartCObject based), see doc to use other codecs
|
||||
return (raw as List<dynamic>).map(dco_decode_String).toList();
|
||||
}
|
||||
|
||||
@protected
|
||||
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw) {
|
||||
// Codec=Dco (DartCObject based), see doc to use other codecs
|
||||
return raw as Uint8List;
|
||||
}
|
||||
|
||||
@protected
|
||||
int dco_decode_u_8(dynamic raw) {
|
||||
// Codec=Dco (DartCObject based), see doc to use other codecs
|
||||
return raw as int;
|
||||
}
|
||||
|
||||
@protected
|
||||
void dco_decode_unit(dynamic raw) {
|
||||
// Codec=Dco (DartCObject based), see doc to use other codecs
|
||||
return;
|
||||
}
|
||||
|
||||
@protected
|
||||
AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
var inner = sse_decode_String(deserializer);
|
||||
return AnyhowException(inner);
|
||||
}
|
||||
|
||||
@protected
|
||||
String sse_decode_String(SseDeserializer deserializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
var inner = sse_decode_list_prim_u_8_strict(deserializer);
|
||||
return utf8.decoder.convert(inner);
|
||||
}
|
||||
|
||||
@protected
|
||||
List<String> sse_decode_list_String(SseDeserializer deserializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
|
||||
var len_ = sse_decode_i_32(deserializer);
|
||||
var ans_ = <String>[];
|
||||
for (var idx_ = 0; idx_ < len_; ++idx_) {
|
||||
ans_.add(sse_decode_String(deserializer));
|
||||
}
|
||||
return ans_;
|
||||
}
|
||||
|
||||
@protected
|
||||
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
var len_ = sse_decode_i_32(deserializer);
|
||||
return deserializer.buffer.getUint8List(len_);
|
||||
}
|
||||
|
||||
@protected
|
||||
int sse_decode_u_8(SseDeserializer deserializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
return deserializer.buffer.getUint8();
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_decode_unit(SseDeserializer deserializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
}
|
||||
|
||||
@protected
|
||||
int sse_decode_i_32(SseDeserializer deserializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
return deserializer.buffer.getInt32();
|
||||
}
|
||||
|
||||
@protected
|
||||
bool sse_decode_bool(SseDeserializer deserializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
return deserializer.buffer.getUint8() != 0;
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_encode_AnyhowException(
|
||||
AnyhowException self, SseSerializer serializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
throw UnimplementedError('Unreachable ()');
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_encode_String(String self, SseSerializer serializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer);
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_encode_list_String(List<String> self, SseSerializer serializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
sse_encode_i_32(self.length, serializer);
|
||||
for (final item in self) {
|
||||
sse_encode_String(item, serializer);
|
||||
}
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_encode_list_prim_u_8_strict(
|
||||
Uint8List self, SseSerializer serializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
sse_encode_i_32(self.length, serializer);
|
||||
serializer.buffer.putUint8List(self);
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_encode_u_8(int self, SseSerializer serializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
serializer.buffer.putUint8(self);
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_encode_unit(void self, SseSerializer serializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_encode_i_32(int self, SseSerializer serializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
serializer.buffer.putInt32(self);
|
||||
}
|
||||
|
||||
@protected
|
||||
void sse_encode_bool(bool self, SseSerializer serializer) {
|
||||
// Codec=Sse (Serialization based), see doc to use other codecs
|
||||
serializer.buffer.putUint8(self ? 1 : 0);
|
||||
}
|
||||
}
|
||||
103
flutter_test_gui/lib/src/rust/frb_generated.io.dart
Normal file
103
flutter_test_gui/lib/src/rust/frb_generated.io.dart
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.33.
|
||||
|
||||
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
|
||||
|
||||
import 'api/simple.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:ffi' as ffi;
|
||||
import 'frb_generated.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart';
|
||||
|
||||
abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
|
||||
RustLibApiImplPlatform({
|
||||
required super.handler,
|
||||
required super.wire,
|
||||
required super.generalizedFrbRustBinding,
|
||||
required super.portManager,
|
||||
});
|
||||
|
||||
@protected
|
||||
AnyhowException dco_decode_AnyhowException(dynamic raw);
|
||||
|
||||
@protected
|
||||
String dco_decode_String(dynamic raw);
|
||||
|
||||
@protected
|
||||
List<String> dco_decode_list_String(dynamic raw);
|
||||
|
||||
@protected
|
||||
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
|
||||
|
||||
@protected
|
||||
int dco_decode_u_8(dynamic raw);
|
||||
|
||||
@protected
|
||||
void dco_decode_unit(dynamic raw);
|
||||
|
||||
@protected
|
||||
AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
String sse_decode_String(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
List<String> sse_decode_list_String(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
int sse_decode_u_8(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
void sse_decode_unit(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
int sse_decode_i_32(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
bool sse_decode_bool(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_AnyhowException(
|
||||
AnyhowException self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_String(String self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_list_String(List<String> self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_list_prim_u_8_strict(
|
||||
Uint8List self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_u_8(int self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_unit(void self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_i_32(int self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_bool(bool self, SseSerializer serializer);
|
||||
}
|
||||
|
||||
// Section: wire_class
|
||||
|
||||
class RustLibWire implements BaseWire {
|
||||
factory RustLibWire.fromExternalLibrary(ExternalLibrary lib) =>
|
||||
RustLibWire(lib.ffiDynamicLibrary);
|
||||
|
||||
/// Holds the symbol lookup function.
|
||||
final ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
|
||||
_lookup;
|
||||
|
||||
/// The symbols are looked up in [dynamicLibrary].
|
||||
RustLibWire(ffi.DynamicLibrary dynamicLibrary)
|
||||
: _lookup = dynamicLibrary.lookup;
|
||||
}
|
||||
106
flutter_test_gui/lib/src/rust/frb_generated.web.dart
Normal file
106
flutter_test_gui/lib/src/rust/frb_generated.web.dart
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.33.
|
||||
|
||||
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
|
||||
|
||||
import 'api/simple.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'frb_generated.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart';
|
||||
|
||||
abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
|
||||
RustLibApiImplPlatform({
|
||||
required super.handler,
|
||||
required super.wire,
|
||||
required super.generalizedFrbRustBinding,
|
||||
required super.portManager,
|
||||
});
|
||||
|
||||
@protected
|
||||
AnyhowException dco_decode_AnyhowException(dynamic raw);
|
||||
|
||||
@protected
|
||||
String dco_decode_String(dynamic raw);
|
||||
|
||||
@protected
|
||||
List<String> dco_decode_list_String(dynamic raw);
|
||||
|
||||
@protected
|
||||
Uint8List dco_decode_list_prim_u_8_strict(dynamic raw);
|
||||
|
||||
@protected
|
||||
int dco_decode_u_8(dynamic raw);
|
||||
|
||||
@protected
|
||||
void dco_decode_unit(dynamic raw);
|
||||
|
||||
@protected
|
||||
AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
String sse_decode_String(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
List<String> sse_decode_list_String(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
int sse_decode_u_8(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
void sse_decode_unit(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
int sse_decode_i_32(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
bool sse_decode_bool(SseDeserializer deserializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_AnyhowException(
|
||||
AnyhowException self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_String(String self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_list_String(List<String> self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_list_prim_u_8_strict(
|
||||
Uint8List self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_u_8(int self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_unit(void self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_i_32(int self, SseSerializer serializer);
|
||||
|
||||
@protected
|
||||
void sse_encode_bool(bool self, SseSerializer serializer);
|
||||
}
|
||||
|
||||
// Section: wire_class
|
||||
|
||||
class RustLibWire implements BaseWire {
|
||||
RustLibWire.fromExternalLibrary(ExternalLibrary lib);
|
||||
}
|
||||
|
||||
@JS('wasm_bindgen')
|
||||
external RustLibWasmModule get wasmModule;
|
||||
|
||||
@JS()
|
||||
@anonymous
|
||||
class RustLibWasmModule implements WasmModule {
|
||||
@override
|
||||
external Object /* Promise */ call([String? moduleName]);
|
||||
|
||||
@override
|
||||
external RustLibWasmModule bind(dynamic thisArg, String moduleName);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue