added tapbarview to display data
parent
827306b137
commit
a60e9f968b
|
@ -1,9 +1,7 @@
|
|||
|
||||
import 'package:energy_bilance/models/EnergyBilanceModel.dart';
|
||||
import 'package:energy_bilance/models/MyInputModel.dart';
|
||||
import 'package:energy_bilance/widgets/MyCustomForm.dart';
|
||||
import 'package:energy_bilance/widgets/EnergyDisplay.dart';
|
||||
import 'package:energy_bilance/widgets/MyInputWidget.dart';
|
||||
import 'package:energy_bilance/widgets/MyTest.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
@ -17,15 +15,11 @@ void main() {
|
|||
child: Center(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Expanded(child: MyInputWidget()),
|
||||
Expanded(
|
||||
child: Consumer<EnergyBilanceModel>(
|
||||
builder: (context, model, child){
|
||||
return Text('Generierte Ekin: ${model.kineticEnergy}');
|
||||
}
|
||||
))
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: const [
|
||||
Expanded(child: MyInputWidget()),
|
||||
Divider(),
|
||||
Expanded(child: EnergyDisplay()),
|
||||
],
|
||||
)
|
||||
|
||||
|
|
|
@ -11,14 +11,26 @@ class EnergyBilanceModel extends ChangeNotifier {
|
|||
|
||||
double _weight = 0;
|
||||
|
||||
static const double _gravity = 9.81; //in m/s^2
|
||||
final double _gravity = 9.81; //in m/s^2
|
||||
|
||||
final double _waterHeatCapacity = 4.181; //J / (g * C°)
|
||||
final double _ironHeatCapacity = 0.439; //in J / (g * C°)
|
||||
|
||||
double _waterTemparatureStart = 20; //in °C
|
||||
final int _temparatureToBoilWater = 100; //in °C
|
||||
|
||||
double _ironTemparatureStart = 20; //in °C
|
||||
final int _temparatureToMakeIronGlow = 700; //in °C
|
||||
|
||||
double get deltaVelocity => _endVelocity - _startVelocity;
|
||||
double get deltaHeight => _endHeight - _startHeight;
|
||||
|
||||
double get potentialEnergy => _weight * _gravity * deltaHeight;
|
||||
double get potentialEnergy => _weight * _gravity * deltaHeight; //in Joule = m^2 kg/s^2
|
||||
double get kineticEnergy => _weight * pow(deltaVelocity, 2) / 2;
|
||||
|
||||
double get amountOfBoilingWaterInL => (((potentialEnergy + kineticEnergy) / _waterHeatCapacity) / (_temparatureToBoilWater - _waterTemparatureStart)) / 1000; //in litre
|
||||
double get amountOfGlowingIronInKg => (((potentialEnergy + kineticEnergy) / _ironHeatCapacity) / (_temparatureToMakeIronGlow - _ironTemparatureStart)) / 1000;
|
||||
|
||||
void setStartVelocity(double v){
|
||||
_startVelocity = v;
|
||||
notifyListeners();
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class MyInputModel extends ChangeNotifier {
|
||||
String _text = "Hallo Welt";
|
||||
|
||||
String get currentText => _text;
|
||||
|
||||
void changeText(String newText) {
|
||||
_text = newText;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
import 'package:energy_bilance/models/EnergyBilanceModel.dart';
|
||||
import 'package:energy_bilance/widgets/TabDisplayWidget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class EnergyDisplay extends StatelessWidget {
|
||||
const EnergyDisplay({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultTabController(
|
||||
length: 3,
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Energie umrechnen in:'),
|
||||
bottom: const TabBar(
|
||||
tabs: [
|
||||
Tab(text: 'Wasser', icon: Icon(Icons.anchor_sharp),),
|
||||
Tab(text: 'Eisen', icon: Icon(Icons.iron)),
|
||||
Tab(text: 'Energie', icon: Icon(Icons.battery_charging_full),)
|
||||
]
|
||||
),
|
||||
),
|
||||
body: TabBarView(
|
||||
children: [
|
||||
Consumer<EnergyBilanceModel>(
|
||||
builder: (context, model, child){
|
||||
return TabDisplayWidget('Wasser, das von 20 °C zum Kochen gebracht werden kann: ${double.parse((model.amountOfBoilingWaterInL).toStringAsFixed(2))} Liter');
|
||||
}
|
||||
),
|
||||
Consumer<EnergyBilanceModel>(
|
||||
builder: (context, model, child){
|
||||
return TabDisplayWidget('Eisen, das von 20 °C zum Glühen gebracht werden kann: ${double.parse((model.amountOfGlowingIronInKg).toStringAsFixed(2))} Kilo');
|
||||
}
|
||||
),
|
||||
Consumer<EnergyBilanceModel>(
|
||||
builder: (context, model, child){
|
||||
return TabDisplayWidget('Generierte potentielle Energie: ${model.potentialEnergy}\n'
|
||||
'Generierte kinetische Energie: ${model.kineticEnergy}');
|
||||
}
|
||||
),
|
||||
]
|
||||
),
|
||||
)
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class MyAppBar extends StatelessWidget {
|
||||
const MyAppBar({required this.title, super.key});
|
||||
|
||||
final Widget title;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
height: 56.0,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||
decoration: BoxDecoration(color: Colors.blue[500]),
|
||||
child: Row(
|
||||
children: [
|
||||
const IconButton(onPressed: null, icon: Icon(Icons.menu), tooltip: 'Navigation Menu'),
|
||||
Expanded(child: title),
|
||||
const IconButton(onPressed: null, icon: Icon(Icons.search), tooltip: 'Search')
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
import 'package:energy_bilance/models/MyInputModel.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class MyCustomForm extends StatefulWidget {
|
||||
const MyCustomForm({super.key});
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() {
|
||||
return MyCustomFormState();
|
||||
}
|
||||
}
|
||||
|
||||
class MyCustomFormState extends State<MyCustomForm> {
|
||||
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
TextFormField(
|
||||
decoration: const InputDecoration(
|
||||
labelText: 'Gib was ein',
|
||||
hintText: 'keine Zahlen bidde'
|
||||
),
|
||||
validator: (String? value) {
|
||||
return (value != null && value.contains('@')) ? 'Do not use the @ char.' : null;
|
||||
},
|
||||
onChanged: (value) {
|
||||
Provider.of<MyInputModel>(context, listen: false).changeText(value);
|
||||
}
|
||||
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -15,7 +15,7 @@ class MyInputWidget extends StatelessWidget {
|
|||
children: [
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
|
||||
children: [
|
||||
Expanded(
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
import 'package:energy_bilance/widgets/MyAppBar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class MyScaffold extends StatelessWidget {
|
||||
const MyScaffold({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
child: Column(
|
||||
children: [
|
||||
MyAppBar(title: Text('MyAppBar', style: Theme.of(context).primaryTextTheme.headline6)),
|
||||
const Expanded(child:
|
||||
Center(
|
||||
child: Text("Hello World!"),
|
||||
)
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
import 'package:energy_bilance/models/MyInputModel.dart';
|
||||
import 'package:energy_bilance/widgets/MyCustomForm.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class MyTest extends StatelessWidget {
|
||||
const MyTest({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
child:
|
||||
ChangeNotifierProvider(create: (context) => MyInputModel(),
|
||||
child: Column(
|
||||
children: [
|
||||
const MyCustomForm(),
|
||||
Consumer<MyInputModel>(
|
||||
builder: (context, input, child){
|
||||
return Text('Das ist die Eingabe: ${input.currentText}');
|
||||
}
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class TabDisplayWidget extends StatelessWidget {
|
||||
|
||||
String _displayText = "";
|
||||
|
||||
TabDisplayWidget(String displayText, {super.key}) {
|
||||
_displayText = displayText;
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Center(
|
||||
child: Text(_displayText)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:energy_bilance/models/EnergyBilanceModel.dart';
|
||||
|
||||
void main() async {
|
||||
//Location _locationModel;StreamController<Location> _controller;setUp(() {
|
||||
_controller = StreamController<EnergyBilanceModel>();
|
||||
_energyModel = EnergyBilanceModel();
|
||||
});group('[Location Model]', () {
|
||||
//test('[Model] Check individual values', () async {
|
||||
_locationModel = Location(
|
||||
city: 'London',
|
||||
countryName: 'England',
|
||||
country: 'England',
|
||||
currency: 'GBP',
|
||||
ip: '',
|
||||
inEu: true,
|
||||
languages: 'EN',
|
||||
);// BEGIN TESTS....
|
||||
expect(_locationModel.city, 'London');expect(_locationModel.countryName.runtimeType, equals(String));expect(_locationModel.country, isNotNull);expect(_locationModel.ip, isEmpty);expect(_locationModel.inEu, isTrue);expect(_locationModel.languages, contains('EN'));expect(_locationModel.currency, startsWith('G'));expect(_locationModel.country, matches('England'));
|
||||
});}
|
Loading…
Reference in New Issue