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 AccountDeleteController via parâmetro em AccountDeletePage #374

Open
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 AccountDeletePage atualmente utiliza ModularState para gerenciar o estado e injetar o AccountDeleteController. A proposta é substituir ModularState por State e injetar o AccountDeleteController via passagem de parâmetro no construtor.

Motivação

  • Desacoplamento: Remover a dependência direta do flutter_modular para facilitar testes e reutilização do código.
  • Injeção de Dependência Explícita: Tornar a injeção de dependência mais clara e controlada, passando o AccountDeleteController diretamente via construtor.

Alterações Propostas

  1. Substituir ModularState por State na classe _AccountDeletePageState.
  2. Adicionar AccountDeleteController como parâmetro no construtor de AccountDeletePage.
  3. Remover a dependência do flutter_modular para injeção do controller.

Código Atual

class AccountDeletePage extends StatefulWidget {
  const AccountDeletePage({Key? key}) : super(key: key);

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

class _AccountDeletePageState
    extends ModularState<AccountDeletePage, AccountDeleteController>
    with SnackBarHandler {
  // Código atual...
}

Código Proposto

class AccountDeletePage extends StatefulWidget {
  final AccountDeleteController controller;

  const AccountDeletePage({
    Key? key,
    required this.controller,
  }) : super(key: key);

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

class _AccountDeletePageState extends State<AccountDeletePage>
    with SnackBarHandler {
  final bool _isPasswordVisible = false;
  final textController = TextEditingController();
  List<ReactionDisposer>? _disposers;
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

  AccountDeleteController get controller => widget.controller;

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

  @override
  void dispose() {
    for (final d in _disposers!) {
      d();
    }
    super.dispose();
  }

  // Restante do código...
}

Impacto

  • Testabilidade: Facilita a criação de testes unitários, pois o AccountDeleteController pode ser mockado e injetado diretamente.
  • Manutenção: Reduz a complexidade do código ao remover a dependência do flutter_modular para gerenciar o estado.

Passos para Implementação

  1. Atualizar a classe AccountDeletePage conforme o código proposto.
  2. Atualizar todos os locais onde AccountDeletePage é instanciado para passar o AccountDeleteController via parâmetro.
  3. Remover a dependência do flutter_modular se não for mais necessária em outros locais.

Observações

  • Certifique-se de que o AccountDeleteController seja corretamente instanciado e gerenciado no local onde AccountDeletePage é utilizado.
  • Verifique se há outros widgets ou páginas que dependem de ModularState para aplicar a mesma refatoraçã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
@shonorio shonorio self-assigned this 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