Skip to content

Commit 96937f2

Browse files
Add terminate package to terminate app after shorebird update, prepare migration from txt to excel import, other fixes
1 parent 59534ff commit 96937f2

12 files changed

Lines changed: 54 additions & 19 deletions

File tree

school_data_hub_flutter/lib/common/widgets/get_cached_image_or_download_inage.dart renamed to school_data_hub_flutter/lib/common/widgets/get_image_cached_or_download.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:school_data_hub_client/school_data_hub_client.dart';
77
import 'package:school_data_hub_flutter/app_utils/custom_encrypter.dart';
88
import 'package:school_data_hub_flutter/common/services/notification_service.dart';
99

10-
Future<Image> getCachedImageOrDownloadImage({
10+
Future<Image> getImageCachedOrDownload({
1111
required String documentId,
1212
required bool decrypt,
1313
}) async {

school_data_hub_flutter/lib/common/widgets/hub_document/encrypted_document_image.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_it/flutter_it.dart';
33
import 'package:school_data_hub_flutter/common/theme/app_colors.dart';
4-
import 'package:school_data_hub_flutter/common/widgets/get_cached_image_or_download_inage.dart';
4+
import 'package:school_data_hub_flutter/common/widgets/get_image_cached_or_download.dart';
55
import 'package:widget_zoom/widget_zoom.dart';
66

77
class EncryptedDocumentImage extends WatchingWidget {
@@ -24,10 +24,7 @@ class EncryptedDocumentImage extends WatchingWidget {
2424
width: boxSize,
2525
child: ClipRRect(
2626
borderRadius: BorderRadius.circular(5),
27-
child: Image.asset(
28-
'assets/document_camera.png',
29-
fit: BoxFit.cover,
30-
),
27+
child: Image.asset('assets/document_camera.png', fit: BoxFit.cover),
3128
),
3229
);
3330
}
@@ -44,7 +41,7 @@ class EncryptedDocumentImage extends WatchingWidget {
4441
WidgetZoom(
4542
heroAnimationTag: '$documentId$randomPart',
4643
zoomWidget: FutureBuilder<Image>(
47-
future: getCachedImageOrDownloadImage(
44+
future: getImageCachedOrDownload(
4845
documentId: documentId!,
4946
decrypt: true,
5047
),

school_data_hub_flutter/lib/common/widgets/unencrypted_image_in_card.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:flutter_cache_manager/flutter_cache_manager.dart';
55
import 'package:flutter_it/flutter_it.dart';
66
import 'package:school_data_hub_flutter/app_utils/create_and_crop_image_file.dart';
77
import 'package:school_data_hub_flutter/common/theme/app_colors.dart';
8-
import 'package:school_data_hub_flutter/common/widgets/get_cached_image_or_download_inage.dart';
8+
import 'package:school_data_hub_flutter/common/widgets/get_image_cached_or_download.dart';
99
import 'package:school_data_hub_flutter/features/books/domain/book_manager.dart';
1010
import 'package:widget_zoom/widget_zoom.dart';
1111

school_data_hub_flutter/lib/core/env/env_manager.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ class EnvManager with ChangeNotifier {
352352

353353
// Check if credentials are stored - if so, log in
354354
// Add a small delay to ensure everything is properly initialized
355-
await Future.delayed(const Duration(milliseconds: 100));
355+
await Future<void>.delayed(const Duration(milliseconds: 100));
356356
await _checkAndAttemptAutoLogin();
357357

358358
// Note: registerManagersDependingOnAuthedSession is called automatically

school_data_hub_flutter/lib/core/init/init_manager.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ class InitManager {
158158
if (di.hasScope(InitScope.onMatrixEnvScope.name)) {
159159
_log.info('Dropping existing matrix scope before creating new one');
160160
await di.dropScope(InitScope.onMatrixEnvScope.name);
161-
await Future.delayed(const Duration(milliseconds: 50));
161+
await Future<void>.delayed(const Duration(milliseconds: 50));
162162
}
163163

164164
await di.pushNewScopeAsync(

school_data_hub_flutter/lib/core/updater/update_status_widget.dart

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import 'package:flutter/material.dart';
2+
import 'package:flutter_it/flutter_it.dart';
23
import 'package:school_data_hub_flutter/common/theme/app_colors.dart';
34
import 'package:school_data_hub_flutter/core/updater/shorebird_update_manager.dart';
45
import 'package:shorebird_code_push/shorebird_code_push.dart';
5-
import 'package:flutter_it/flutter_it.dart';
6+
import 'package:terminate_restart/terminate_restart.dart';
67

78
/// Widget that displays update status and provides update controls
89
class UpdateStatusWidget extends WatchingWidget {
@@ -115,7 +116,17 @@ class UpdateStatusWidget extends WatchingWidget {
115116
),
116117

117118
const SizedBox(height: 12),
118-
119+
ElevatedButton(
120+
onPressed: () async {
121+
await TerminateRestart.instance.restartAppWithConfirmation(
122+
context,
123+
title: 'Restart App',
124+
message: 'Do you want to restart the app?',
125+
terminate: true,
126+
);
127+
},
128+
child: const Text('App neu starten'),
129+
),
119130
// Action buttons
120131
Row(
121132
children: [
@@ -191,7 +202,7 @@ class UpdateStatusWidget extends WatchingWidget {
191202
}
192203

193204
void _showRestartDialog(BuildContext context) {
194-
showDialog(
205+
showDialog<void>(
195206
context: context,
196207
builder: (context) => AlertDialog(
197208
title: const Text('Restart Required'),
@@ -205,10 +216,13 @@ class UpdateStatusWidget extends WatchingWidget {
205216
child: const Text('Later'),
206217
),
207218
ElevatedButton(
208-
onPressed: () {
209-
Navigator.of(context).pop();
210-
// You could add app restart logic here if needed
211-
// For now, user needs to manually restart
219+
onPressed: () async {
220+
await TerminateRestart.instance.restartAppWithConfirmation(
221+
context,
222+
title: 'Restart App',
223+
message: 'Do you want to restart the app?',
224+
terminate: true,
225+
);
212226
},
213227
child: const Text('OK'),
214228
),

school_data_hub_flutter/lib/features/_pupil/presentation/widgets/avatar.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:school_data_hub_flutter/common/theme/app_colors.dart';
55
import 'package:school_data_hub_flutter/common/theme/styles.dart';
66
import 'package:school_data_hub_flutter/common/widgets/dialogs/confirmation_dialog.dart';
77
import 'package:school_data_hub_flutter/common/widgets/dialogs/information_dialog.dart';
8-
import 'package:school_data_hub_flutter/common/widgets/get_cached_image_or_download_inage.dart';
8+
import 'package:school_data_hub_flutter/common/widgets/get_image_cached_or_download.dart';
99
import 'package:school_data_hub_flutter/features/_attendance/domain/attendance_helper_functions.dart';
1010
import 'package:school_data_hub_flutter/features/_attendance/domain/attendance_manager.dart';
1111
import 'package:school_data_hub_flutter/features/_pupil/domain/models/pupil_proxy.dart';
@@ -44,7 +44,7 @@ class AvatarImage extends WatchingWidget {
4444
heroAnimationTag:
4545
heroTag ?? '${avatar.documentId}_${pupil.pupilId}',
4646
zoomWidget: FutureBuilder<Widget>(
47-
future: getCachedImageOrDownloadImage(
47+
future: getImageCachedOrDownload(
4848
documentId: avatar.documentId,
4949
decrypt: true,
5050
),

school_data_hub_flutter/lib/main.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@ import 'package:school_data_hub_flutter/features/app_entry_point/login_page/logi
2323
import 'package:school_data_hub_flutter/features/app_entry_point/no_connection_page.dart';
2424
import 'package:school_data_hub_flutter/features/app_main_navigation/widgets/main_menu_bottom_navigation.dart';
2525
import 'package:school_data_hub_flutter/l10n/app_localizations.dart';
26+
import 'package:terminate_restart/terminate_restart.dart';
2627
import 'package:window_manager/window_manager.dart';
2728

2829
void main() async {
2930
GetIt.instance.debugEventsEnabled = true;
3031
WidgetsFlutterBinding.ensureInitialized();
3132
// Initialize media_kit backend for just_audio on Windows/Linux
3233
JustAudioMediaKit.ensureInitialized();
34+
// Initialize TerminateRestart to handle app termination
35+
TerminateRestart.instance.initialize();
3336
// Set the global logging level
3437
Logger.root.level = Level.ALL;
3538
di.registerSingleton<LogService>(LogService());

school_data_hub_flutter/pubspec.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1690,6 +1690,14 @@ packages:
16901690
url: "https://pub.dev"
16911691
source: hosted
16921692
version: "1.2.2"
1693+
terminate_restart:
1694+
dependency: "direct main"
1695+
description:
1696+
name: terminate_restart
1697+
sha256: "82c27b35fb838fa1669123c3cc3f32040489a753d079a74ed217965d2cd7b2e2"
1698+
url: "https://pub.dev"
1699+
source: hosted
1700+
version: "1.0.11"
16931701
test_api:
16941702
dependency: transitive
16951703
description:

school_data_hub_flutter/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ dependencies:
9696
record: ^6.2.0
9797
pdfrx: ^2.2.24
9898
flutter_svg: ^2.2.3
99+
terminate_restart: ^1.0.11
99100
dev_dependencies:
100101
flutter_lints: '>=3.0.0 <6.0.0'
101102
flutter_test:

0 commit comments

Comments
 (0)