Skip to content

Commit dabe68c

Browse files
committed
File detail view now works if parameters are missing
If no image or some gcode-meta attributes are missing the file detail view didnt work properly. Fixed that by centering the no image Icon and adding null value checks + defaults.
1 parent e92f7c2 commit dabe68c

File tree

4 files changed

+25
-15
lines changed

4 files changed

+25
-15
lines changed

lib/ui/views/files/details/file_details_view.dart

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import 'package:cached_network_image/cached_network_image.dart';
22
import 'package:easy_localization/easy_localization.dart';
3-
import 'package:flutter/cupertino.dart';
43
import 'package:flutter/material.dart';
5-
import 'package:flutter/widgets.dart';
64
import 'package:flutter_icons/flutter_icons.dart';
75
import 'package:mobileraker/dto/files/gcode_file.dart';
86
import 'package:mobileraker/ui/views/files/details/file_details_viewmodel.dart';
@@ -84,7 +82,8 @@ class FileDetailView extends ViewModelBuilderWidget<FileDetailsViewModel> {
8482
placeholder: (context, url) => Icon(Icons.insert_drive_file),
8583
errorWidget: (context, url, error) => Column(
8684
children: [
87-
Icon(Icons.file_present),
85+
86+
Expanded(child: Icon(Icons.file_present)),
8887
Container(
8988
width: double.infinity,
9089
padding:
@@ -156,7 +155,7 @@ class FileDetailView extends ViewModelBuilderWidget<FileDetailsViewModel> {
156155
),
157156
PropertyTile(
158157
title: 'pages.files.details.meta_card.slicer'.tr(),
159-
subtitle: '${file.slicer} (v${file.slicerVersion})',
158+
subtitle: model.usedSlicerAndVersion,
160159
),
161160
PropertyTile(
162161
title: 'pages.files.details.meta_card.layer_higher'.tr(),

lib/ui/views/files/details/file_details_viewmodel.dart

+16-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:easy_localization/easy_localization.dart';
12
import 'package:intl/intl.dart';
23
import 'package:mobileraker/app/app_setup.locator.dart';
34
import 'package:mobileraker/app/app_setup.logger.dart';
@@ -35,14 +36,13 @@ class FileDetailsViewModel extends MultipleStreamViewModel {
3536
FileDetailsViewModel(this._file);
3637

3738
@override
38-
Map<String, StreamData> get streamsMap =>
39-
{
39+
Map<String, StreamData> get streamsMap => {
4040
if (_printerService != null)
4141
_PrinterStreamKey:
42-
StreamData<Printer>(_printerService!.printerStream),
42+
StreamData<Printer>(_printerService!.printerStream),
4343
if (_klippyService != null)
4444
_ServerStreamKey:
45-
StreamData<KlipperInstance>(_klippyService!.klipperStream),
45+
StreamData<KlipperInstance>(_klippyService!.klipperStream),
4646
};
4747

4848
bool get isServerAvailable => dataReady(_ServerStreamKey);
@@ -84,12 +84,20 @@ class FileDetailsViewModel extends MultipleStreamViewModel {
8484
}
8585

8686
String get potentialEta {
87+
if (_file.estimatedTime == null) return tr('general.unknown');
8788
var eta = DateTime.now()
8889
.add(Duration(seconds: _file.estimatedTime!.toInt()))
8990
.toLocal();
9091
return DateFormat.MMMEd().add_Hm().format(eta);
9192
}
9293

94+
String get usedSlicerAndVersion {
95+
String ukwn = tr('general.unknown');
96+
if (_file.slicerVersion == null) return _file.slicer ?? ukwn;
97+
98+
return '${_file.slicer ?? ukwn} (v${_file.slicerVersion})';
99+
}
100+
93101
bool get preHeatAvailable => _file.firstLayerTempBed != null;
94102

95103
void preHeatPrinter() {
@@ -106,9 +114,10 @@ class FileDetailsViewModel extends MultipleStreamViewModel {
106114
_printerService?.setTemperature('extruder', 170);
107115
_printerService?.setTemperature(
108116
'heater_bed', (_file.firstLayerTempBed ?? 60.0).toInt());
109-
_snackBarService.showSnackbar(title: 'Confirmed',
110-
message: 'Preheating Extruder: 170°C, Bed: ${_file.firstLayerTempBed
111-
?.toStringAsFixed(0)}°C');
117+
_snackBarService.showSnackbar(
118+
title: 'Confirmed',
119+
message:
120+
'Preheating Extruder: 170°C, Bed: ${_file.firstLayerTempBed?.toStringAsFixed(0)}°C');
112121
}
113122
});
114123
}

lib/ui/views/files/files_view.dart

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:cached_network_image/cached_network_image.dart';
22
import 'package:easy_localization/easy_localization.dart';
33
import 'package:flutter/material.dart';
4-
import 'package:flutter/widgets.dart';
54
import 'package:flutter_breadcrumb/flutter_breadcrumb.dart';
65
import 'package:flutter_spinkit/flutter_spinkit.dart';
76
import 'package:mobileraker/app/app_setup.router.dart';
@@ -27,7 +26,7 @@ class FilesView extends ViewModelBuilderWidget<FilesViewModel> {
2726
appBar: buildAppBar(context, model),
2827
drawer: NavigationDrawerWidget(curPath: Routes.filesView),
2928
body: ConnectionStateView(
30-
pChild: buildBody(context, model),
29+
body: buildBody(context, model),
3130
),
3231
),
3332
);

lib/ui/views/files/files_viewmodel.dart

+5-2
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,14 @@ class FilesViewModel extends MultipleStreamViewModel {
201201
String queryTerm = searchEditingController.text.toLowerCase();
202202

203203
if (queryTerm.isNotEmpty && isSearching) {
204+
List<String> terms = queryTerm.split(RegExp('\\W+'));
205+
RegExp regExp = RegExp(terms.where((element) => element.isNotEmpty).join("|"));
204206
folders = folders
205-
.where((element) => element.name.toLowerCase().contains(queryTerm))
207+
.where((element) => element.name.toLowerCase().contains(regExp))
206208
.toList(growable: false);
207209

208210
files = files
209-
.where((element) => element.name.toLowerCase().contains(queryTerm))
211+
.where((element) => element.name.toLowerCase().contains(regExp))
210212
.toList(growable: false);
211213
}
212214
var folderComparator = folderComparators[selectedSorting];
@@ -234,6 +236,7 @@ class FilesViewModel extends MultipleStreamViewModel {
234236
if (_printerSetting != null) {
235237
return '${_printerSetting!.httpUrl}/server/files';
236238
}
239+
return null;
237240
}
238241

239242
@override

0 commit comments

Comments
 (0)