Riverpod: StateProvider
Część sekcji Zarządzanie stanem ścieżki Flutter w Coddy. Lekcja 18 z 27.
Provider przechowuje wartość, która nigdy się nie zmienia. W przypadku jednej prostej wartości, która się zmienia — liczby, wartości typu bool lub String — użyj StateProvider:
final quantityProvider = StateProvider((ref) => 1);Odczytuj ją w ten sam sposób: ref.watch(quantityProvider) zwraca liczbę, a widget buduje się ponownie, gdy ta się zmieni.
Aby ją zmienić, pobierz za pomocą ref.read jej notifier, czyli obiekt przechowujący wartość, i ustaw jego state:
onPressed: () {
ref.read(quantityProvider.notifier).state++;
},Podobnie jak w Provider, używaj ref.watch w build, aby wyświetlić wartość, a ref.read w funkcjach zwrotnych, aby ją zmienić. Zmiana kopii niczego nie zmienia: var n = ref.read(quantityProvider); n++; zwiększa n o 1, a nie wartość providera. Zmienia ją tylko ustawienie state.
Wyzwanie
ŁatwyZamówienie naleśników wyświetla swoją ilość, ale przyciski jeszcze nie działają.
- Przycisk plus zwiększa wartość
quantityProvidero 1. - Przycisk minus zmniejsza wartość o 1, ale nigdy poniżej 1.
Spróbuj swoich sił
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
final quantityProvider = StateProvider((ref) => 1);
void main() {
runApp(const ProviderScope(child: MyApp()));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: OrderPage(),
);
}
}
class OrderPage extends ConsumerWidget {
const OrderPage({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final quantity = ref.watch(quantityProvider);
return Scaffold(
appBar: AppBar(title: const Text('Pancakes')),
body: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: const Icon(Icons.remove),
onPressed: () {},
),
Text('Quantity: $quantity', style: const TextStyle(fontSize: 24)),
IconButton(
icon: const Icon(Icons.add),
onPressed: () {},
),
],
),
),
);
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Zarządzanie stanem
Poćwicz samodzielnie: Kompilator Flutter online