Przejdź do treści
Biblioteka skilli
Programowanie · Budowanie i kod

provider

/provider

Pomaga konfigurować providery w pakiecie Provider, korzystać ze stanu, optymalizować przebudowy, używać ProxyProvider i migrować ze zdeprecjonowanych providerów.

Licencja
MIT
Ostatnia zmiana repozytorium
10.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
1
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
1
Przestarzałość

Brak sygnałów. Repozytorium zmienione 10.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Pomaga konfigurować providery w pakiecie Provider, korzystać ze stanu, optymalizować przebudowy, używać ProxyProvider i migrować ze zdeprecjonowanych providerów.

Oryginalny opis (EN)

Use when setting up providers, consuming state, optimizing rebuilds, using ProxyProvider, or migrating from deprecated providers (Provider package).

Jak działa

  1. 1. Provider Types
  2. 2. Setup
  3. 3. Consuming State
  4. 4. ProxyProvider
  5. 5. Rules
  6. 6. Debugging
  7. 7. Migration: ValueListenableProvider
  8. References
Sekcje z nagłówków SKILL.md, w oryginale · 132 linii, 441 słów
Podgląd SKILL.md
---
name: provider
description: "Use when setting up providers, consuming state, optimizing rebuilds, using ProxyProvider, or migrating from deprecated providers (Provider package)."
license: MIT
---

# Provider Skill

This skill defines how to correctly use the `provider` package in Flutter applications.

---

## 1. Provider Types

| Provider | Use for |
|---|---|
| `Provider` | Exposing any immutable value |
| `ChangeNotifierProvider` | Mutable state with `ChangeNotifier` |
| `FutureProvider` | Exposing a `Future` result |
| `StreamProvider` | Exposing a `Stream` |
| `ProxyProvider` / `ChangeNotifierProxyProvider` | Objects that depend on other providers |

---

## 2. Setup

```dart
MultiProvider(
  providers: [
    Provider<Something>(create: (_) => Something()),
    ChangeNotifierProvider(create: (_) => MyNotifier()),
    FutureProvider<String>(create: (_) => fetchData(), initialData: ''),
  ],
  child: MyApp(),
)
```

- Use `MultiProvider` to group multiple providers and avoid deeply nested trees.
- `ChangeNotifierProvider` **automatically disposes** the model when it is no longer needed.
- **Never** create a provider's object from variables that can change over time — the object won't update when the variable changes. Use `ProxyProvider` instead.
- If you have 150+ providers, consider mounting them over time (e.g., during a splash screen) rather than all at once to avoid `StackOverflowError`.

---

## 3. Consuming State

Always specify the **generic type** for type safety:

```dart
// Listen and rebuild on change — only valid inside build() or a Provider's update method
final count = context.watch<MyModel>().count;

// Access without listening — use in callbacks, not inside build()
context.read<MyModel>().increment();

// Listen to only part of the state
final count = context.select<MyModel, int>((m) => m.count);
```

Use `Consumer<T>` or `Selector<T, R>` widgets when you need fine-grained rebuilds and cannot access a descendant `BuildContext`:

```dart
Consumer<MyModel>(
  builder: (context, model, child) => Text('${model.count}'),
  child: const ExpensiveWidget(), // rebuilt only once
)

Selector<MyModel, int>(
  selector: (_, model) => model.count,
  builder: (_, count, __) => Text('$count'),
)
```

---

## 4. ProxyProvider

Use `ProxyProvider` or `ChangeNotifierProxyProvider` for objects that depend on other providers or values that can change:

```dart
MultiProvider(
  providers: [
    Provider<Auth>(create: (_) => Auth()),
    ProxyProvider<Auth, Api>(
      update: (_, auth, __) => Api(auth.token),
    ),
  ],
)
```

---

## 5. Rules

- Do **not** access providers inside `initState` or constructors — use them in `build`, callbacks, or lifecycle methods where the widget is fully mounted.
- You can use **any object** as state, not just `ChangeNotifier`; use `Provider.value()` with a `StatefulWidget` if needed.

---

## 6. Debugging

Implement `toString` or `DiagnosticableTreeMixin` to improve how your objects appear in Flutter DevTools:

```dart
class MyModel with DiagnosticableTreeMixin {
  final int count;
  MyModel(this.count);

  @override
  String toString() => 'MyModel(count: $count)';
}
```

---

## 7. Migration: ValueListenableProvider

`ValueListenableProvider` is deprecated. Use `Provider` with `ValueListenableBuilder` instead:

```dart
ValueListenableBuilder<int>(
  valueListenable: myValueListenable,
  builder: (context, value, _) {
    return Provider<int>.value(
      value: value,
      child: MyApp(),
    );
  },
)
```

---

## References

- [Provider GitHub Repository](https://github.com/rrousselGit/provider)

Wersje

RepozytoriumWynikLicencja
Ta strona · evanca/flutter-ai-rules100MIT
shenxingy/clade100MIT

Migawka bazy z 28.10.2026 · wersja paczki d87b52a5be15 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100flutter-change-notifier
    Pomaga ustawiać modele ChangeNotifier, udostępniać je w drzewie widgetów, odczytywać stan przez Consumer lub Provider.of i ograniczać niepotrzebne przebudowy.
  • 100flutter-riverpod-expert
    Projektuje, implementuje, refaktoryzuje i recenzuje zarządzanie stanem Flutter z Riverpod według ręcznych wzorców: providery datasource i repozytoriów, stan i operacje, nasłuchiwanie auth, mosty GoRouter i rodziny providerów.
  • 100terraform-provider-development
    Prowadzi przez tworzenie, testowanie, dokumentowanie i migrację providerów Terraform w Plugin Framework, w tym zasoby, data sources, testy akceptacyjne i przejście z SDKv2.
  • 100riverpod
    Pomaga w Riverpod przy konfiguracji providerów, łączeniu żądań, zwalnianiu stanu, przekazywaniu argumentów, efektach ubocznych i testowaniu providerów.
  • 100new-provider
    Dodaje nowego dostawcę LLM do repozytorium cc-router przez deskryptor YAML w src-tauri/providers wraz z konfiguracją, testami i dokumentacją.
  • 100flutter-riverpod-state-management
    Wdraża reaktywne zarządzanie stanem z Riverpod 3.x i generowaniem kodu we Flutterze: definiowanie providerów, AsyncNotifier i nadpisywanie providerów w testach.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.