Buscar categorias, pacotes e repositórios

Capa de after_init
Detalhes do pacotev0.2.0

after_init

Adiciona um método de ciclo de vida didInitState() aos widgets com estado, onde você pode acessar com segurança os widgets herdados.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
155
Curtidas
33
Pontos Pub
160

Instalar pacote

flutter pub add after_init

Visão geral do pacote

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

O pacote after_init aprimora os widgets com estado do Flutter ao introduzir um novo método de ciclo de vida, didInitState(), que é chamado imediatamente após initState() e garante que os widgets herdados estejam totalmente disponíveis. Isso permite que os desenvolvedores acessem com segurança dependências ou dados baseados em contexto sem risco de valores nulos. Simplifica fluxos de injeção de dependência e gerenciamento de estado fornecendo um gancho confiável para lógica de inicialização. O pacote é leve e compatível com todas as principais plataformas, tornando-o ideal para aplicativos que exigem acesso precoce aos widgets herdados.

Casos de uso

  • Acessando widgets herdados após initState
  • Simplificando a configuração de injeção de dependência
  • Inicializando estado com dados dependentes do contexto
  • Evitando verificações de nulo em initState
  • Garantir a travessia segura da árvore de widgets
  • Simplificando a lógica de inicialização

Principais recursos

  • Novo método de ciclo de vida didInitState()
  • Acesso garantido a widgets herdados
  • Leve e baixo custo operacional
  • Compatibilidade multiplataforma
  • Integração fácil com código existente
  • Nenhum boilerplate adicional

Indicado para

  • Desenvolvedores usando widgets herdados
  • Aplicativos com injeção de dependência complexa
  • Widgets com estado que precisam de acesso precoce ao contexto
  • Equipes priorizando padrões de inicialização limpa
  • Projetos com foco em reduzir riscos de segurança nula
  • Iniciantes do Flutter aprendendo métodos de ciclo de vida

Considerações

  • Requer entendimento do ciclo de vida do Flutter
  • Não necessário para widgets simples sem dependências herdadas
  • Pode adicionar complexidade se usado em excesso
  • Limitado a widgets com estado
  • Não substitui outras soluções de gerenciamento de estado
  • Melhor usado junto com práticas estabelecidas de gerenciamento de estado

README original

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

after_init

Adds a didInitState() lifecycle method to stateful widgets where you can safely access inherited widgets.

InheritedWidget is heavily used throughout the Flutter framework. Many state management packages such as ScopedModel and Provider use it as well. Unfortunately, InheritedWidgets are not accessible from the initState() method of State. The Flutter documentation states:

/// You cannot use [BuildContext.inheritFromWidgetOfExactType] from this
/// method. However, [didChangeDependencies] will be called immediately
/// following this method, and [BuildContext.inheritFromWidgetOfExactType] can
/// be used there.

This package consists of a simple mixin on the State class that provides a new method called didInitState(). It is only called exactly once, after initState(), and before didChangeDependencies() and build(). You can safely access InheritedWidgets from this method, and use them to perform any setup tasks for your widget.

Method Order

With this library, State methods are invoked in the following order:

  1. initState()
  2. didInitState()← new!
  3. didChangeDependencies()
  4. build()

Learn more about the Stateful Widget Lifecycle.

Example

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

void main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        body: Example(),
      ),
    ),
  );
}

class Example extends StatefulWidget {
  @override
  State<Example> createState() => _ExampleState();
}

class _ExampleState extends State<Example> with AfterInitMixin<Example> {
  late Size size;

  /// This gets called first, as usual.
  @override
  void initState() {
    super.initState();
    // Your code here
  }

  /// This gets called after initState(), only once.
  /// Safely access inherited widgets here.
  @override
  void didInitState() {
    // No need to call super.didInitState().
    // setState() is not required because build() will automatically be called by Flutter.
    size = MediaQuery.of(context).size;
  }

  /// This gets called after didInitState().
  /// And anytime the widget's dependencies change, as usual.
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    // Your code here
  }

  /// Finally this gets called, as usual.
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(size.toString()),
    );
  }
}

This is just a simplistic example. You would normally do something more useful in didInitState(), such as access setup data or subscribe to a Stream that comes from an InheritedWidget.

Alternative

A typical workaround for the initState() limitation is to delay execution of the code that needs to access InheritedWidget:

@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) {
    print(MediaQuery.of(context).size);
  });
}

However, this will cause your code to execute after the build() method, which may not be what you want.

Unit Tests

This package comes with unit tests that verify that didInitState() only gets called once and that State methods are invoked in the order specified above.

Credits

This package was inspired by the after_layout package.

Categorias

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.