Skip to content

Commit c8f365f

Browse files
committed
Add invite system
1 parent ee7e084 commit c8f365f

10 files changed

Lines changed: 481 additions & 80 deletions

File tree

lib/components/predefined_spacing.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class PredefinedSpacing extends StatelessWidget {
66
static EdgeInsets paddingExtraSmall() => EdgeInsets.all(5);
77
static EdgeInsets paddingSmall() => EdgeInsets.all(10);
88
static EdgeInsets paddingMedium() => EdgeInsets.all(15);
9+
static EdgeInsets paddingLarge() => EdgeInsets.all(30);
910
static EdgeInsets paddingExtraLarge() => EdgeInsets.all(40);
1011

1112
@override

lib/screens/screen_selector.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:shock_alarm_app/components/page_padding.dart';
77
import 'package:shock_alarm_app/main.dart';
88
import 'package:shock_alarm_app/screens/shockers/shock_screen_selector.dart';
99
import 'package:shock_alarm_app/screens/shockers/individual/shockers.dart';
10+
import 'package:shock_alarm_app/screens/user_shares/user_share_screen.dart';
1011
import 'package:shock_alarm_app/services/openshock.dart';
1112
import '../services/alarm_list_manager.dart';
1213
import 'alarms/alarms.dart';
@@ -53,7 +54,7 @@ class ScreenSelectorScreenState extends State<ScreenSelectorScreen> {
5354

5455
screens = [
5556
if (supportsAlarms) AlarmsScreen(manager: manager),
56-
ShareLinksScreen(),
57+
UserShareScreen(),
5758
ShockScreenSelector(manager: manager),
5859
SettingsScreen(manager: manager),
5960
];
@@ -85,7 +86,7 @@ class ScreenSelectorScreenState extends State<ScreenSelectorScreen> {
8586
));
8687
},
8788
child: Icon(Icons.add)),
88-
ShareLinksScreen.getFloatingActionButton(manager, context, () {
89+
UserShareScreen.getFloatingActionButton(context, () {
8990
setState(() {});
9091
}),
9192
ShockerScreen.getFloatingActionButton(manager, context, () {

lib/screens/share_links/share_links.dart

Lines changed: 3 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -113,65 +113,16 @@ class ShareLinksScreen extends StatefulWidget {
113113

114114
@override
115115
State<StatefulWidget> createState() => ShareLinksScreenState();
116-
117-
static getFloatingActionButton(
118-
AlarmListManager manager, BuildContext context, Function reloadState) {
119-
return FloatingActionButton(
120-
onPressed: () {
121-
if(!AlarmListManager.supportsWs()) {
122-
if (!manager.hasValidAccount()) {
123-
ErrorDialog.show("Not logged in",
124-
"Login to OpenShock to create a Share Link. To do this visit the settings page.");
125-
return;
126-
}
127-
showDialog(context: context, builder: (builder) => ShareLinkCreationDialog());
128-
}
129-
showDialog(
130-
context: context,
131-
builder: (context) => AlertDialog.adaptive(
132-
title: Text("Add Share Link"),
133-
content: Text("What do you want to do?"),
134-
actions: <Widget>[
135-
TextButton(
136-
onPressed: () async {
137-
Navigator.of(context).pop();
138-
await SettingsScreen.showShareLinkPopup();
139-
InfoDialog.show("Share Link Info",
140-
"Share links you add to ShockAlarm are shown in the settings tab. From there you can see which ones you added and remove them if you don't need them anymore.\n\nThe shockers from the share link are shown in the devices tab.");
141-
},
142-
child: Text("Add existing share link")),
143-
TextButton(
144-
onPressed: () async {
145-
Navigator.of(context).pop();
146-
if (!manager.hasValidAccount()) {
147-
ErrorDialog.show("Not logged in",
148-
"Login to OpenShock to create a Share Link. To do this visit the settings page.");
149-
return;
150-
}
151-
showDialog(
152-
context: context,
153-
builder: (context) => ShareLinkCreationDialog());
154-
},
155-
child: Text("Create new share link")),
156-
TextButton(
157-
onPressed: () {
158-
Navigator.of(context).pop();
159-
},
160-
child: Text("Cancel")),
161-
],
162-
),
163-
);
164-
},
165-
child: Icon(Icons.add));
166-
}
167116
}
168117

169118
class ShareLinksScreenState extends State<ShareLinksScreen> {
170119
bool initialLoading = false;
171120

172121
Future loadShares() async {
173122
await AlarmListManager.getInstance().updateShareLinks();
123+
if(!mounted) return;
174124
setState(() {
125+
if(!mounted) return;
175126
initialLoading = false;
176127
});
177128
}
@@ -184,6 +135,7 @@ class ShareLinksScreenState extends State<ShareLinksScreen> {
184135
loadShares();
185136
}
186137
AlarmListManager.getInstance().reloadAllMethod = () {
138+
if(!mounted) return;
187139
setState(() {});
188140
};
189141
super.initState();

lib/screens/tools/bottom/bottom.dart

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import 'package:shock_alarm_app/components/constrained_container.dart';
33
import 'package:shock_alarm_app/components/page_padding.dart';
44
import 'package:shock_alarm_app/components/predefined_spacing.dart';
5+
import 'package:shock_alarm_app/dialogs/loading_dialog.dart';
56
import 'package:shock_alarm_app/screens/logs/shocker_log_entry.dart';
67
import 'package:shock_alarm_app/dialogs/error_dialog.dart';
78
import 'package:shock_alarm_app/screens/tools/bottom/shocker_unpause_dialog.dart';
@@ -106,9 +107,22 @@ class _BottomScreenState extends State<BottomScreen>
106107
}
107108

108109
void unpause() async {
109-
List<Shocker> toUnpause = [];
110110
await showDialog(
111-
context: context, builder: (context) => ShockerUnpauseDialog());
111+
context: context, builder: (context) => ShockerSelectDialog("Select shockers to unpause", (shockers) async {
112+
LoadingDialog.show("Unpausing shockers");
113+
for (var shocker in shockers) {
114+
String? error = await OpenShockClient().setPauseStateOfShocker(
115+
shocker, AlarmListManager.getInstance(), false);
116+
if (error != null) {
117+
Navigator.of(context).pop();
118+
ErrorDialog.show(
119+
"Error unpausing shocker ${shocker.name}", error);
120+
return;
121+
}
122+
}
123+
Navigator.of(context).pop();
124+
Navigator.of(context).pop();
125+
}, "Unpause"));
112126
setState(() {});
113127
}
114128

lib/screens/tools/bottom/shocker_unpause_dialog.dart

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,26 @@ import 'package:shock_alarm_app/screens/tools/bottom/bottom.dart';
66
import 'package:shock_alarm_app/services/alarm_list_manager.dart';
77
import 'package:shock_alarm_app/services/openshock.dart';
88

9-
class ShockerUnpauseDialog extends StatefulWidget {
10-
const ShockerUnpauseDialog({Key? key}) : super(key: key);
9+
class ShockerSelectDialog extends StatefulWidget {
10+
String title;
11+
Function(List<Shocker>) confirmCallback;
12+
String buttonText;
13+
14+
ShockerSelectDialog(this.title, this.confirmCallback, this.buttonText, {Key? key}) : super(key: key);
15+
1116

1217
@override
13-
State<StatefulWidget> createState() => ShockerUnpauseDialogState();
18+
State<StatefulWidget> createState() => _ShockerSelectDialog();
1419
}
1520

16-
class ShockerUnpauseDialogState extends State<ShockerUnpauseDialog> {
21+
class _ShockerSelectDialog extends State<ShockerSelectDialog> {
1722
List<Shocker> toUnpause = [];
1823

1924
@override
2025
Widget build(BuildContext context) {
2126
ThemeData t = Theme.of(context);
2227
return AlertDialog.adaptive(
23-
title: Text("Select shockers to unpause"),
28+
title: Text(widget.title),
2429
content: Column(
2530
mainAxisSize: MainAxisSize.min,
2631
children: AlarmListManager.getInstance()
@@ -51,21 +56,9 @@ class ShockerUnpauseDialogState extends State<ShockerUnpauseDialog> {
5156
child: Text("Cancel")),
5257
TextButton(
5358
onPressed: () async {
54-
LoadingDialog.show("Unpausing shockers");
55-
for (var shocker in toUnpause) {
56-
String? error = await OpenShockClient().setPauseStateOfShocker(
57-
shocker, AlarmListManager.getInstance(), false);
58-
if (error != null) {
59-
Navigator.of(context).pop();
60-
ErrorDialog.show(
61-
"Error unpausing shocker ${shocker.name}", error);
62-
return;
63-
}
64-
}
65-
Navigator.of(context).pop();
66-
Navigator.of(context).pop();
59+
widget.confirmCallback(toUnpause);
6760
},
68-
child: Text("Unpause")),
61+
child: Text(widget.buttonText)),
6962
],
7063
);
7164
}

lib/screens/user_shares/create_user_share_dialog.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class _CreateUserShareDialog extends State<CreateUserShareDialog> {
2828
TextEditingController usernameController = TextEditingController();
2929

3030
void searchUser() async {
31-
widget.user = await OpenShockClient().getUserByUsername(usernameController.text);
31+
widget.user = await OpenShockClient().getUserByUsername(usernameController.text.trim(), widget.shockersToShare.first.apiTokenId);
3232
if(widget.user == null) {
3333
ErrorDialog.show("User not found", "Couldn't find a user by the name '${usernameController.text}'");
3434
}

0 commit comments

Comments
 (0)