Made google-play login working again, and fixed numerous bugs
All checks were successful
update version / increment-build-number (push) Successful in 9s

This commit is contained in:
2023-08-02 20:56:02 +02:00
parent 2edec5ca3c
commit 62ae6a6e3c
19 changed files with 38 additions and 211 deletions

View File

@ -1,59 +0,0 @@
import 'package:flutter/material.dart';
class AddTimerDialog extends StatefulWidget {
const AddTimerDialog({Key? key}) : super(key: key);
@override
State<AddTimerDialog> createState() => _AddTimerDialogState();
}
class _AddTimerDialogState extends State<AddTimerDialog> {
DateTime selected = DateTime.now().add(const Duration(days: 1));
@override
Widget build(BuildContext context) {
return AlertDialog(
title: const Text("Timer hinzufügen"),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
const TextField(
decoration: InputDecoration(
labelText: "Timer Name"
),
),
TextButton(onPressed: () async {
DateTime? selectedDate = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime.now(), lastDate: DateTime.now().add(const Duration(days: 365 * 10)));
if(selectedDate == null) return;
setState(() {
selected = selectedDate;
});
}, child: const Text("Datum auswählen")),
TextButton(onPressed: () async {
TimeOfDay? selectedTime = await showTimePicker(context: context, initialTime: TimeOfDay.fromDateTime(DateTime.now()));
if(selectedTime == null) return;
setState(() {
selected = selected.copyWith(hour: selectedTime.hour, minute: selectedTime.minute);
});
}, child: const Text("Zeit auswählen")),
Text(selected.toString())
],
),
actions: [
TextButton(onPressed: () {
Navigator.of(context).pop();
}, child: const Text("Abbrechen")),
TextButton(onPressed: () {
// TODO add timer
}, child: const Text("Hinzufügen")),
],
);
}
}

View File

@ -1,64 +0,0 @@
import 'dart:async';
import 'package:animated_digit/animated_digit.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class AnimatedTime extends StatefulWidget {
final Duration Function() callback;
const AnimatedTime({Key? key, required this.callback}) : super(key: key);
@override
State<AnimatedTime> createState() => _AnimatedTimeState();
}
class _AnimatedTimeState extends State<AnimatedTime> {
Duration current = Duration.zero;
late Timer timer;
@override
void initState() {
super.initState();
timer = Timer.periodic(const Duration(seconds: 1), (Timer t) => update());
current = widget.callback();
}
void update() {
setState(() {
current = widget.callback();
});
}
@override
Widget build(BuildContext context) {
return Row(
children: [
const Text("Noch "),
buildWidget(current.inDays),
const Text(" Tage, "),
buildWidget(current.inHours > 24 ? current.inHours - current.inDays * 24 : current.inHours),
const Text(":"),
buildWidget(current.inMinutes > 60 ? current.inMinutes - current.inHours * 60 : current.inMinutes),
const Text(":"),
buildWidget(current.inSeconds > 60 ? current.inSeconds - current.inMinutes * 60 : current.inSeconds),
],
);
}
AnimatedDigitWidget buildWidget(int value) {
return AnimatedDigitWidget(
value: value,
duration: const Duration(milliseconds: 100),
textStyle: TextStyle(
fontSize: 15,
color: Theme.of(context).colorScheme.onSurface,
),
);
}
@override
void dispose() {
timer.cancel();
super.dispose();
}
}

View File

@ -1,56 +0,0 @@
import 'package:flutter/material.dart';
import 'addTimerDialog.dart';
import 'timer.dart';
class Countdown extends StatefulWidget {
const Countdown({Key? key}) : super(key: key);
@override
State<Countdown> createState() => _CountdownState();
}
class _CountdownState extends State<Countdown> {
List<Timer> timers = List.empty(growable: true);
@override
void initState() {
super.initState();
timers.add(Timer(key: const Key("1"), target: DateTime.now().add(const Duration(seconds: 20)), label: "Countdown 1"));
timers.add(Timer(key: const Key("2"), author: "goldbaja", target: DateTime.now().add(const Duration(days: 20)), label: "Sommerferien"));
timers.add(Timer(key: const Key("3"), target: DateTime.now().add(const Duration(hours: 20)), label: "Joa"));
timers.sort((a, b) => a.target.compareTo(b.target));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Countdown"),
actions: [
IconButton(onPressed: () {
showDialog(context: context, builder: (context) => const AddTimerDialog());
}, icon: const Icon(Icons.add)),
],
),
body: ReorderableListView(
shrinkWrap: true,
footer: Container(
padding: const EdgeInsets.only(top: 30),
child: Center(
child: Text("Halte und Ziehe ein Element um es umzusortieren.", style: TextStyle(color: Theme.of(context).disabledColor)),
),
),
onReorder: (int oldIndex, int newIndex) { },
children: timers,
),
// body: ListView.separated(
// itemBuilder: (context, index) => timers[index],
// separatorBuilder: (context, index) => const Divider(),
// itemCount: timers.length
// )
);
}
}

View File

@ -1,54 +0,0 @@
import 'package:flutter/material.dart';
import 'animatedTime.dart';
class Timer extends StatefulWidget {
final DateTime target;
final String? author;
final String label;
const Timer({Key? key, required this.target, this.author, required this.label}) : super(key: key);
@override
State<Timer> createState() => _TimerState();
}
class _TimerState extends State<Timer> {
late bool isLocal;
@override
void initState() {
super.initState();
isLocal = widget.author == null;
}
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.timer),
title: AnimatedTime(
callback: () {
if(widget.target.isBefore(DateTime.now())) return Duration.zero;
return widget.target.difference(DateTime.now());
},
),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
if(!isLocal) Row(
children: [
const Text("5"),
IconButton(onPressed: () {
}, icon: const Icon(Icons.thumb_up_outlined)),
],
),
IconButton(onPressed: () {
}, icon: const Icon(Icons.star_outline))
],
),
subtitle: Text("${widget.label}${!isLocal ? "\ngeteilt von ${widget.author}" : ""}"),
);
}
}

View File

@ -11,7 +11,7 @@ import '../../../../widget/confirmDialog.dart';
import '../../../../widget/debug/debugTile.dart';
import '../../../../widget/loadingSpinner.dart';
import '../../../../widget/placeholderView.dart';
import '../countdown/animatedTime.dart';
import '../../../../widget/animatedTime.dart';
class Holidays extends StatefulWidget {
const Holidays({super.key});

View File

@ -5,7 +5,6 @@ import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart';
import '../../../widget/ListItem.dart';
import '../../settings/settings.dart';
import 'countdown/countdown.dart';
import 'gradeAverages/gradeAverage.dart';
import 'holidays/holidays.dart';
import 'message/message.dart';
@ -29,7 +28,6 @@ class Overhang extends StatelessWidget {
ListItemNavigator(icon: Icons.room, text: "Raumplan", target: Roomplan()),
ListItemNavigator(icon: Icons.calculate, text: "Notendurschnittsrechner", target: GradeAverage()),
ListItemNavigator(icon: Icons.calendar_month, text: "Schulferien", target: Holidays()),
if(!kReleaseMode) ListItemNavigator(icon: Icons.timer, text: "Countdown", target: Countdown()),
],
),
);

View File

@ -2,7 +2,7 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:marianum_mobile/model/timetable/endpointData.dart';
import 'package:marianum_mobile/model/endpointData.dart';
import 'package:url_launcher/url_launcher_string.dart';
import '../../../api/marianumcloud/talk/chat/getChatResponse.dart';

View File

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/model/timetable/endpointData.dart';
import 'package:marianum_mobile/model/endpointData.dart';
import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart';
import 'package:shared_preferences/shared_preferences.dart';

View File

@ -1,7 +1,7 @@
import 'package:async/async.dart';
import 'package:flutter/material.dart';
import 'package:marianum_mobile/model/timetable/endpointData.dart';
import 'package:marianum_mobile/model/endpointData.dart';
import '../../../api/marianumcloud/autocomplete/autocompleteApi.dart';
import '../../../api/marianumcloud/autocomplete/autocompleteResponse.dart';