Compare commits

...

14 Commits

Author SHA1 Message Date
Thomas Hassenstein bc0cba7286 Dateien nach "/" hochladen
pubspec.yaml aufräumen von kommentaren
2024-01-10 19:22:59 +01:00
Thomas Hassenstein 388e2deb61 test/unit_test.dart gelöscht
Deleted unused Tests
2024-01-10 19:21:40 +01:00
Thomas Hassenstein 06e62dc7e5 lib/textscan.dart gelöscht
Auskommentierte Klasse für OCR löschen
2024-01-10 18:26:17 +01:00
Thomas Hassenstein d409005e4c Dateien nach "test" hochladen
Update Test Cases
2024-01-10 18:24:39 +01:00
Thomas Hassenstein 83b02eca1a test/navigation_test.dart gelöscht
Löschen von Navigation_Tests (Aufräumen auch von auskommentierten Code)
2024-01-10 18:24:07 +01:00
Thomas Hassenstein e3d9c8666c Dateien nach "test" hochladen
Test Anpassung Kommentare
2024-01-10 10:29:35 +01:00
Thomas Hassenstein 684d7fc15c Dateien nach "test" hochladen
Tests überarbeiten und auskommentieren dort wo Firebase Mocking gebraucht wird (nicht hinbekommen wie das funktioniert)
2024-01-10 10:25:53 +01:00
Thomas Hassenstein b89ff0770e Dateien nach "assets/images" hochladen
Image Crop
2024-01-10 09:03:57 +01:00
Thomas Hassenstein 918b51258d README.md aktualisiert
Bild 1Position
2024-01-10 09:01:49 +01:00
Thomas Hassenstein 5d7eb7ec3b Dateien nach "assets/images" hochladen
Image Position
2024-01-10 09:00:42 +01:00
Thomas Hassenstein 6fc8322202 Dateien nach "assets/images" hochladen
Image Crop
2024-01-10 08:59:47 +01:00
Thomas Hassenstein daec63e58b README.md aktualisiert
Relative Bildpfade angepasst
2024-01-10 08:57:57 +01:00
Thomas Hassenstein f7f1d8855a README.md aktualisiert
Readme.aktualisiert um Ablauf zu zeigen
2024-01-10 08:54:48 +01:00
Thomas Hassenstein 81105d0067 Dateien nach "assets/images" hochladen
Zusätzliche Bilder hinzugefügt
2024-01-10 08:48:46 +01:00
10 changed files with 157 additions and 124 deletions

View File

@ -1,7 +1,11 @@
# kochkomplize
Helfer zur Digitalisierung von alten Kochrezepten.
**Bild/Skizze:**
Ein Bild wie die Applikation aussehen soll findet man unter assets/images mit dem Namen skizze.png
**Bild/Ablauf:**
![Startseite](assets/images/Kochkomplize_Startseite.PNG)
![Rezept Übersicht](assets/images/Kochkomplize_Rezept_Overview.PNG)
![Rezept anlegen](assets/images/Kochkomplize_Rezept_anlegen.PNG)
![Rezept löschen](assets/images/Kochkomplize_Löschen.PNG)
**Funktionalität:**
1. Die App soll grundsätzlich im Browser als auch auf Mobilen Endgeräten laufen. (entweder iOS oder Android)
@ -10,8 +14,14 @@ Ein Bild wie die Applikation aussehen soll findet man unter assets/images mit de
4. Es soll möglich sein alte handgeschriebene Texte Bildern zu importieren.
5. Rezepte sollen gelöscht werden können.
6. Bonus: Texterkennung wenn die Packages es auch für Web zulassen.
**Eingesetzte Technologien:**
Flutter
Dart
Firebase

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

View File

@ -1,11 +0,0 @@
// import 'dart:io';
// import 'package:flutter/material.dart';
// import 'package:image_picker/image_picker.dart';
// import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';
// import 'menu_content.dart';
//import 'package:ocr_scan_text/ocr_scan_text.dart';
//todo https://pub.dev/packages/ocr_scan_text/install
//todo https://pub.dev/packages/google_mlkit_text_recognition/install
//todo https://pub.dev/packages/flutter_tesseract_ocr

View File

@ -11,17 +11,11 @@ dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
#sqflite: ^2.3.0
#sqlite3_flutter_libs: ^0.5.18
#sqlite3: ^2.3.0
firebase_core: ^2.24.2
firebase_database: ^10.4.0
firebase_storage: ^11.6.0
path_provider: ^2.1.2
image_picker: ^1.0.7
#cloud_firestore: ^4.14.0
#ocr_scan_text: 1.3.1
google_mlkit_text_recognition: ^0.11.0
path: ^1.8.0
dev_dependencies:

View File

@ -1,25 +0,0 @@
// import 'package:flutter/material.dart';
// import 'package:flutter_test/flutter_test.dart';
// import 'package:kochkomplize/main.dart';
// import 'package:kochkomplize/menu.dart';
//
// Widget buildMenu() {
// return MaterialApp(
// home: Scaffold(
// body: Menu(onMenuItemSelected: (menuItem) {}),
// ),
// );
// }
//
// void main() {
// testWidgets('Check menu text', (WidgetTester tester) async {
// await tester.pumpWidget(buildMenu());
// expect(find.text('Meine Rezepte'), findsOneWidget);
// });
//
// testWidgets('Check number of list items', (WidgetTester tester) async {
// await tester.pumpWidget(const MyApp());
// expect(find.byType(GestureDetector), findsNWidgets(2));
// });
//
// }

View File

@ -1,22 +0,0 @@
// import 'package:flutter_test/flutter_test.dart';
// import 'package:firebase_core/firebase_core.dart';
// import 'package:kochkomplize/main.dart';
// import 'package:kochkomplize/recipesoverview.dart';
// import 'package:kochkomplize/startpage.dart';
//
// void main() {
// test('_MyHomePageState should update selected menu content', () {
// final state = _MyHomePageState();
//
// state._onMenuItemSelected('Meine Rezepte');
// expect(state._selectedMenuContent, isInstanceOf<RecipesOverview>());
//
// state._onMenuItemSelected('Startseite');
// expect(state._selectedMenuContent, isInstanceOf<Startpage>());
// });
//
// test('Firebase initializes correctly', () async {
// await main(); // Ihr main-Methodenaufruf
// expect(Firebase.apps.length, isNonZero);
// });
// }

View File

@ -1,21 +1,108 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:kochkomplize/main.dart';
import 'package:kochkomplize/recipesoverview.dart';
import 'package:kochkomplize/menu.dart';
import 'package:kochkomplize/recipeformpage.dart';
void main() {
testWidgets('Menu navigation test', (WidgetTester tester) async {
await tester.pumpWidget(const MyApp());
// Öffne das Menü
await tester.tap(find.byIcon(Icons.menu));
testWidgets('Menu renders correctly', (WidgetTester tester) async {
void onMenuItemSelectedMock(String item) {}
// Verwenden Sie einen GlobalKey, um auf den Scaffold zuzugreifen
GlobalKey<ScaffoldState> scaffoldKey = GlobalKey();
await tester.pumpWidget(MaterialApp(home: Scaffold(key: scaffoldKey, drawer: Menu(onMenuItemSelected: onMenuItemSelectedMock))));
// Öffnen Sie den Drawer programmatisch
scaffoldKey.currentState!.openDrawer();
await tester.pumpAndSettle(); // Warten, bis die Animation abgeschlossen ist
// Überprüfen Sie nun, ob die Elemente im Drawer vorhanden sind
expect(find.byType(Drawer), findsOneWidget);
expect(find.text('Hauptmenü'), findsOneWidget);
expect(find.text('Startseite'), findsOneWidget);
expect(find.text('Meine Rezepte'), findsOneWidget);
});
testWidgets('Tapping each menu item calls onMenuItemSelected with correct item', (WidgetTester tester) async {
String selectedMenuItem = '';
void onMenuItemSelectedMock(String item) {
selectedMenuItem = item;
}
GlobalKey<ScaffoldState> scaffoldKey = GlobalKey();
await tester.pumpWidget(MaterialApp(home: Scaffold(key: scaffoldKey, drawer: Menu(onMenuItemSelected: onMenuItemSelectedMock))));
scaffoldKey.currentState!.openDrawer();
await tester.pumpAndSettle(); // Warten, bis die Animation abgeschlossen ist
// Tippen Sie auf das Menüelement 'Startseite' und überprüfen Sie die Funktionalität
await tester.tap(find.text('Startseite'));
await tester.pumpAndSettle();
expect(selectedMenuItem, 'Startseite');
// Wähle einen Menüpunkt
// Wiederholen Sie den Vorgang für 'Meine Rezepte'
scaffoldKey.currentState!.openDrawer();
await tester.pumpAndSettle();
await tester.tap(find.text('Meine Rezepte'));
await tester.pumpAndSettle();
expect(selectedMenuItem, 'Meine Rezepte');
// Hier können Sie weitere Tests für andere Menüpunkte hinzufügen
});
testWidgets('Drawer closes after an item is selected', (WidgetTester tester) async {
void onMenuItemSelectedMock(String item) {}
GlobalKey<ScaffoldState> scaffoldKey = GlobalKey();
await tester.pumpWidget(MaterialApp(home: Scaffold(key: scaffoldKey, drawer: Menu(onMenuItemSelected: onMenuItemSelectedMock))));
scaffoldKey.currentState!.openDrawer();
await tester.pumpAndSettle();
await tester.tap(find.text('Startseite'));
await tester.pumpAndSettle();
// Überprüfen Sie, ob der Drawer geschlossen ist
expect(scaffoldKey.currentState!.isDrawerOpen, isFalse);
});
testWidgets('Drawer header renders correctly', (WidgetTester tester) async {
// Erstellen Sie eine Mock-Funktion, die einen String als Parameter erwartet
void onMenuItemSelectedMock(String item) {}
GlobalKey<ScaffoldState> scaffoldKey = GlobalKey();
await tester.pumpWidget(MaterialApp(
home: Scaffold(key: scaffoldKey, drawer: Menu(onMenuItemSelected: onMenuItemSelectedMock))
));
scaffoldKey.currentState!.openDrawer();
await tester.pumpAndSettle();
// Überprüfen Sie, ob der DrawerHeader vorhanden ist
expect(find.byType(DrawerHeader), findsOneWidget);
expect(find.text('Hauptmenü'), findsOneWidget);
});
testWidgets('Recipeformpage has form fields', (WidgetTester tester) async {
await tester.pumpWidget(const MaterialApp(home: Recipeformpage()));
// Prüfen Sie, ob die Formularfelder vorhanden sind
expect(find.byType(TextFormField), findsWidgets);
// Prüfen Sie den Speichern-Button
expect(find.byType(FloatingActionButton), findsOneWidget);
});
testWidgets('MyHomePage renders correctly', (WidgetTester tester) async {
await tester.pumpWidget(const MaterialApp(home: MyHomePage(title: 'Kochkomplize')));
// Überprüfen Sie, ob der Titel korrekt angezeigt wird
expect(find.text('Kochkomplize'), findsOneWidget);
// Überprüfe, ob das richtige Widget angezeigt wird
expect(find.byType(RecipesOverview), findsOneWidget);
});
}