Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Substituir ModularState por State na classe SignInStealthPage #342

Open
4 tasks
shonorio opened this issue Jan 11, 2025 · 0 comments
Open
4 tasks

Substituir ModularState por State na classe SignInStealthPage #342

shonorio opened this issue Jan 11, 2025 · 0 comments
Labels
dependencies Pull requests that update a dependency file deprecation Para destacar o uso de componentes obsoletos good first issue Good for newcomers refactor Envolve melhorias no código, como substituir o componentes obsoletos

Comments

@shonorio
Copy link
Collaborator

Descrição

A classe SignInStealthPage atualmente utiliza ModularState para gerenciar seu estado e acessar o SignInStealthController. Para melhorar a testabilidade e seguir boas práticas de injeção de dependência, propomos substituir o ModularState pelo State padrão do Flutter e injetar o SignInStealthController via passagem de parâmetro.

Alterações Propostas

  1. Remover ModularState: A classe _SignInStealthPage deixará de estender ModularState e passará a estender State<SignInStealthPage>.
  2. Injeção de Dependência: O SignInStealthController será injetado via construtor da classe SignInStealthPage e passado para o State.
  3. Ajustes no Código: Todas as referências ao controller serão ajustadas para utilizar o controller injetado.

Código Atual

class SignInStealthPage extends StatefulWidget {
  const SignInStealthPage({Key? key, this.title = 'Authentication'})
      : super(key: key);

  final String title;

  @override
  _SignInStealthPage createState() => _SignInStealthPage();
}

class _SignInStealthPage
    extends ModularState<SignInStealthPage, SignInStealthController>
    with SnackBarHandler {
  // ...
}

Código Proposto

class SignInStealthPage extends StatefulWidget {
  const SignInStealthPage({
    Key? key,
    this.title = 'Authentication',
    required this.controller,
  }) : super(key: key);

  final String title;
  final SignInStealthController controller;

  @override
  _SignInStealthPage createState() => _SignInStealthPage();
}

class _SignInStealthPage extends State<SignInStealthPage> with SnackBarHandler {
  late final SignInStealthController controller;
  List<ReactionDisposer>? _disposers;
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
  PageProgressState _currentState = PageProgressState.initial;

  @override
  void initState() {
    super.initState();
    controller = widget.controller;
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _disposers ??= [
      reaction((_) => controller.errorMessage, (String? message) {
        showSnackBar(scaffoldKey: _scaffoldKey, message: message);
      }),
      reaction((_) => controller.currentState, (PageProgressState status) {
        setState(() {
          _currentState = status;
        });
      }),
    ];
  }

  // Restante do código...
}

Benefícios

  • Testabilidade: A injeção de dependência facilita a criação de testes unitários, permitindo a substituição do SignInStealthController por um mock.
  • Desacoplamento: Remove a dependência direta do flutter_modular, tornando o código mais modular e fácil de manter.
  • Clareza: O código fica mais explícito sobre as dependências necessárias para o funcionamento da página.

Tarefas

  • Substituir ModularState por State.
  • Injetar SignInStealthController via construtor.
  • Atualizar todas as referências ao controller.
  • Atualizar testes unitários, se necessário.

Observações

Certifique-se de que todas as instâncias que utilizam SignInStealthPage passem o SignInStealthController corretamente. Isso pode exigir ajustes no roteamento ou na injeção de dependência no nível superior da aplicação.

@shonorio shonorio added dependencies Pull requests that update a dependency file deprecation Para destacar o uso de componentes obsoletos refactor Envolve melhorias no código, como substituir o componentes obsoletos good first issue Good for newcomers labels Jan 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dependencies Pull requests that update a dependency file deprecation Para destacar o uso de componentes obsoletos good first issue Good for newcomers refactor Envolve melhorias no código, como substituir o componentes obsoletos
Projects
None yet
Development

No branches or pull requests

1 participant