Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev0.1.0

flow_builder

Fluxos do Flutter facilitados! Um pacote do Flutter que simplifica fluxos com uma API declarativa flexível.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
52,3 mil
Curtidas
440
Pontos Pub
150

Instalar pacote

flutter pub add flow_builder

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

Flow Builder é um pacote Flutter que simplifica a criação e gestão de fluxos de aplicativos com uma API declarativa flexível. Permite aos desenvolvedores definir sequências de navegação complexas e transições de estado de forma clara e legível, reduzindo o código boilerplate. Ideal para gerenciar processos em múltiplos passos, como fluxos de onboarding, fluxos de checkout ou assistentes, promovendo lógica de fluxo mantida e escalável. O pacote suporta todas as principais plataformas, incluindo Android, iOS, Web, macOS, Windows e Linux.

Casos de uso

  • Fluxos de onboarding
  • Processos de checkout
  • Assistentes de múltiplos passos
  • Navegação com estado
  • Lógica de roteamento complexa

Principais recursos

  • definição declarativa de fluxo
  • Boilerplate mínimo
  • Integração de gerenciamento de estado
  • Suporte multiplataforma
  • Tratamento flexível de transição

Indicado para

  • Desenvolvedores construindo navegação complexa
  • Equipes priorizando código limpo
  • Projetos com jornadas de usuário em múltiplos passos
  • Aplicativos que exigem controle dinâmico de fluxo

Considerações

  • Requer entendimento sobre gerenciamento de estado
  • Mais adequado para fluxos com transições claras
  • Pode adicionar sobrecarga para navegação simples
  • Não é substituto do navegador principal

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

Flow Builder

Flutter Flows made easy!

build coverage pub package

Usage

Define a Flow State

The flow state will be the state which drives the flow. Each time this state changes, a new navigation stack will be generated based on the new flow state.

class Profile {
  const Profile({this.name, this.age, this.weight});

  final String? name;
  final int? age;
  final int? weight;

  Profile copyWith({String? name, int? age, int? weight}) {
    return Profile(
      name: name ?? this.name,
      age: age ?? this.age,
      weight: weight ?? this.weight,
    );
  }
}
Create a FlowBuilder

FlowBuilder is a widget which builds a navigation stack in response to changes in the flow state. onGeneratePages will be invoked for each state change and must return the new navigation stack as a list of pages.

FlowBuilder<Profile>(
  state: const Profile(),
  onGeneratePages: (profile, pages) {
    return [
      MaterialPage(child: NameForm()),
      if (profile.name != null) MaterialPage(child: AgeForm()),
    ];
  },
);
Update the Flow State

The state of the flow can be updated via context.flow<T>().update.

class NameForm extends StatefulWidget {
  @override
  _NameFormState createState() => _NameFormState();
}

class _NameFormState extends State<NameForm> {
  var _name = '';

  void _continuePressed() {
    context.flow<Profile>().update((profile) => profile.copyWith(name: _name));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Name')),
      body: Center(
        child: Column(
          children: <Widget>[
            TextField(
              onChanged: (value) => setState(() => _name = value),
              decoration: InputDecoration(
                labelText: 'Name',
                hintText: 'John Doe',
              ),
            ),
            RaisedButton(
              child: const Text('Continue'),
              onPressed: _name.isNotEmpty ? _continuePressed : null,
            )
          ],
        ),
      ),
    );
  }
}
Complete the Flow

The flow can be completed via context.flow<T>().complete.

class AgeForm extends StatefulWidget {
  @override
  _AgeFormState createState() => _AgeFormState();
}

class _AgeFormState extends State<AgeForm> {
  int? _age;

  void _continuePressed() {
    context
        .flow<Profile>()
        .complete((profile) => profile.copyWith(age: _age));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Age')),
      body: Center(
        child: Column(
          children: <Widget>[
            TextField(
              onChanged: (value) => setState(() => _age = int.parse(value)),
              decoration: InputDecoration(
                labelText: 'Age',
                hintText: '42',
              ),
              keyboardType: TextInputType.number,
            ),
            RaisedButton(
              child: const Text('Continue'),
              onPressed: _age != null ? _continuePressed : null,
            )
          ],
        ),
      ),
    );
  }
}
FlowController

A FlowBuilder can also be created with a custom FlowController in cases where the flow can be manipulated outside of the sub-tree.

class MyFlow extends StatefulWidget {
  @override
  State<MyFlow> createState() => _MyFlowState();
}

class _MyFlowState extends State<MyFlow> {
  late FlowController<Profile> _controller;

  @override
  void initState() {
    super.initState();
    _controller = FlowController(const Profile());
  }

  @override
  Widget build(BuildContext context) {
    return FlowBuilder(
      controller: _controller,
      onGeneratePages: ...,
    );
  }

  @override dispose() {
    _controller.dispose();
    super.dispose();
  }
}

Categorias

Repositório-fonte

Projetos que usam este pacote