Compare commits

..

1 Commits

Author SHA1 Message Date
9181aaf830 Merge branch 'development' 2020-04-02 00:54:09 +02:00
11 changed files with 46 additions and 207 deletions

View File

@ -5,10 +5,9 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
class AddExercise extends StatefulWidget{ class AddExercise extends StatefulWidget{
String token;
int workoutId; int workoutId;
AddExercise(this.token, this.workoutId); AddExercise(this.workoutId);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
@ -28,7 +27,7 @@ class AddExerciseState extends State<AddExercise>{
void speichern(String id) async { void speichern(String id) async {
if(this.anzahl != 0){ if(this.anzahl != 0){
var url = Uri.parse("http://10.16.17.18/api/add_exercise_to_workout.php?token=" + super.widget.token); var url = Uri.parse("http://10.16.17.18/api/add_exercise_to_workout.php?token=satbwertwhbertnwertwertghwertgwertg");
var request = http.MultipartRequest("post", url); var request = http.MultipartRequest("post", url);
Map<String, String> test = { Map<String, String> test = {
"workout": this.widget.workoutId.toString(), "workout": this.widget.workoutId.toString(),

View File

@ -1,14 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shared_preferences/shared_preferences.dart';
class CustomDrawer extends StatelessWidget{ class CustomDrawer extends StatelessWidget{
void logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove("api_key");
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// TODO: implement build // TODO: implement build
@ -48,9 +40,7 @@ class CustomDrawer extends StatelessWidget{
ListTile( ListTile(
leading: Icon(Icons.exit_to_app), leading: Icon(Icons.exit_to_app),
title: Text('Logout'), title: Text('Logout'),
onTap: () { onTap: () => {Navigator.of(context).pop()},
logout();
},
), ),
], ],
), ),

View File

@ -6,11 +6,10 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
class ExerciseView extends StatefulWidget{ class ExerciseView extends StatefulWidget{
String token;
String title; String title;
String id; String id;
ExerciseView(this.token, this.title, this.id); ExerciseView(this.title, this.id);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
@ -25,7 +24,7 @@ class ExerciseViewState extends State<ExerciseView>{
Future<List> getWorkouts() async { Future<List> getWorkouts() async {
var response = await http.get( var response = await http.get(
"http://10.16.17.18/api/workout.php?token=" + super.widget.token + "&workout="+this.widget.id, "http://10.16.17.18/api/workout.php?token=satbwertwhbertnwertwertghwertgwertg&workout="+this.widget.id,
headers: { headers: {
"Accept": "application/json" "Accept": "application/json"
} }
@ -76,7 +75,7 @@ class ExerciseViewState extends State<ExerciseView>{
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: (){ onPressed: (){
Navigator.push(context, MaterialPageRoute( Navigator.push(context, MaterialPageRoute(
builder: (context) => AddExercise(super.widget.token, int.parse(this.widget.id)) builder: (context) => AddExercise(int.parse(this.widget.id))
)); ));
}, },
child: Icon(Icons.add), child: Icon(Icons.add),

View File

@ -2,19 +2,7 @@ import 'package:fitnessapp/Views/custom_drawer.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'workouts_view.dart'; import 'workouts_view.dart';
class HomescreenView extends StatefulWidget{ class HomescreenView extends StatelessWidget{
String token;
HomescreenView(this.token);
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return new HomescreenViewState();
}
}
class HomescreenViewState extends State<HomescreenView>{
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// TODO: implement build // TODO: implement build
@ -23,7 +11,7 @@ class HomescreenViewState extends State<HomescreenView>{
appBar: AppBar( appBar: AppBar(
title: Text("Workouts"), title: Text("Workouts"),
), ),
body: WorkoutsView(super.widget.token), body: WorkoutsView(),
); );
} }
} }

View File

@ -1,96 +0,0 @@
import 'package:fitnessapp/Views/custom_drawer.dart';
import 'package:fitnessapp/Views/homescreen.dart';
import 'package:flutter/material.dart';
import 'workouts_view.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';
class LoginView extends StatefulWidget{
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return new _LoginViewState();
}
}
class _LoginViewState extends State<LoginView>{
final usernameController = TextEditingController();
final passwordController = TextEditingController();
final _formKey = GlobalKey<FormState>();
void _saveToken(String token) async{
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("api_key", token);
String test = await prefs.getString("api_key");
print(test);
}
void _getToken() async {
var url = Uri.parse("http://10.16.17.18/api/login.php");
var request = http.MultipartRequest("post", url);
Map<String, String> test = {
"username": usernameController.value.text,
"password": passwordController.value.text
};
request.fields.addAll(test);
var response = await request.send();
if(response.statusCode == 200){
String text = await response.stream.bytesToString();
await _saveToken(text);
Navigator.push(context, MaterialPageRoute(
builder: (context) => HomescreenView(text)
));
}
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("Login"),
),
body: Form(
key: _formKey,
child: Column(
children: <Widget>[
TextFormField(
decoration: InputDecoration(
labelText: "username"
),
controller: usernameController,
validator: (value){
if(value.isEmpty){
return "bitte gib einen Nutzername ein";
}
},
),
TextFormField(
decoration: InputDecoration(
labelText: "password"
),
controller: passwordController,
validator: (value){
if(value.isEmpty){
return "bitte gib Passwort ein";
}
},
obscureText: true,
),
RaisedButton(
child: Text("Login"),
onPressed: (){
if(_formKey.currentState.validate()){
_getToken();
}
},
)
],
),
)
);
}
}

View File

@ -5,10 +5,6 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
class NewWorkoutView extends StatefulWidget{ class NewWorkoutView extends StatefulWidget{
String token;
NewWorkoutView(this.token);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
return new NewWorkoutViewState(); return new NewWorkoutViewState();
@ -26,7 +22,10 @@ class NewWorkoutViewState extends State<NewWorkoutView>{
void speichern() async { void speichern() async {
if(this.name != ''){ if(this.name != ''){
var url = Uri.parse("http://10.16.17.18/api/new_workout.php?token=" + super.widget.token); FormData data = new FormData.fromMap({
"name": "Hallo Welt"
});
var url = Uri.parse("http://10.16.17.18/api/new_workout.php?token=satbwertwhbertnwertwertghwertgwertg");
var request = http.MultipartRequest("post", url); var request = http.MultipartRequest("post", url);
Map<String, String> test = {"name": name}; Map<String, String> test = {"name": name};
request.fields.addAll(test); request.fields.addAll(test);
@ -39,7 +38,7 @@ class NewWorkoutViewState extends State<NewWorkoutView>{
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text("Neues Workout"), title: Text("Füge eine Übung hinzu"),
), ),
body: Column( body: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
@ -47,6 +46,7 @@ class NewWorkoutViewState extends State<NewWorkoutView>{
Padding( Padding(
padding: EdgeInsets.all(8), padding: EdgeInsets.all(8),
child: TextField( child: TextField(
keyboardType: TextInputType.number,
autocorrect: true, autocorrect: true,
decoration: InputDecoration( decoration: InputDecoration(
border: OutlineInputBorder(), border: OutlineInputBorder(),

View File

@ -6,11 +6,6 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
class WorkoutsView extends StatefulWidget{ class WorkoutsView extends StatefulWidget{
String token;
WorkoutsView(this.token);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
// TODO: implement createState // TODO: implement createState
@ -23,7 +18,7 @@ class WorkoutsViewState extends State<WorkoutsView>{
Future<List> getWorkouts() async { Future<List> getWorkouts() async {
var response = await http.get( var response = await http.get(
"http://10.16.17.18/api/index.php?token=" + super.widget.token, "http://10.16.17.18/api/index.php?token=satbwertwhbertnwertwertghwertgwertg",
headers: { headers: {
"Accept": "application/json" "Accept": "application/json"
} }
@ -54,7 +49,7 @@ class WorkoutsViewState extends State<WorkoutsView>{
subtitle: Text(data[index]['creator']), subtitle: Text(data[index]['creator']),
onTap: (){ onTap: (){
Navigator.push(context, MaterialPageRoute( Navigator.push(context, MaterialPageRoute(
builder: (context) => ExerciseView(super.widget.token, data[index]['title'], data[index]['id']) builder: (context) => ExerciseView(data[index]['title'], data[index]['id'])
)); ));
}, },
); );
@ -65,7 +60,7 @@ class WorkoutsViewState extends State<WorkoutsView>{
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: (){ onPressed: (){
Navigator.push(context, MaterialPageRoute( Navigator.push(context, MaterialPageRoute(
builder: (context) => NewWorkoutView(super.widget.token) builder: (context) => NewWorkoutView()
)); ));
}, },
child: Icon(Icons.add), child: Icon(Icons.add),

View File

@ -1,15 +1,14 @@
import 'package:fitnessapp/Views/homescreen.dart'; import 'package:fitnessapp/Views/homescreen.dart';
import 'package:fitnessapp/Views/login_view.dart';
import 'package:fitnessapp/Views/new_workout_view.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'dart:async'; import 'dart:async';
import 'package:shared_preferences/shared_preferences.dart';
void main() async { void main() => runApp(MyApp());
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance(); class MyApp extends StatelessWidget {
String apiKey = await prefs.getString('api_key'); // This widget is the root of your application.
runApp(MaterialApp( @override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo', title: 'Flutter Demo',
theme: ThemeData( theme: ThemeData(
// Define the default brightness and colors. // Define the default brightness and colors.
@ -28,7 +27,7 @@ void main() async {
body1: TextStyle(fontSize: 14.0, fontFamily: 'Verdana'), body1: TextStyle(fontSize: 14.0, fontFamily: 'Verdana'),
), ),
), ),
home: apiKey == null ? LoginView() : HomescreenView(apiKey), home: HomescreenView(),
)
); );
} }
}

View File

@ -81,11 +81,6 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
@ -134,7 +129,7 @@ packages:
name: pedantic name: pedantic
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.9.0" version: "1.8.0+1"
petitparser: petitparser:
dependency: transitive dependency: transitive
description: description:
@ -149,34 +144,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.5" version: "2.0.5"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.6+3"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+6"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2+4"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -247,4 +214,3 @@ packages:
version: "3.5.0" version: "3.5.0"
sdks: sdks:
dart: ">2.4.0 <3.0.0" dart: ">2.4.0 <3.0.0"
flutter: ">=1.12.13+hotfix.4 <2.0.0"

View File

@ -25,7 +25,6 @@ dependencies:
cupertino_icons: ^0.1.2 cupertino_icons: ^0.1.2
http: http:
dio: dio:
shared_preferences:
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

View File

@ -13,7 +13,7 @@ import 'package:fitnessapp/main.dart';
void main() { void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async { testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame. // Build our app and trigger a frame.
/*await tester.pumpWidget(MyApp()); await tester.pumpWidget(MyApp());
// Verify that our counter starts at 0. // Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget); expect(find.text('0'), findsOneWidget);
@ -25,6 +25,6 @@ void main() {
// Verify that our counter has incremented. // Verify that our counter has incremented.
expect(find.text('0'), findsNothing); expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);*/ expect(find.text('1'), findsOneWidget);
}); });
} }