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 ProfileSkillPage #350

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

Substituir ModularState por State na classe ProfileSkillPage #350

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

Atualmente, a classe ProfileSkillPage utiliza ModularState para gerenciar o estado e injetar o ProfileSkillController. A proposta é substituir ModularState por State e injetar o ProfileSkillController via passagem de parâmetro no construtor da classe.

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 Explícita: Tornar a injeção de dependência mais explícita e controlada, facilitando a compreensão e manutenção do código.

Alterações Propostas

  1. Substituir ModularState por State na classe ProfileSkillPage.
  2. Injetar o ProfileSkillController via construtor.
  3. Atualizar o método createState para passar o controller para o State.

Código Atual

import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:flutter_modular/flutter_modular.dart';

import '../../../../../authentication/presentation/shared/snack_bar_handler.dart';
import '../../../../../filters/states/filter_state.dart';
import 'pages/profile_skill_initial_state_page.dart';
import 'pages/profile_skill_loaded_state_page.dart';
import 'profile_skill_controller.dart';

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

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

class _FilterPageState
    extends ModularState<ProfileSkillPage, ProfileSkillController>
    with SnackBarHandler {
  @override
  Widget build(BuildContext context) {
    return Observer(
      builder: (context) {
        return pageBuilder(controller.currentState);
      },
    );
  }
}

extension _FilterPageStateMethods on _FilterPageState {
  Widget pageBuilder(FilterState state) {
    return state.when(
      initial: () => const ProfileSkillInitialStatePage(),
      loaded: (skill) => ProfilSkillLoadedStatePage(
        tags: skill,
        onResetAction: controller.reset,
        onAplyFilterAction: controller.setTags,
      ),
    );
  }
}

Código Proposto

import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';

import '../../../../../authentication/presentation/shared/snack_bar_handler.dart';
import '../../../../../filters/states/filter_state.dart';
import 'pages/profile_skill_initial_state_page.dart';
import 'pages/profile_skill_loaded_state_page.dart';
import 'profile_skill_controller.dart';

class ProfileSkillPage extends StatefulWidget {
  final ProfileSkillController controller;

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

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

class _ProfileSkillPageState extends State<ProfileSkillPage> with SnackBarHandler {
  ProfileSkillController get controller => widget.controller;

  @override
  Widget build(BuildContext context) {
    return Observer(
      builder: (context) {
        return pageBuilder(controller.currentState);
      },
    );
  }
}

extension _ProfileSkillPageStateMethods on _ProfileSkillPageState {
  Widget pageBuilder(FilterState state) {
    return state.when(
      initial: () => const ProfileSkillInitialStatePage(),
      loaded: (skill) => ProfilSkillLoadedStatePage(
        tags: skill,
        onResetAction: controller.reset,
        onAplyFilterAction: controller.setTags,
      ),
    );
  }
}

Testes

Certifique-se de que todos os testes existentes continuem passando após a refatoração. Além disso, considere adicionar novos testes para garantir que a injeção de dependência via construtor esteja funcionando corretamente.

Impacto

  • Compatibilidade: Verifique se outras partes do código que dependem de ProfileSkillPage estão sendo atualizadas para passar o controller corretamente.
  • Documentação: Atualize a documentação, se necessário, para refletir as mudanças na injeção de dependência.

Considerações Finais

Essa mudança deve melhorar a clareza e a manutenibilidade do código, além de facilitar a realização de testes unitários.

@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