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 FeedPage #361

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

Substituir ModularState por State na classe FeedPage #361

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 FeedPage atualmente utiliza ModularState para gerenciar seu estado e injeção de dependência. A proposta é substituir ModularState por State e injetar o FeedController diretamente via passagem de parâmetro no construtor. Isso melhora a clareza do código e facilita a testabilidade, removendo a dependência direta do flutter_modular.

Alterações Propostas

  1. Remover ModularState e substituir por State:

    • A classe _FeedPageState deve estender State<FeedPage> diretamente, em vez de ModularState<FeedPage, FeedController>.
  2. Injetar FeedController via construtor:

    • O FeedController deve ser passado como parâmetro no construtor da FeedPage e armazenado em uma variável local.
  3. Remover a dependência do flutter_modular:

    • A injeção de dependência via Modular deve ser removida, e o FeedController deve ser fornecido diretamente.

Código Atual

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

  final String title;
  final ITweetController tweetController;

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

class _FeedPageState extends ModularState<FeedPage, FeedController>
    with SnackBarHandler, AutomaticKeepAliveClientMixin {
  // ...
}

Código Proposto

class FeedPage extends StatefulWidget {
  const FeedPage({
    Key? key,
    this.title = 'Feed',
    required this.tweetController,
    required this.feedController, // Novo parâmetro
  }) : super(key: key);

  final String title;
  final ITweetController tweetController;
  final FeedController feedController; // Novo campo

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

class _FeedPageState extends State<FeedPage>
    with SnackBarHandler, AutomaticKeepAliveClientMixin {
  late final FeedController controller;

  @override
  void initState() {
    super.initState();
    controller = widget.feedController; // Inicializa o controller
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      _refreshIndicatorKey.currentState?.show();
    });
  }

  // Restante do código...
}

Benefícios

  • Testabilidade: A injeção de dependência via construtor facilita a criação de testes unitários, pois o FeedController pode ser mockado facilmente.
  • Clareza: Remove a dependência implícita do flutter_modular, tornando o código mais explícito e fácil de entender.
  • Manutenção: Simplifica a manutenção do código, pois a lógica de injeção de dependência é mais direta.

Impacto

  • Compatibilidade: A mudança pode exigir ajustes em outros locais onde a FeedPage é instanciada, garantindo que o FeedController seja fornecido corretamente.
  • Documentação: A documentação deve ser atualizada para refletir a nova forma de injeção de dependência.

Passos para Implementação

  1. Substituir ModularState por State na classe _FeedPageState.
  2. Adicionar FeedController como parâmetro no construtor da FeedPage.
  3. Remover qualquer referência ao flutter_modular relacionada à injeção de dependência.
  4. Atualizar os locais onde a FeedPage é instanciada para passar o FeedController corretamente.

Testes

  • Certificar-se de que todos os testes existentes continuem passando após a refatoração.
  • Adicionar novos testes unitários para garantir que a injeção de dependência esteja funcionando corretamente.
@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