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 DetailTweetController via parâmetro na DetailTweetPage #364

Open
4 tasks
shonorio opened this issue Jan 11, 2025 · 0 comments
Assignees
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 DetailTweetPage atualmente utiliza ModularState para gerenciar o estado e a injeção de dependência do DetailTweetController. A proposta é substituir ModularState por State e injetar o DetailTweetController diretamente via passagem de parâmetro no construtor.

Alterações Propostas

  1. Remover ModularState e substituir por State:

    • A classe _DetailTweetPageState não deve mais estender ModularState.
    • O DetailTweetController será injetado via construtor.
  2. Injetar DetailTweetController via parâmetro:

    • Adicionar DetailTweetController como parâmetro no construtor de DetailTweetPage.
    • Remover a dependência do Modular para resolver o DetailTweetController.
  3. Ajustar o ciclo de vida do DetailTweetController:

    • Garantir que o DetailTweetController seja corretamente inicializado e descartado no ciclo de vida do State.

Código Atual

class DetailTweetPage extends StatefulWidget {
  const DetailTweetPage({
    Key? key,
    this.title = 'DetailTweet',
    required this.tweetController,
  }) : super(key: key);

  final String title;
  final ITweetController tweetController;

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

class _DetailTweetPageState
    extends ModularState<DetailTweetPage, DetailTweetController>
    with SnackBarHandler {
  // ...
}

Código Proposto

class DetailTweetPage extends StatefulWidget {
  const DetailTweetPage({
    Key? key,
    this.title = 'DetailTweet',
    required this.tweetController,
    required this.detailTweetController,
  }) : super(key: key);

  final String title;
  final ITweetController tweetController;
  final DetailTweetController detailTweetController;

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

class _DetailTweetPageState extends State<DetailTweetPage> with SnackBarHandler {
  late final DetailTweetController controller;

  @override
  void initState() {
    super.initState();
    controller = widget.detailTweetController;
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      _refreshIndicatorKey.currentState?.show(atTop: false);
    });
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  // Restante do código...
}

Benefícios

  • Desacoplamento do Modular: A classe não depende mais do Modular para resolver dependências, facilitando testes e manutenção.
  • Injeção explícita: A injeção de dependência fica mais clara e explícita, melhorando a legibilidade do código.
  • Facilidade de teste: A injeção via construtor facilita a criação de mocks e testes unitários.

Tarefas

  • Substituir ModularState por State.
  • Injetar DetailTweetController via construtor.
  • Ajustar o ciclo de vida do DetailTweetController.
  • Atualizar os testes unitários para refletir as mudanças.

Observações

  • Certifique-se de que todas as dependências do DetailTweetController sejam corretamente resolvidas antes de passar o controlador para a DetailTweetPage.
  • Verifique se há outros lugares no código que dependem do ModularState para garantir que a mudança seja consistente.
@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 labels Jan 11, 2025
@shonorio shonorio changed the title Substituir ModularState por State e injetar DetailTweetController via parâmetro Substituir ModularState por State e injetar DetailTweetController via parâmetro na DetailTweetPage Jan 11, 2025
@shonorio shonorio added the good first issue Good for newcomers label Jan 11, 2025
@RoxyRoses RoxyRoses self-assigned this Jan 21, 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

When branches are created from issues, their pull requests are automatically linked.

2 participants