Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev1.2.0

after_layout

Execute código após o primeiro layout do seu widget ter sido realizado, ou seja, após o primeiro quadro ter sido exibido.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
234 mil
Curtidas
778
Pontos Pub
160

Instalar pacote

flutter pub add after_layout

Visão geral do pacote

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

O pacote after_layout permite que desenvolvedores executem código imediatamente após a primeira passagem de layout de um widget, garantindo acesso a dimensões e posições precisas assim que o widget for renderizado na tela. É especialmente útil para realizar ações que dependem das medições finais do layout, como animações, ajustes de posicionamento ou integração com outros componentes da interface. O pacote funciona em todas as principais plataformas suportadas pelo Flutter, incluindo mobile, web e desktop. Ele oferece uma API simples por meio de um mixin que pode ser adicionado a qualquer StatefulWidget.

Casos de uso

  • Executando animações pós-layout
  • Ajustando posições de widget com base no tamanho real
  • Inicializando bibliotecas de terceiros que exigem dados de layout
  • Sincronizando elementos da interface após o renderização
  • Gerenciamento do dimensionamento de conteúdo dinâmico

Principais recursos

  • API simples baseada em mixin
  • Compatibilidade multiplataforma
  • Executa uma vez após o primeiro quadro
  • Não é necessário temporizadores ou callbacks
  • Funciona com StatefulWidgets

Indicado para

  • Desenvolvedores que precisam de tempo preciso para layout
  • aplicações com interface pesada e layouts dinâmicos
  • Animações acionadas após o renderização
  • Widgets personalizados que exigem consciência de layout

Considerações

  • Não adequado para eventos de layout repetidos
  • Pode causar problemas de desempenho se mal utilizado
  • Requer contexto de widget com estado
  • Limitado a uma execução por instância de widget
  • Não funciona antes da primeira compilação

README original

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

Flutter Community: after_layout

Flutter After Layout

pub package

Brings functionality to execute code after the first layout of a widget has been performed, i.e. after the first frame has been displayed.

Quick Usage

Add with AfterLayoutMixin<MyWidget> mixin to your State<MyWidget> class and then implement the FutureOr<void> afterFirstLayout(BuildContext context) abstract method. Code in this method will be called the first time this widget is laid out on the screen.

Motivation

If you want to display a widget that depends on the layout, such as a Dialog or BottomSheet, you can not use that widget in initState.

You might have tried this.

BAD CODE

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

@immutable
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'After Layout - Good Example',
      home: HomeScreen(),
    );
  }
}

@immutable
class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

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

class HomeScreenState extends State<HomeScreen> {
  @override
  void initState() {
    super.initState();
    // NOTE: Calling this function here would crash the app.
    showHelloWorld();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(color: Colors.red),
    );
  }

  void showHelloWorld() {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          content: const Text('Hello World'),
          actions: <Widget>[
            TextButton(
              onPressed: () => Navigator.of(context).pop(),
              child: const Text('DISMISS'),
            )
          ],
        );
      },
    );
  }
}

Usage

This demo showcases how this package resolves the shortcomings shown above:

GOOD CODE

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

void main() => runApp(const MyApp());

@immutable
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'After Layout - Good Example',
      home: HomeScreen(),
    );
  }
}

@immutable
class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

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

class HomeScreenState extends State<HomeScreen> with AfterLayoutMixin<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(color: Colors.red),
    );
  }

  @override
  void afterFirstLayout(BuildContext context) {
    // Calling the same function "after layout" to resolve the issue.
    showHelloWorld();
  }

  void showHelloWorld() {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          content: const Text('Hello World'),
          actions: <Widget>[
            TextButton(
              onPressed: () => Navigator.of(context).pop(),
              child: const Text('DISMISS'),
            )
          ],
        );
      },
    );
  }
}

Categorias

Repositório-fonte

Projetos que usam este pacote