refactor: MVC sign up view
parent
2362e9f273
commit
6b9f1476db
@ -0,0 +1,71 @@
|
||||
import 'package:adaptive_page_layout/adaptive_page_layout.dart';
|
||||
import 'package:famedlysdk/famedlysdk.dart';
|
||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
||||
import 'package:fluffychat/views/sign_up_view.dart';
|
||||
|
||||
import 'package:fluffychat/views/widgets/matrix.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
|
||||
class SignUp extends StatefulWidget {
|
||||
@override
|
||||
SignUpController createState() => SignUpController();
|
||||
}
|
||||
|
||||
class SignUpController extends State<SignUp> {
|
||||
final TextEditingController usernameController = TextEditingController();
|
||||
String usernameError;
|
||||
bool loading = false;
|
||||
MatrixFile avatar;
|
||||
|
||||
void setAvatarAction() async {
|
||||
var file =
|
||||
await FilePickerCross.importFromStorage(type: FileTypeCross.image);
|
||||
if (file != null) {
|
||||
setState(
|
||||
() => avatar = MatrixFile(
|
||||
bytes: file.toUint8List(),
|
||||
name: file.fileName,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void resetAvatarAction() => setState(() => avatar = null);
|
||||
|
||||
void signUpAction([_]) async {
|
||||
var matrix = Matrix.of(context);
|
||||
if (usernameController.text.isEmpty) {
|
||||
setState(() => usernameError = L10n.of(context).pleaseChooseAUsername);
|
||||
} else {
|
||||
setState(() => usernameError = null);
|
||||
}
|
||||
|
||||
if (usernameController.text.isEmpty) {
|
||||
return;
|
||||
}
|
||||
setState(() => loading = true);
|
||||
|
||||
final preferredUsername =
|
||||
usernameController.text.toLowerCase().trim().replaceAll(' ', '-');
|
||||
|
||||
try {
|
||||
await matrix.client.usernameAvailable(preferredUsername);
|
||||
} on MatrixException catch (exception) {
|
||||
setState(() => usernameError = exception.errorMessage);
|
||||
return setState(() => loading = false);
|
||||
} catch (exception) {
|
||||
setState(() => usernameError = exception.toString());
|
||||
return setState(() => loading = false);
|
||||
}
|
||||
setState(() => loading = false);
|
||||
await AdaptivePageLayout.of(context).pushNamed(
|
||||
'/signup/password/${Uri.encodeComponent(preferredUsername)}/${Uri.encodeComponent(usernameController.text)}',
|
||||
arguments: avatar,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => SignUpView(this);
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
import 'package:fluffychat/controllers/sign_up_controller.dart';
|
||||
import 'package:fluffychat/main.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Test if the widget can be created', (WidgetTester tester) async {
|
||||
await tester.pumpWidget(FluffyChatApp(testWidget: SignUp()));
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue