mirror of
https://github.com/johrpan/musicus_mobile.git
synced 2025-10-25 19:27:24 +02:00
mobile: Fine tune account settings
If the user enters something into the login fields, the values will be copied to the registration screen. Also, the password is required to delete an account now.
This commit is contained in:
parent
0e10edb87f
commit
5ffecb97c6
3 changed files with 127 additions and 25 deletions
|
|
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:musicus_client/musicus_client.dart';
|
||||
import 'package:musicus_common/musicus_common.dart';
|
||||
|
||||
import 'delete_account.dart';
|
||||
import 'email.dart';
|
||||
import 'password.dart';
|
||||
import 'register.dart';
|
||||
|
|
@ -114,30 +115,11 @@ class _AccountSettingsScreenState extends State<AccountSettingsScreen> {
|
|||
),
|
||||
ListTile(
|
||||
title: Text('Delete this account'),
|
||||
onTap: () async {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text('Delete account'),
|
||||
content: Text(
|
||||
'Do you really want to delete the account with the '
|
||||
'username $_username?'),
|
||||
actions: <Widget>[
|
||||
FlatButton(
|
||||
child: Text('DELETE'),
|
||||
onPressed: () async {
|
||||
await _backend.client.deleteAccount();
|
||||
await _backend.settings.clearAccount();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
FlatButton(
|
||||
child: Text('CANCEL'),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
],
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => DeleteAccountScreen(),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
|
@ -199,7 +181,10 @@ class _AccountSettingsScreenState extends State<AccountSettingsScreen> {
|
|||
Navigator.pushReplacement(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => RegisterScreen(),
|
||||
builder: (context) => RegisterScreen(
|
||||
username: _usernameController.text,
|
||||
password: _passwordController.text,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
|
|
|||
96
mobile/lib/screens/delete_account.dart
Normal file
96
mobile/lib/screens/delete_account.dart
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:musicus_common/musicus_common.dart';
|
||||
|
||||
class DeleteAccountScreen extends StatefulWidget {
|
||||
@override
|
||||
_DeleteAccountScreenState createState() => _DeleteAccountScreenState();
|
||||
}
|
||||
|
||||
class _DeleteAccountScreenState extends State<DeleteAccountScreen> {
|
||||
final _passwordController = TextEditingController();
|
||||
|
||||
bool _loading = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Delete account'),
|
||||
actions: <Widget>[
|
||||
Builder(
|
||||
builder: (context) {
|
||||
if (_loading) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Center(
|
||||
child: SizedBox(
|
||||
width: 24.0,
|
||||
height: 24.0,
|
||||
child: CircularProgressIndicator(
|
||||
strokeWidth: 2.0,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return FlatButton(
|
||||
onPressed: () async {
|
||||
final backend = MusicusBackend.of(context);
|
||||
|
||||
if (_passwordController.text ==
|
||||
backend.settings.account.value.password) {
|
||||
setState(() {
|
||||
_loading = true;
|
||||
});
|
||||
|
||||
await backend.client.deleteAccount();
|
||||
await backend.settings.clearAccount();
|
||||
|
||||
setState(() {
|
||||
_loading = false;
|
||||
});
|
||||
|
||||
Navigator.pop(context);
|
||||
} else {
|
||||
Scaffold.of(context).showSnackBar(SnackBar(
|
||||
content: Text('Wrong password'),
|
||||
));
|
||||
}
|
||||
},
|
||||
child: Text('DELETE'),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
body: ListView(
|
||||
children: <Widget>[
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 16.0,
|
||||
right: 16.0,
|
||||
top: 16.0,
|
||||
bottom: 8.0,
|
||||
),
|
||||
child: Text(
|
||||
'If you really want to delete your account, enter your password '
|
||||
'below.',
|
||||
style: Theme.of(context).textTheme.subtitle1,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: TextField(
|
||||
controller: _passwordController,
|
||||
obscureText: true,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'Password',
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,14 @@ import 'package:musicus_common/musicus_common.dart';
|
|||
|
||||
/// A screen for creating a new Musicus account.
|
||||
class RegisterScreen extends StatefulWidget {
|
||||
final String username;
|
||||
final String password;
|
||||
|
||||
RegisterScreen({
|
||||
this.username,
|
||||
this.password,
|
||||
});
|
||||
|
||||
@override
|
||||
_RegisterScreenState createState() => _RegisterScreenState();
|
||||
}
|
||||
|
|
@ -16,6 +24,19 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||
|
||||
bool _loading = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
if (widget.username != null) {
|
||||
nameController.text = widget.username;
|
||||
}
|
||||
|
||||
if (widget.password != null) {
|
||||
passwordController.text = widget.password;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final backend = MusicusBackend.of(context);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue