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 SignInAnonymousPage #344

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

Substituir ModularState por State em SignInAnonymousPage #344

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 SignInAnonymousPage atualmente utiliza ModularState para gerenciar o estado e obter a instância do SignInAnonymousController. A proposta é substituir ModularState por State e injetar o SignInAnonymousController via passagem de parâmetro no construtor.

Motivação

  • Remover a dependência direta do flutter_modular para gerenciar o estado.
  • Facilitar testes unitários, permitindo a injeção de dependências de forma explícita.
  • Seguir boas práticas de injeção de dependência.

Alterações Propostas

  1. Substituir ModularState por State<SignInAnonymousPage>.
  2. Adicionar SignInAnonymousController como parâmetro no construtor de SignInAnonymousPage.
  3. Remover a lógica de injeção de dependência do flutter_modular.

Código Atual

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

  final String title;

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

class _SignInAnonymousPage
    extends ModularState<SignInAnonymousPage, SignInAnonymousController>
    with SnackBarHandler {
  // ...
}

Código Proposto

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

  final String title;
  final SignInAnonymousController controller;

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

class _SignInAnonymousPage extends State<SignInAnonymousPage>
    with SnackBarHandler {
  late final SignInAnonymousController controller;
  List<ReactionDisposer>? _disposers;
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
  PageProgressState _currentState = PageProgressState.initial;

  @override
  void initState() {
    super.initState();
    controller = widget.controller;
  }

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

  // Restante do código...
}

Impacto

  • A instância do SignInAnonymousController deve ser criada e passada para SignInAnonymousPage no local onde a página é instanciada.
  • Testes unitários podem ser simplificados, pois o controller pode ser mockado diretamente.

Testes

  • Verificar se a injeção de dependência está funcionando corretamente.
  • Garantir que o comportamento da página permaneça o mesmo após a refatoração.

Observações

  • A remoção do flutter_modular pode exigir ajustes em outros locais do código que dependem dessa biblioteca para injeção de dependência.
@shonorio shonorio added bugfix dependencies Pull requests that update a dependency file refactor Envolve melhorias no código, como substituir o componentes obsoletos good first issue Good for newcomers deprecation Para destacar o uso de componentes obsoletos and removed bugfix 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