commit 24f7c97a00cb6ecac9d9cde5529998fb60850bbf Author: AkkusMert <45667945+AkkusMert@users.noreply.github.com> Date: Wed Nov 9 11:46:41 2022 +0100 flutter app diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..24476c5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..223e397 --- /dev/null +++ b/.metadata @@ -0,0 +1,33 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: eb6d86ee27deecba4a83536aa20f366a6044895c + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c + base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c + - platform: android + create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c + base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c + - platform: web + create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c + base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/README.md b/README.md new file mode 100644 index 0000000..eb4e8bf --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# cpd_2022_energy + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..7490aa3 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,59 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "de.hsma.stud.cpd_2022_energy" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..3b7764d --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..0ccfbb5 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/android/app/src/main/java/de/hsma/stud/cpd_2022_energy/MainActivity.java b/android/app/src/main/java/de/hsma/stud/cpd_2022_energy/MainActivity.java new file mode 100644 index 0000000..d48d61c --- /dev/null +++ b/android/app/src/main/java/de/hsma/stud/cpd_2022_energy/MainActivity.java @@ -0,0 +1,6 @@ +package de.hsma.stud.cpd_2022_energy; + +import io.flutter.embedding.android.FlutterActivity; + +public class MainActivity extends FlutterActivity { +} diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17987b7 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..09d4391 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..d5f1c8d Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..4d6372e Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..3b7764d --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..83ae220 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..cb24abd --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..6374933 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,518 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:provider/provider.dart'; + +void main() { + runApp(const EnergyProviderApp()); +} + +class EnergyModel extends ChangeNotifier { + String startheight = ""; + String endheight = ""; + String startspeed=""; + String endspeed=""; + String weight=""; + + EnergyModel(){ + startheight; + endheight; + startspeed; + endspeed; + weight; + } + + void setStartheight(String input){ + startheight=input; + } + + void setEndheight(String input){ + endheight= input; + } + + void setStartspeed(String input){ + startspeed=input; + } + + void setEndspeed(String input){ + endspeed=input; + } + + void setWeight(String input){ + weight=input; + } + + void changeInput(String input) { + startheight = input; + notifyListeners(); + } +} + +class KineticModel extends ChangeNotifier{ + String startheight = ""; + String endheight = ""; + String startspeed=""; + String endspeed=""; + String weight=""; + + KineticModel(){ + startspeed; + endspeed; + weight; + } + + void setStartspeed(String input){ + startspeed=input; + } + + void setEndspeed(String input){ + endspeed=input; + } + + void setWeight(String input){ + weight=input; + } + + void update(){ + notifyListeners(); + } + +} + +class PotentialModel extends ChangeNotifier{ + String startheight = ""; + String endheight = ""; + String weight=""; + + PotentialModel(){ + startheight; + endheight; + weight; + } + + void setStartheight(String input){ + startheight=input; + } + + void setEndheight(String input){ + endheight=input; + } + + void setWeight(String input){ + weight=input; + } + + void update(){ + notifyListeners(); + } + +} + +class PotentialCalc extends StatelessWidget{ + PotentialCalc({super.key}); + final _formKey = GlobalKey(); + + double calcPotentialE(double mass, double startheight, double endheight){ + double height = (startheight-endheight).abs(); + return mass * 9.81 * height; + } + + double calcWater(double e){ + return e/(80*4190); + } + + double calcIron(double e){ + return e/(460*680); + } + + double joule=0.0; + double water=0.0; + double iron=0.0; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text("Potentielle Energie"), + ), + body: ChangeNotifierProvider( + create: (_) => PotentialModel(), + child: Center( + child: Column( + children: [ + Consumer( + builder: (context, model, child) => Column( + children: [ + Center( + child: Form( + key: _formKey, + child: Column( + children: [ + const Padding( + padding: const EdgeInsets.all(8.0), + child: const Text("Geben Sie Ihre Werte ein"), + ), + //Anfangsgeschwindigkeit + Padding( + padding: const EdgeInsets.only(left: 8, top: 40, right: 8, bottom: 0), + child: TextFormField( + onSaved: (String? val) { + model.setStartheight(val!); + }, + keyboardType: TextInputType.numberWithOptions(decimal: true), + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp(r"^((\d+)?(\.)?(\d{1,2})?)")) + ], + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: "Anfangshöhe in Meter", + hintText: "Geben Sie eine Dezimalzahl an", + ), + ), + ), + + //Endgeschwindigkeit + Padding( + padding: const EdgeInsets.only(left: 8, top: 8, right: 8, bottom: 0), + child: TextFormField( + onSaved: (String? val) { + model.setEndheight(val!); + }, + keyboardType: TextInputType.numberWithOptions(decimal: true), + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp(r"^((\d+)?(\.)?(\d{1,2})?)")) + ], + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: "Endhöhe in Meter", + hintText: "Geben Sie eine Dezimalzahl an", + ), + ), + ), + + // Gewicht des Objekts + Padding( + padding: const EdgeInsets.only(left: 8, top: 40, right: 8, bottom: 0), + child: TextFormField( + onSaved: (String? val) { + model.setWeight(val!); + }, + keyboardType: TextInputType.numberWithOptions(decimal: true), + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp(r"^((\d+)?(\.)?(\d{1,2})?)")) + ], + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: "Gewicht in Kilogramm", + hintText: "Geben Sie eine Dezimalzahl an", + ), + ), + ), + + IconButton( + onPressed: () { + if(_formKey.currentState!.validate()){ + _formKey.currentState!.save(); + } + joule=calcPotentialE(double.parse(model.weight), double.parse(model.startheight), double.parse(model.endheight)); + water=calcWater(joule); + iron=calcIron(joule); + model.update(); + + }, + icon: const Icon(Icons.calculate, color: Colors.blue), + tooltip: 'Berechne', + ), + + //Divider + const Divider( + height: 40, + thickness: 2, + color: Colors.black, + ), + + const Text("Ergebnis:"), + + Padding( + padding: const EdgeInsets.only(left: 8, top: 16, right: 8, bottom: 0), + child: Text( + joule.toStringAsFixed(2) +"Joule" + ), + ), + + Padding( + padding: const EdgeInsets.only(left: 8, top: 16, right: 8, bottom: 0), + child: Text( + "Damit kann man "+ water.toStringAsFixed(2) +"l Wasser zum Kochen bringen" + ), + ), + + Padding( + padding: const EdgeInsets.only(left: 8, top: 8, right: 8, bottom: 0), + child: Text( + "Damit kann man "+ iron.toStringAsFixed(2) +"kg Eisen zum Glühen bringen" + ), + ), + + + ], + ), + ), + + ), + ], + ) + ), + ], + ), + ), + ), + + + //TextButton(child: const Text("Berechne"),onPressed: () { },) + ); + } + + +} + + +class KineticCalc extends StatelessWidget{ + KineticCalc({super.key}); + final _formKey = GlobalKey(); + + double calcKineticE(double mass, double startspeed, double endspeed){ + double speed = (startspeed-endspeed).abs(); + return mass * speed * speed/2; + } + + double calcWater(double e){ + return (e/(80*4190)); + } + + double calcIron(double e){ + return e/(460*680); + } + + double joule=0.0; + double water=0; + double iron=0.0; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text("Kinetische Energie"), + ), + body: ChangeNotifierProvider( + create: (_) => KineticModel(), + child: Center( + child: Column( + children: [ + Consumer( + builder: (context, model, child) => Column( + children: [ + Center( + child: Form( + key: _formKey, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: const Text("Geben Sie Ihre Werte ein"), + ), + //Anfangsgeschwindigkeit + Padding( + padding: const EdgeInsets.only(left: 8, top: 40, right: 8, bottom: 0), + child: TextFormField( + onSaved: (String? val) { + model.setStartspeed(val!); + }, + keyboardType: TextInputType.numberWithOptions(decimal: true), + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp(r"^((\d+)?(\.)?(\d{1,2})?)")) + ], + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: "Anfangsgeschwindigkeit in Meter/Sekunde", + hintText: "Geben Sie eine Dezimalzahl an", + ), + ), + ), + + //Endgeschwindigkeit + Padding( + padding: const EdgeInsets.only(left: 8, top: 8, right: 8, bottom: 0), + child: TextFormField( + onSaved: (String? val) { + model.setEndspeed(val!); + }, + keyboardType: TextInputType.numberWithOptions(decimal: true), + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp(r"^((\d+)?(\.)?(\d{1,2})?)")) + ], + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: "Endgeschwindigkeit in Meter/Sekunde", + hintText: "Geben Sie eine Dezimalzahl an", + ), + ), + ), + + // Gewicht des Objekts + Padding( + padding: const EdgeInsets.only(left: 8, top: 40, right: 8, bottom: 0), + child: TextFormField( + onSaved: (String? val) { + model.setWeight(val!); + }, + keyboardType: TextInputType.numberWithOptions(decimal: true), + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp(r"^((\d+)?(\.)?(\d{1,2})?)")) + ], + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: "Gewicht in Kilogramm", + hintText: "Geben Sie eine Dezimalzahl an", + ), + ), + ), + + IconButton( + onPressed: () { + if(_formKey.currentState!.validate()){ + _formKey.currentState!.save(); + } + joule=calcKineticE(double.parse(model.weight), double.parse(model.startspeed), double.parse(model.endspeed)); + water=calcWater(joule); + iron=calcIron(joule); + model.update(); + + }, + icon: const Icon(Icons.calculate, color: Colors.blue), + tooltip: 'Berechne', + ), + + //Divider + const Divider( + height: 40, + thickness: 2, + color: Colors.black, + ), + + const Text("Ergebnis:"), + + Padding( + padding: const EdgeInsets.only(left: 8, top: 16, right: 8, bottom: 0), + child: Text( + joule.toStringAsFixed(2)+" Joule" + ), + ), + + Padding( + padding: const EdgeInsets.only(left: 8, top: 16, right: 8, bottom: 0), + child: Text( + "Damit kann man "+ water.toStringAsFixed(2) +"l Wasser zum Kochen bringen" + ), + ), + + Padding( + padding: const EdgeInsets.only(left: 8, top: 8, right: 8, bottom: 0), + child: Text( + "Damit kann man "+ iron.toStringAsFixed(2) +"kg Eisen zum Glühen bringen" + ), + ), + + + ], + ), + ), + + ), + ], + ) + ), + ], + ), + ), + ), + + + //TextButton(child: const Text("Berechne"),onPressed: () { },) + ); + } + +} + +class EnergyProviderApp extends StatelessWidget { + const EnergyProviderApp({super.key}); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Energiebilanz', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const EnergyApp(title: 'Energiebilanz Rechner'), + routes: { + "/kinetic": (context) => KineticCalc(), + "/potential": (context) => PotentialCalc(), + }, + ); + } +} + +class EnergyApp extends StatefulWidget { + const EnergyApp({super.key, required this.title}); + + final String title; + + @override + State createState() => _EnergyAppState(); +} + +class _EnergyAppState extends State { + + double calcPotentialE(double mass, double startheight, double endheight){ + return mass * 9.81 * (startheight - endheight).abs(); + } + + double calcKineticE(double mass, double startspeed, double endspeed){ + double speed = (startspeed-endspeed).abs(); + return mass * speed * speed; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: Center( + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () {Navigator.pushNamed(context,"/kinetic"); + }, + child: const Text("Kinetische Energie berechnen"), + ), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () => {Navigator.pushNamed(context, "/potential")}, + child: const Text("Potentielle Energie berechnen"), + ), + ), + ], + ), + ), + + + + ); + } +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..440da81 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,175 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + lints: + dependency: transitive + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.2" + provider: + dependency: "direct main" + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.12" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" +sdks: + dart: ">=2.18.2 <3.0.0" + flutter: ">=1.16.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..7f091af --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,92 @@ +name: cpd_2022_energy +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=2.18.2 <3.0.0' + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + provider: ^6.0.1 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..918e7ec --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:cpd_2022_energy/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const EnergyProviderApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/web/favicon.png b/web/favicon.png new file mode 100644 index 0000000..8aaa46a Binary files /dev/null and b/web/favicon.png differ diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png new file mode 100644 index 0000000..b749bfe Binary files /dev/null and b/web/icons/Icon-192.png differ diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png new file mode 100644 index 0000000..88cfd48 Binary files /dev/null and b/web/icons/Icon-512.png differ diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..eb9b4d7 Binary files /dev/null and b/web/icons/Icon-maskable-192.png differ diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..d69c566 Binary files /dev/null and b/web/icons/Icon-maskable-512.png differ diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..60be1e6 --- /dev/null +++ b/web/index.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + cpd_2022_energy + + + + + + + + + + diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..1b718e0 --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "cpd_2022_energy", + "short_name": "cpd_2022_energy", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +}