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