diff --git a/lib/openvino_console_app.dart b/lib/openvino_console_app.dart index 0906711f..dab8a7de 100644 --- a/lib/openvino_console_app.dart +++ b/lib/openvino_console_app.dart @@ -6,7 +6,6 @@ import 'dart:io'; import 'package:go_router/go_router.dart'; import 'package:inference/deployment_processor.dart'; import 'package:inference/interop/device.dart'; -import 'package:inference/interop/image_inference.dart'; import 'package:inference/providers/preference_provider.dart'; import 'package:inference/providers/project_provider.dart'; import 'package:inference/utils.dart'; @@ -36,16 +35,11 @@ class _OpenVINOTestDriveAppState extends State { void initState() { super.initState(); - //setLoggingOutput(); - ensureFontIsStored().then((_) { - fontPath().then((font) => ImageInference.setupFont(font)); - }); - setupErrors(); - - Device.getDevices().then((devices) { + Device.getDevices() .then((devices) { PreferenceProvider.availableDevices = devices; }); + ensureFontIsStored(); final projectsProvider = Provider.of(context, listen: false); final addProjects = projectsProvider.addProjects; @@ -197,7 +191,7 @@ class _OpenVINOTestDriveAppState extends State { right: 24, bottom: 24, child: FeedbackButton() - ) + ), ], ); } diff --git a/lib/pages/download_model/download_model.dart b/lib/pages/download_model/download_model.dart index 56d38b4a..f5d59ec0 100644 --- a/lib/pages/download_model/download_model.dart +++ b/lib/pages/download_model/download_model.dart @@ -84,8 +84,7 @@ class _DownloadPageState extends State { request = DownloadRequest( id: widget.project.id, downloads: files, - ); - request!.onDone = onComplete; + )..onDone = onComplete; setState(() {}); projectProvider.addProject(widget.project); await getAdditionalModelInfo(widget.project); diff --git a/lib/utils.dart b/lib/utils.dart index a3f58758..39569d57 100644 --- a/lib/utils.dart +++ b/lib/utils.dart @@ -8,10 +8,13 @@ import 'dart:math'; import 'package:dio/dio.dart'; import 'package:dio/io.dart'; import 'package:file_picker/file_picker.dart'; +import 'package:fluent_ui/fluent_ui.dart'; import 'package:flutter/foundation.dart'; import 'package:inference/config.dart'; import 'package:inference/deployment_processor.dart'; import 'package:inference/project.dart'; +import 'package:inference/router.dart'; +import 'package:inference/widgets/dialogs/critical_error.dart'; import 'package:intl/intl.dart'; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; @@ -46,6 +49,18 @@ String parseWpad(String wpad) { return ''; } + +Future showGlobalDialog(WidgetBuilder builder) async { + if (rootNavigatorKey.currentContext?.mounted == true) { + return await showDialog( + context: rootNavigatorKey.currentContext!, + builder: builder + ); + } else { + return null; + } +} + void setupErrors() async { final directory = await getApplicationSupportDirectory(); final platformContext = Context(style: Style.platform); @@ -71,6 +86,7 @@ ${stack.toString()} """; print(contents); File(errorPath).writeAsStringSync(contents, mode: FileMode.append); + showCriticalErrorDialog(error, stack); return true; }; } @@ -109,4 +125,4 @@ class Envvars { } return ''; } -} \ No newline at end of file +} diff --git a/lib/widgets/dialogs/critical_error.dart b/lib/widgets/dialogs/critical_error.dart new file mode 100644 index 00000000..548dd8aa --- /dev/null +++ b/lib/widgets/dialogs/critical_error.dart @@ -0,0 +1,47 @@ +// Copyright (c) 2024 Intel Corporation +// +// SPDX-License-Identifier: Apache-2.0 + +import 'package:fluent_ui/fluent_ui.dart'; +import 'package:inference/utils.dart'; + +void showCriticalErrorDialog(dynamic e, StackTrace trace) { + showGlobalDialog((context) => ContentDialog( + constraints: const BoxConstraints( + maxWidth: 756, + maxHeight: 500, + ), + title: const Text("An error occured."), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + height: 50, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text(e.toString(), overflow: TextOverflow.ellipsis), + ), + ), + Expander( + header: const Text("Details"), + content: SizedBox( + height: 180, + child: SingleChildScrollView( + child: SelectableText("$e\n$trace")), + ) + ), + ], + ), + actions: [ + Button( + onPressed: () { + Navigator.pop(context, true); + //windowManager.close(); + }, + child: const Text('Close'), + ), + ] + ) + ); +}