provider
/provider
Pomaga konfigurować providery w pakiecie Provider, korzystać ze stanu, optymalizować przebudowy, używać ProxyProvider i migrować ze zdeprecjonowanych providerów.
- Autor
- evanca ↗
- Repozytorium
- flutter-ai-rules ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 10.10.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 1
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 1
Brak sygnałów. Repozytorium zmienione 10.10.2026, bez odwołań do wycofanych modeli i API.
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. Provider Types
- 2. Setup
- 3. Consuming State
- 4. ProxyProvider
- 5. Rules
- 6. Debugging
- 7. Migration: ValueListenableProvider
- References
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
| Repozytorium | Wynik | Licencja |
|---|---|---|
| Ta strona · evanca/flutter-ai-rules | 100 | MIT |
| shenxingy/clade | 100 | MIT |
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.