mirror of
https://github.com/ALEZ-DEV/Babylonia-terminal.git
synced 2025-12-16 01:18:50 +00:00
Add error dialog
This commit is contained in:
parent
a330bf9913
commit
7c83f0dbaf
@ -5,17 +5,20 @@ import 'package:yaru/yaru.dart';
|
|||||||
import './screens/screens.dart';
|
import './screens/screens.dart';
|
||||||
import './screens/setup_screen.dart';
|
import './screens/setup_screen.dart';
|
||||||
import './providers/providers.dart';
|
import './providers/providers.dart';
|
||||||
|
import './models/error_reporter.dart';
|
||||||
|
|
||||||
class BabyloniaLauncher extends StatelessWidget {
|
class BabyloniaLauncher extends StatelessWidget {
|
||||||
const BabyloniaLauncher(
|
BabyloniaLauncher(
|
||||||
{super.key,
|
{super.key,
|
||||||
required this.settingsProvider,
|
required this.settingsProvider,
|
||||||
required this.gameStateProvider});
|
required this.gameStateProvider});
|
||||||
final SettingsProvider settingsProvider;
|
final SettingsProvider settingsProvider;
|
||||||
final GameStateProvider gameStateProvider;
|
final GameStateProvider gameStateProvider;
|
||||||
|
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
ErrorReporter.listenAllRustError(navigatorKey);
|
||||||
return MultiProvider(
|
return MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
ChangeNotifierProvider(
|
ChangeNotifierProvider(
|
||||||
@ -27,6 +30,7 @@ class BabyloniaLauncher extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
child: YaruTheme(
|
child: YaruTheme(
|
||||||
builder: (context, yaru, child) => MaterialApp(
|
builder: (context, yaru, child) => MaterialApp(
|
||||||
|
navigatorKey: navigatorKey,
|
||||||
title: "Babylonia Terminal",
|
title: "Babylonia Terminal",
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
theme: yaru.theme,
|
theme: yaru.theme,
|
||||||
|
|||||||
56
babylonia_terminal_launcher/lib/models/error_reporter.dart
Normal file
56
babylonia_terminal_launcher/lib/models/error_reporter.dart
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_highlight/flutter_highlight.dart';
|
||||||
|
import 'package:flutter_highlight/themes/vs.dart';
|
||||||
|
import 'package:flutter_highlight/themes/vs2015.dart';
|
||||||
|
import 'package:yaru/icons.dart';
|
||||||
|
import 'package:yaru/widgets.dart';
|
||||||
|
|
||||||
|
import './../messages/error.pb.dart';
|
||||||
|
|
||||||
|
class ErrorReporter {
|
||||||
|
static Future listenAllRustError(
|
||||||
|
GlobalKey<NavigatorState> navigatorState) async {
|
||||||
|
final stream = ReportError.rustSignalStream;
|
||||||
|
await for (final rustSignal in stream) {
|
||||||
|
final context = navigatorState.currentState!.overlay!.context;
|
||||||
|
await showDialog<void>(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => AlertDialog(
|
||||||
|
titlePadding: EdgeInsets.zero,
|
||||||
|
title: YaruDialogTitleBar(
|
||||||
|
title: const Text('Error'),
|
||||||
|
isClosable: true,
|
||||||
|
leading: Center(
|
||||||
|
child: YaruIconButton(
|
||||||
|
icon: const Icon(YaruIcons.copy),
|
||||||
|
tooltip: 'Copy',
|
||||||
|
onPressed: () async {
|
||||||
|
Clipboard.setData(
|
||||||
|
ClipboardData(text: rustSignal.message.errorMessage),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
contentPadding: EdgeInsets.zero,
|
||||||
|
content: SizedBox(
|
||||||
|
height: 400,
|
||||||
|
width: 700,
|
||||||
|
child: HighlightView(
|
||||||
|
rustSignal.message.errorMessage,
|
||||||
|
language: '',
|
||||||
|
theme: Theme.of(context).brightness == Brightness.dark
|
||||||
|
? vs2015Theme
|
||||||
|
: vsTheme,
|
||||||
|
padding: const EdgeInsets.all(12),
|
||||||
|
textStyle: const TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
7
babylonia_terminal_launcher/messages/error.proto
Normal file
7
babylonia_terminal_launcher/messages/error.proto
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
package error;
|
||||||
|
|
||||||
|
// [RINF:RUST-SIGNAL]
|
||||||
|
message ReportError {
|
||||||
|
string errorMessage = 1;
|
||||||
|
}
|
||||||
@ -1,6 +1,9 @@
|
|||||||
use babylonia_terminal_sdk::game_state::GameState;
|
use babylonia_terminal_sdk::game_state::GameState;
|
||||||
|
|
||||||
use crate::messages::game_state::{AskGameState, GameState as GameStateMessage, States};
|
use crate::messages::{
|
||||||
|
error::ReportError,
|
||||||
|
game_state::{AskGameState, GameState as GameStateMessage, States},
|
||||||
|
};
|
||||||
|
|
||||||
impl GameStateMessage {
|
impl GameStateMessage {
|
||||||
fn from_sdk_state_to_msg_state(state: GameState) -> Self {
|
fn from_sdk_state_to_msg_state(state: GameState) -> Self {
|
||||||
@ -24,8 +27,12 @@ pub async fn listen_game_state() {
|
|||||||
let mut receiver = AskGameState::get_dart_signal_receiver();
|
let mut receiver = AskGameState::get_dart_signal_receiver();
|
||||||
while let Some(_) = receiver.recv().await {
|
while let Some(_) = receiver.recv().await {
|
||||||
let result_state = GameState::get_current_state().await;
|
let result_state = GameState::get_current_state().await;
|
||||||
if let Ok(state) = result_state {
|
match result_state {
|
||||||
GameStateMessage::from_sdk_state_to_msg_state(state).send_signal_to_dart();
|
Ok(state) => GameStateMessage::from_sdk_state_to_msg_state(state).send_signal_to_dart(),
|
||||||
|
Err(e) => ReportError {
|
||||||
|
error_message: format!("When updating the game state : {}", e),
|
||||||
|
}
|
||||||
|
.send_signal_to_dart(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,14 @@
|
|||||||
|
use std::fmt::format;
|
||||||
|
|
||||||
use babylonia_terminal_sdk::{
|
use babylonia_terminal_sdk::{
|
||||||
components::proton_component::{PROTON_DEV, PROTON_REPO},
|
components::proton_component::{PROTON_DEV, PROTON_REPO},
|
||||||
utils::github_requester::{GithubRelease, GithubRequester},
|
utils::github_requester::{GithubRelease, GithubRequester},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::messages::github::{AskProtonVersions, ProtonVersions};
|
use crate::messages::{
|
||||||
|
error::ReportError,
|
||||||
|
github::{AskProtonVersions, ProtonVersions},
|
||||||
|
};
|
||||||
|
|
||||||
#[warn(dead_code)]
|
#[warn(dead_code)]
|
||||||
struct GithubInfo;
|
struct GithubInfo;
|
||||||
@ -24,7 +29,10 @@ pub async fn listen_proton_version() {
|
|||||||
versions: r.iter().map(|v| v.tag_name.to_owned()).collect(),
|
versions: r.iter().map(|v| v.tag_name.to_owned()).collect(),
|
||||||
}
|
}
|
||||||
.send_signal_to_dart(),
|
.send_signal_to_dart(),
|
||||||
Err(_) => todo!(),
|
Err(e) => ReportError {
|
||||||
|
error_message: format!("When fetching proton versions : {}", e),
|
||||||
|
}
|
||||||
|
.send_signal_to_dart(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,6 +48,7 @@ dependencies:
|
|||||||
protobuf: ^3.1.0
|
protobuf: ^3.1.0
|
||||||
shared_preferences: ^2.2.3
|
shared_preferences: ^2.2.3
|
||||||
http: ^1.2.1
|
http: ^1.2.1
|
||||||
|
flutter_highlight: ^0.7.0
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
media_kit:
|
media_kit:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user