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 e injetar IQuizController via parâmetro em QuizContentState #349

Open
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

Atualmente, a classe QuizContentState estende ModularState e utiliza o IQuizController diretamente através do Modular. Para melhorar a testabilidade e a clareza do código, propomos substituir o ModularState pelo State padrão do Flutter e injetar o IQuizController via passagem de parâmetro no construtor.

Alterações Propostas

  1. Remover a herança de ModularState:

    • A classe QuizContentState deixará de estender ModularState e passará a estender State<QuizContent> diretamente.
  2. Injetar IQuizController via construtor:

    • O IQuizController será passado como parâmetro no construtor de QuizContentState.
    • O QuizContent será responsável por fornecer o IQuizController ao QuizContentState.
  3. Atualizar o método build do QuizContent:

    • O QuizContent passará o IQuizController para o QuizContentState ao criar o estado.

Código Atual

class QuizContentState extends ModularState<QuizContent, IQuizController>
    with TickerProviderStateMixin<QuizContent>
    implements ScrollOverflowListener {
  // ...
}

Código Proposto

class QuizContentState extends State<QuizContent>
    with TickerProviderStateMixin
    implements ScrollOverflowListener {
  final IQuizController controller;

  QuizContentState({required this.controller});

  // ...
}

Atualização do QuizContent

class QuizContent extends StatefulWidget {
  const QuizContent({
    Key? key,
    required this.constraints,
    required this.controller,
  }) : super(key: key);

  final BoxConstraints constraints;
  final IQuizController controller;

  static QuizContentState? of(BuildContext context) =>
      context.findAncestorStateOfType<QuizContentState>();

  @override
  State<QuizContent> createState() => QuizContentState(controller: controller);
}

Benefícios

  • Testabilidade: A injeção de dependência via construtor facilita a criação de testes unitários, permitindo a injeção de mocks ou stubs do IQuizController.
  • Clareza: A remoção do ModularState torna o código mais explícito sobre as dependências necessárias para o funcionamento do QuizContentState.
  • Desacoplamento: A classe QuizContentState não está mais acoplada ao Modular, o que pode facilitar futuras migrações ou mudanças na arquitetura.

Impacto

  • Compatibilidade: Essa mudança não deve impactar outras partes do código, desde que o IQuizController seja corretamente injetado.
  • Testes: Os testes existentes podem precisar de ajustes para refletir a nova forma de injeção de dependência.

Passos para Implementação

  1. Atualizar a classe QuizContentState para estender State<QuizContent> e receber o IQuizController via construtor.
  2. Atualizar a classe QuizContent para passar o IQuizController ao criar o estado.
  3. Atualizar os testes unitários para refletir a nova forma de injeção de dependência.

Considerações Finais

Essa mudança é um passo importante para melhorar a qualidade do código e facilitar a manutenção e testes futuros. A equipe deve revisar e validar as alterações propostas antes de implementá-las.

@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