mirror of
				https://gitlab.com/famedly/fluffychat.git
				synced 2025-11-04 06:17:26 +01:00 
			
		
		
		
	refactor: UIA registering
This commit is contained in:
		
							parent
							
								
									6c876ab2ac
								
							
						
					
					
						commit
						48bf1169bc
					
				@ -1,4 +1,3 @@
 | 
			
		||||
import 'package:adaptive_dialog/adaptive_dialog.dart';
 | 
			
		||||
import 'package:adaptive_page_layout/adaptive_page_layout.dart';
 | 
			
		||||
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
@ -7,7 +6,6 @@ import 'package:fluffychat/views/ui/sign_up_password_ui.dart';
 | 
			
		||||
import 'package:fluffychat/views/widgets/matrix.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
 | 
			
		||||
import 'package:url_launcher/url_launcher.dart';
 | 
			
		||||
import '../utils/platform_infos.dart';
 | 
			
		||||
 | 
			
		||||
class SignUpPassword extends StatefulWidget {
 | 
			
		||||
@ -22,13 +20,12 @@ class SignUpPassword extends StatefulWidget {
 | 
			
		||||
class SignUpPasswordController extends State<SignUpPassword> {
 | 
			
		||||
  final TextEditingController passwordController = TextEditingController();
 | 
			
		||||
  String passwordError;
 | 
			
		||||
  String _lastAuthWebViewStage;
 | 
			
		||||
  bool loading = false;
 | 
			
		||||
  bool showPassword = true;
 | 
			
		||||
 | 
			
		||||
  void toggleShowPassword() => setState(() => showPassword = !showPassword);
 | 
			
		||||
 | 
			
		||||
  void signUpAction({AuthenticationData auth}) async {
 | 
			
		||||
  void signUpAction() async {
 | 
			
		||||
    final matrix = Matrix.of(context);
 | 
			
		||||
    if (passwordController.text.isEmpty) {
 | 
			
		||||
      setState(() => passwordError = L10n.of(context).pleaseEnterYourPassword);
 | 
			
		||||
@ -43,65 +40,13 @@ class SignUpPasswordController extends State<SignUpPassword> {
 | 
			
		||||
    try {
 | 
			
		||||
      setState(() => loading = true);
 | 
			
		||||
      final waitForLogin = matrix.client.onLoginStateChanged.stream.first;
 | 
			
		||||
      await matrix.client.register(
 | 
			
		||||
        username: widget.username,
 | 
			
		||||
        password: passwordController.text,
 | 
			
		||||
        initialDeviceDisplayName: PlatformInfos.clientName,
 | 
			
		||||
        auth: auth,
 | 
			
		||||
      );
 | 
			
		||||
      await matrix.client.uiaRequestBackground((auth) => matrix.client.register(
 | 
			
		||||
            username: widget.username,
 | 
			
		||||
            password: passwordController.text,
 | 
			
		||||
            initialDeviceDisplayName: PlatformInfos.clientName,
 | 
			
		||||
            auth: auth,
 | 
			
		||||
          ));
 | 
			
		||||
      await waitForLogin;
 | 
			
		||||
    } on MatrixException catch (exception) {
 | 
			
		||||
      if (exception.requireAdditionalAuthentication) {
 | 
			
		||||
        final stages = exception.authenticationFlows.first.stages;
 | 
			
		||||
 | 
			
		||||
        final currentStage = exception.completedAuthenticationFlows == null
 | 
			
		||||
            ? stages.first
 | 
			
		||||
            : stages.firstWhere((stage) =>
 | 
			
		||||
                !exception.completedAuthenticationFlows.contains(stage) ??
 | 
			
		||||
                true);
 | 
			
		||||
 | 
			
		||||
        if (currentStage == 'm.login.dummy') {
 | 
			
		||||
          signUpAction(
 | 
			
		||||
            auth: AuthenticationData(
 | 
			
		||||
              type: currentStage,
 | 
			
		||||
              session: exception.session,
 | 
			
		||||
            ),
 | 
			
		||||
          );
 | 
			
		||||
        } else {
 | 
			
		||||
          if (_lastAuthWebViewStage == currentStage) {
 | 
			
		||||
            _lastAuthWebViewStage = null;
 | 
			
		||||
            setState(
 | 
			
		||||
                () => passwordError = L10n.of(context).oopsSomethingWentWrong);
 | 
			
		||||
            return setState(() => loading = false);
 | 
			
		||||
          }
 | 
			
		||||
          _lastAuthWebViewStage = currentStage;
 | 
			
		||||
          await launch(
 | 
			
		||||
            Matrix.of(context).client.homeserver.toString() +
 | 
			
		||||
                '/_matrix/client/r0/auth/$currentStage/fallback/web?session=${exception.session}',
 | 
			
		||||
          );
 | 
			
		||||
          if (OkCancelResult.ok ==
 | 
			
		||||
              await showOkCancelAlertDialog(
 | 
			
		||||
                message: L10n.of(context).pleaseFollowInstructionsOnWeb,
 | 
			
		||||
                context: context,
 | 
			
		||||
                okLabel: L10n.of(context).next,
 | 
			
		||||
                cancelLabel: L10n.of(context).cancel,
 | 
			
		||||
                useRootNavigator: false,
 | 
			
		||||
              )) {
 | 
			
		||||
            signUpAction(
 | 
			
		||||
              auth: AuthenticationData(session: exception.session),
 | 
			
		||||
            );
 | 
			
		||||
          } else {
 | 
			
		||||
            setState(() {
 | 
			
		||||
              loading = false;
 | 
			
		||||
              passwordError = null;
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        setState(() => passwordError = exception.errorMessage);
 | 
			
		||||
        return setState(() => loading = false);
 | 
			
		||||
      }
 | 
			
		||||
    } catch (exception) {
 | 
			
		||||
      setState(() => passwordError = exception.toString());
 | 
			
		||||
      return setState(() => loading = false);
 | 
			
		||||
 | 
			
		||||
@ -155,7 +155,7 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
 | 
			
		||||
        );
 | 
			
		||||
      default:
 | 
			
		||||
        await launch(
 | 
			
		||||
          Matrix.of(context).client.homeserver.toString() +
 | 
			
		||||
          client.homeserver.toString() +
 | 
			
		||||
              '/_matrix/client/r0/auth/$stage/fallback/web?session=${uiaRequest.session}',
 | 
			
		||||
        );
 | 
			
		||||
        if (OkCancelResult.ok ==
 | 
			
		||||
@ -169,6 +169,8 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
 | 
			
		||||
          return uiaRequest.completeStage(
 | 
			
		||||
            AuthenticationData(session: uiaRequest.session),
 | 
			
		||||
          );
 | 
			
		||||
        } else {
 | 
			
		||||
          return uiaRequest.cancel();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user