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 em NewGuardianPage #354

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

Substituir ModularState por State em NewGuardianPage #354

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

Alterações Propostas

  1. Remover ModularState: A classe _NewGuardianPageState não deve mais estender ModularState. Em vez disso, deve estender State<NewGuardianPage>.

  2. Injeção de Dependência via Construtor: O NewGuardianController deve ser passado como parâmetro no construtor da classe NewGuardianPage e armazenado em uma variável local.

  3. Ajustes no initState e dispose: Como o controller não será mais gerenciado pelo Modular, é necessário garantir que ele seja corretamente inicializado e descartado.

Código Atual

class NewGuardianPage extends StatefulWidget {
  const NewGuardianPage({Key? key, this.title = 'NewGuardian'})
      : super(key: key);

  final String title;

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

class _NewGuardianPageState
    extends ModularState<NewGuardianPage, NewGuardianController>
    with SnackBarHandler {
  // ...
}

Código Proposto

class NewGuardianPage extends StatefulWidget {
  const NewGuardianPage({
    Key? key,
    this.title = 'NewGuardian',
    required this.controller,
  }) : super(key: key);

  final String title;
  final NewGuardianController controller;

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

class _NewGuardianPageState extends State<NewGuardianPage> with SnackBarHandler {
  late final NewGuardianController controller;
  List<ReactionDisposer>? _disposers;
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

  PageProgressState _loadState = PageProgressState.initial;

  @override
  void initState() {
    super.initState();
    controller = widget.controller;
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      controller.loadPage();
    });
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _disposers ??= [
      _showErrorMessage(),
      _showLoadProgress(),
      _showCreateProgress(),
      _showAlert(),
    ];
  }

  @override
  void dispose() {
    for (final d in _disposers!) {
      d();
    }
    controller.dispose(); // Dispose do controller manualmente
    super.dispose();
  }

  // Restante do código...
}

Benefícios

  • Desacoplamento: A classe NewGuardianPage não está mais acoplada ao flutter_modular para gerenciar o estado e a injeção de dependência.
  • Testabilidade: A injeção de dependência via construtor facilita a criação de testes unitários, pois o controller pode ser mockado.
  • Clareza: O código fica mais explícito sobre as dependências necessárias para a classe funcionar.

Considerações

  • Impacto: Essa alteração pode impactar outras partes do código que dependem da injeção de dependência via Modular. É necessário garantir que todas as dependências sejam corretamente injetadas.
  • Compatibilidade: Verificar se o NewGuardianController já implementa dispose() para liberar recursos corretamente.

Próximos Passos

  1. Realizar a alteração no código.
  2. Atualizar os testes unitários para refletir a nova forma de injeção de dependência.
  3. Testar a aplicação para garantir que não há regressões.
@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