Compare commits
No commits in common. "a2e70f7dffda2a669fb6018fbdbc39fd87d7deae" and "7f0200885cd73b84f6f95429b31109d97c9956d6" have entirely different histories.
a2e70f7dff
...
7f0200885c
105
lib/main.dart
105
lib/main.dart
@ -1,6 +1,5 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:ui';
|
|
||||||
|
|
||||||
import 'package:dartssh2/dartssh2.dart';
|
import 'package:dartssh2/dartssh2.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@ -22,21 +21,6 @@ import 'authentik_api.dart' as authentik;
|
|||||||
import 'package:app_links/app_links.dart';
|
import 'package:app_links/app_links.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
final errorNotifier = ValueNotifier<String?>(null);
|
|
||||||
|
|
||||||
// Fehler-Handler registrieren
|
|
||||||
PlatformDispatcher.instance.onError = (error, stack) {
|
|
||||||
final timeStr = DateTime.now().toIso8601String();
|
|
||||||
final errorMessage = 'Time: $timeStr\nError: $error\nStack: $stack';
|
|
||||||
|
|
||||||
if (errorNotifier.value == null) {
|
|
||||||
errorNotifier.value = errorMessage;
|
|
||||||
} else {
|
|
||||||
errorNotifier.value = errorNotifier.value! + '\n\n' + errorMessage;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
runApp(
|
runApp(
|
||||||
MultiProvider(
|
MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
@ -44,7 +28,7 @@ void main() {
|
|||||||
create: (context) => AuthentikUserSettingsChangeDialogState(),
|
create: (context) => AuthentikUserSettingsChangeDialogState(),
|
||||||
), // Do something (navigation, ...)
|
), // Do something (navigation, ...)
|
||||||
],
|
],
|
||||||
child: MyApp(errorNotifier: errorNotifier),
|
child: const MyApp(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -73,9 +57,7 @@ String encodePublicKey(OpenSSHEd25519KeyPair keyPair, {String comment = ''}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
final ValueNotifier<String?> errorNotifier;
|
const MyApp({super.key});
|
||||||
|
|
||||||
const MyApp({super.key, required this.errorNotifier});
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -84,23 +66,15 @@ class MyApp extends StatelessWidget {
|
|||||||
theme: ThemeData(
|
theme: ThemeData(
|
||||||
colorScheme: ColorScheme.fromSeed(seedColor: Colors.yellow),
|
colorScheme: ColorScheme.fromSeed(seedColor: Colors.yellow),
|
||||||
),
|
),
|
||||||
home: MyHomePage(
|
home: const MyHomePage(title: 'LeineLab e.V. Key App'),
|
||||||
title: 'LeineLab e.V. Key App',
|
|
||||||
errorNotifier: errorNotifier,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyHomePage extends StatefulWidget {
|
class MyHomePage extends StatefulWidget {
|
||||||
const MyHomePage({
|
const MyHomePage({super.key, required this.title});
|
||||||
super.key,
|
|
||||||
required this.title,
|
|
||||||
required this.errorNotifier,
|
|
||||||
});
|
|
||||||
|
|
||||||
final String title;
|
final String title;
|
||||||
final ValueNotifier<String?> errorNotifier;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<MyHomePage> createState() => _MyHomePageState();
|
State<MyHomePage> createState() => _MyHomePageState();
|
||||||
@ -428,64 +402,6 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
final bodyComponentLogs = Center(
|
|
||||||
child: SingleChildScrollView(
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: <Widget>[
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.all(20),
|
|
||||||
child: Card(
|
|
||||||
child: Padding(
|
|
||||||
padding: EdgeInsets.all(20),
|
|
||||||
child: ValueListenableBuilder<String?>(
|
|
||||||
valueListenable: widget.errorNotifier,
|
|
||||||
builder: (context, error, child) {
|
|
||||||
if (error != null) {
|
|
||||||
return Text(
|
|
||||||
"Error: $error",
|
|
||||||
style: TextStyle(color: Colors.red, fontSize: 15),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return Text("No exceptions captured yet.");
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
final actionButtonLogs = FloatingActionButton(
|
|
||||||
onPressed: () {
|
|
||||||
// Copy the logs to the clipboard
|
|
||||||
final error = widget.errorNotifier.value;
|
|
||||||
if (error != null) {
|
|
||||||
SystemChannels.platform.invokeMethod<void>(
|
|
||||||
'Clipboard.setData',
|
|
||||||
<String, dynamic>{'text': error},
|
|
||||||
);
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
|
||||||
SnackBar(
|
|
||||||
content: Text("Logs copied to clipboard."),
|
|
||||||
duration: const Duration(seconds: 3),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
|
||||||
SnackBar(
|
|
||||||
content: Text("No logs to copy."),
|
|
||||||
duration: const Duration(seconds: 3),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: 'Copy Logs',
|
|
||||||
child: const Icon(Icons.copy),
|
|
||||||
);
|
|
||||||
|
|
||||||
final actionButtonInfo = FloatingActionButton(
|
final actionButtonInfo = FloatingActionButton(
|
||||||
onPressed: () => obtainKeyPair(regenerate: true),
|
onPressed: () => obtainKeyPair(regenerate: true),
|
||||||
tooltip: 'Regenerate Key',
|
tooltip: 'Regenerate Key',
|
||||||
@ -503,10 +419,6 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
// Info page
|
// Info page
|
||||||
bodyComponent = bodyComponentInfo;
|
bodyComponent = bodyComponentInfo;
|
||||||
actionButton = actionButtonInfo;
|
actionButton = actionButtonInfo;
|
||||||
} else if (navIndex == 2) {
|
|
||||||
// Logs page
|
|
||||||
bodyComponent = bodyComponentLogs;
|
|
||||||
actionButton = actionButtonLogs;
|
|
||||||
} else {
|
} else {
|
||||||
throw Exception('Unknown navIndex: $navIndex');
|
throw Exception('Unknown navIndex: $navIndex');
|
||||||
}
|
}
|
||||||
@ -544,15 +456,6 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ListTile(
|
|
||||||
title: const Text('Logs'),
|
|
||||||
onTap: () {
|
|
||||||
setState(() {
|
|
||||||
navIndex = 2;
|
|
||||||
});
|
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user