Ana içeriğe atla

^0.14.0'dan ^1.0.0'a

Uzun bir bekleyişin ardından, Riverpod'un ilk stable sürümü nihayet yayınlandı 👏

Değişikliklerin tam listesi için değişiklik günlüğüne bakın.
Bu sayfada, mevcut bir Riverpod uygulamasını 0.14.x sürümünden 1.0.0 sürümüne nasıl geçireceğimizi inceleyeceğiz.

Projenizi yeni sözdizimine otomatik olarak güncellemek için geçiş aracını kullanma

Çeşitli değişiklikleri açıklamadan önce, Riverpod'un projenizi otomatik olarak geçirmek için bir komut satırı aracıyla geldiğini belirtmekte fayda var.

Komut satırını yükleme

Geçiş aracını yüklemek için şunu çalıştırın:

dart pub global activate riverpod_cli

Artık şu komutu çalıştırabilmelisiniz:

riverpod --help

Kullanım

Artık komut satırı aracı yüklendiğine göre, kullanmaya başlayabiliriz.

İlk olarak, geçirmek istediğiniz projeyi terminalinizde açın.

Riverpod'u güncellemeyin. Geçiş aracı, Riverpod sürümünü sizin için güncelleyecektir.

Uyarı

Riverpod'u güncellememek önemlidir. Aracı doğru bir şekilde çalıştırabilmek için 1.0.0 sürümünü zaten yüklememiş olmalısınız. Bu nedenle, aracı başlatmadan önce doğru şekilde önceki bir sürümü kullandığınızdan emin olun.

Projenizin hata içermediğinden emin olun.

Şunu çalıştırın:

riverpod migrate

Araç, ardından projenizi analiz edecek ve değişiklikler önerecektir. Örneğin, şunu görebilirsiniz:

-Widget build(BuildContext context, ScopedReader watch) {
+Widget build(BuildContext context, Widget ref) {
- MyModel state = watch(provider);
+ MyModel state = ref.watch(provider);
}

Accept change (y = yes, n = no [default], A = yes to all, q = quit)?

Değişikliği kabul etmek için basitçe y tuşuna basın. Aksi takdirde, reddetmek için n tuşuna basın.

Değişiklikler

Artık CLI kullanarak projenizi otomatik olarak nasıl güncelleyeceğimizi gördüğümüze göre, gerekli değişiklikleri detaylı bir şekilde inceleyelim.

Sözdizimi Birleştirme

Riverpod 1.0.0 sürümü, provider'larla etkileşimde bulunmak için sözdizimini birleştirmeye odaklandı. Önceden, Riverpod bir provider'ı okumak için birçok benzer ama yine de farklı sözdizimine sahipti, ref.watch(provider) ile useProvider(provider) ve watch(provider) gibi. 1.0.0 sürümüyle, yalnızca bir sözdizimi kaldı: ref.watch(provider). Diğerleri kaldırıldı.

Örneğin:

  • useProvider, HookConsumerWidget lehine kaldırıldı.

    Önceden:

    class Example extends HookWidget {

    Widget build(BuildContext context) {
    useState(...);
    int count = useProvider(counterProvider);
    ...
    }
    }

    Sonra:

    class Example extends HookConsumerWidget {

    Widget build(BuildContext context, WidgetRef ref) {
    useState(...);
    int count = ref.watch(counterProvider);
    ...
    }
    }
  • ConsumerWidget'ın build yöntemi ve Consumer'ın builder yöntemi değiştirildi.

    Önceden:

    class Example extends ConsumerWidget {

    Widget build(BuildContext context, ScopedReader watch) {
    int count = watch(counterProvider);
    ...
    }
    }

    Consumer(
    builder: (context, watch, child) {
    int count = watch(counterProvider);
    ...
    }
    )

    Sonra:

    class Example extends ConsumerWidget {

    Widget build(BuildContext context, WidgetRef ref) {
    int count = ref.watch(counterProvider);
    ...
    }
    }

    Consumer(
    builder: (context, ref, child) {
    int count = ref.watch(counterProvider);
    ...
    }
    )
  • context.read, ref.read lehine kaldırıldı.

    Önceden:

    class Example extends StatelessWidget {

    Widget build(BuildContext context) {
    SomeButton(
    onPressed: () => context.read(provider.notifier).doSomething(),
    );
    }
    }

    Sonra:

    class Example extends ConsumerWidget {

    Widget build(BuildContext context, WidgetRef ref) {
    SomeButton(
    onPressed: () => ref.read(provider.notifier).doSomething(),
    );
    }
    }

StateProvider'ın Güncellenmesi

StateProvider, StateNotifierProvider ile eşleşecek şekilde güncellendi.

Önceden, ref.watch(StateProvider) bir StateController örneği döndürüyordu. Şimdi sadece StateController durumunu döndürüyor.

Geçiş yapmak için bazı çözümleriniz var. Kodunuz sadece durumu alıyorsa, değiştirmeden değiştirebilirsiniz.

Şöyle:

final provider = StateProvider<int>(...);

Consumer(
builder: (context, ref, child) {
StateController<int> count = ref.watch(provider);

return Text('${count.state}');
}
)

şuna:

final provider = StateProvider<int>(...);

Consumer(
builder: (context, ref, child) {
int count = ref.watch(provider);

return Text('${count}');
}
)

Alternatif olarak, önceki davranışı korumak için yeni StateProvider.state kullanabilirsiniz.

final provider = StateProvider<int>(...);

Consumer(
builder: (context, ref, child) {
StateController<int> count = ref.watch(provider.state);

return Text('${count.state}');
}
)