Kategorien, Pakete und Repositories suchen

Cover von after_init
Paketdetailsv0.2.0

after_init

Fügt der StatefulWidget-Klasse eine didInitState()-Lebenszyklus-Methode hinzu, in der Sie geerbtet Widgets sicher abrufen können.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
155
Likes
33
Pub-Punkte
160

Paket installieren

flutter pub add after_init

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Das after_init-Paket verbessert Flutter-Status-Widgets durch die Einführung einer neuen Lebenszyklus-Methode, didInitState(), die unmittelbar nach initState() aufgerufen wird und sicherstellt, dass vererbte Widgets vollständig verfügbar sind. Dadurch können Entwickler Abhängigkeiten oder kontextbasierte Daten sicher zugreifen, ohne das Risiko von null-Werten einzugehen. Es vereinfacht Abhängigkeitsinjektionen und Zustandsverwaltungsabläufe, indem es einen zuverlässigen Haken für Initialisierungslogik bereitstellt. Das Paket ist leichtgewichtig und kompatibel mit allen wichtigen Plattformen und eignet sich daher ideal für Apps, die frühzeitig auf vererbte Widgets zugreifen müssen.

Anwendungsfälle

  • Vererbte Widgets nach initState zugreifen
  • Einfachere Einrichtung der Abhängigkeitsinjektion
  • Zustand mit kontextabhängigen Daten initialisieren
  • Vermeidung von Null-Prüfungen in initState
  • Sichere Durchquerung des Widgetbaums gewährleisten
  • Vereinfachung der Initialisierungslogik

Hauptmerkmale

  • Neue Lifecycle-Methode didInitState()
  • Sicherer Zugriff auf vererbte Widgets
  • Leichtgewichtig und minimaler Overhead
  • Plattformübergreifende Kompatibilität
  • Einfache Integration in bestehenden Code
  • Kein zusätzlicher Boilerplate

Geeignet für

  • Entwickler, die vererbte Widgets verwenden
  • Apps mit komplexer Abhängigkeitsinjektion
  • Zustandsbehaftete Widgets, die frühen Kontextzugriff benötigen
  • Teams, die saubere Initialisierungsmuster priorisieren
  • Projekte, die darauf abzielen, Null-Sicherheitsrisiken zu verringern
  • Flutter-Anfänger lernen Lebenszyklusmethoden

Hinweise

  • Erfordert Verständnis des Flutter-Lebenszyklus
  • Nicht erforderlich für einfache Widgets ohne vererbte Abhängigkeiten
  • Kann bei übermäßiger Verwendung Komplexität hinzufügen
  • Nur für Zustandsbehaftete Widgets
  • Ersetzt keine anderen State-Management-Lösungen
  • Am besten zusammen mit etablierten Zustandsverwaltungspraktiken verwendet

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

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.

Kategorien

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.