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

ProfileEditPage: Substituir ModularState por State e injetar ProfileEditController #351

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

A classe ProfileEditPage atualmente utiliza ModularState para gerenciar o estado e obter a instância do ProfileEditController. A proposta é substituir ModularState por State e injetar o ProfileEditController via passagem de parâmetro no construtor.

Motivação

  • Desacoplamento: Remover a dependência direta do flutter_modular para facilitar testes e melhorar a modularidade do código.
  • Injeção de Dependência: Utilizar injeção de dependência explícita, o que torna o código mais previsível e fácil de manter.

Alterações Propostas

  1. Substituir ModularState por State.
  2. Adicionar ProfileEditController como parâmetro no construtor de ProfileEditPage.
  3. Remover a dependência do flutter_modular para obter o controller.

Código Atual

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

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

class _ProfileEditPageState
    extends ModularState<ProfileEditPage, ProfileEditController>
    with SnackBarHandler {
  // ...
}

Código Proposto

class ProfileEditPage extends StatefulWidget {
  final ProfileEditController controller;

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

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

class _ProfileEditPageState extends State<ProfileEditPage> with SnackBarHandler {
  List<ReactionDisposer>? _disposers;
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

  ProfileEditController get controller => widget.controller;

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: AppBar(
        elevation: 0.0,
        title: const Text('Meu perfil'),
        backgroundColor: DesignSystemColors.easterPurple,
      ),
      body: Observer(
        builder: (context) => bodyBuilder(controller.state),
      ),
    );
  }

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

Impacto

  • Testabilidade: A injeção explícita facilita a criação de testes unitários e de integração.
  • Manutenção: O código fica mais claro e menos acoplado a bibliotecas externas.

Passos para Implementação

  1. Atualizar a classe ProfileEditPage conforme o código proposto.
  2. Atualizar os locais onde ProfileEditPage é instanciado para passar o ProfileEditController como parâmetro.
  3. Remover a dependência do flutter_modular para obter o controller.

Observações

  • Certifique-se de que o ProfileEditController seja corretamente instanciado e gerenciado no local onde ProfileEditPage é utilizado.
  • Verifique se há necessidade de ajustes nos testes existentes.
@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