Çözüldü Flutter Consumer, içindeki widget'i güncellemiyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

RayOula

Kilopat
Katılım
11 Mayıs 2016
Mesajlar
993
Çözümler
15
Flutter'da Riverpod öğrenmeye çalışıyorum. Ta ki buraya gelinceye kadar bir sıkıntı yoktu.
Kod:
class FileNameNotifier extends StateNotifier<String?> {
  FileNameNotifier() : super(null);

  Future<void> setFileName(String? fileName) async {
    state = fileName;
  }

  String? getFileName() {
    return state;
  }
}

final fileNameProvider =
    StateNotifierProvider<FileNameNotifier, String?>((ref) {
  return FileNameNotifier();
});

Şöyle bir notifier ve bir providerım var.

Kod:
Consumer(
              builder: (context, ref, child) => ElevatedButton(
                onPressed: () async {
                  CreamPath.pickFiles(ref);
                },
                child: const Text("Select File"),
              ),
            ),
            Consumer(
              builder: (context, ref, child) => Text(
                  ref.read(fileNameProvider.notifier).getFileName() ??
                      "No File Selected"),
            )

Bir de iki adet bu şekilde Consumer widgeti var. Butona basınca file explorer geliyor dosyayı seçtikten sonra yeniden uygulamaya geri dönüyoruz. Ama altındaki Text widgeti güncellenmiyor aynı şekilde "No File Selected" yazıyor. Hot reload yapınca düzeliyor ama bunun ben bir şey yapmadan direkt dosya ismini göstermesi gerekiyor. Ne yapacağımı bilemedim.
 
Çözüm
Tamamen bir çözüm sunacak vaktim yok şuan ama ref.watch kullanmalısınız ki güncelleme olduğunu farkedip değişsin.


Burada.
Onu da denemiştim hocam o olmayınca bunu denedim. O da böyle kaldı.

Kod:
//final fileName = ref.watch(NameProvider.notifier).state;
    final fileName = ref.watch(NameProvider);

Değişken tanımlaması yaparken üstteki gibi yapmıştım, öyle yaparsak UI güncellenmiyormuş. Alttaki gibi olması gerekiyor.
Tamamen bir çözüm sunacak vaktim yok şuan ama ref.watch kullanmalısınız ki güncelleme olduğunu farkedip değişsin.


Burada.
Onu da denemiştim hocam o olmayınca bunu denedim. O da böyle kaldı.

Kod:
//final fileName = ref.watch(NameProvider.notifier).state;
    final fileName = ref.watch(NameProvider);

Değişken tanımlaması yaparken üstteki gibi yapmıştım, öyle yaparsak UI güncellenmiyormuş. Alttaki gibi olması gerekiyor.
 
Son düzenleme:
Çözüm
Onu da denemiştim hocam o olmayınca bunu denedim. O da böyle kaldı.

Kod:
//final fileName = ref.watch(NameProvider.notifier).state;
    final fileName = ref.watch(NameProvider);

Değişken tanımlaması yaparken üstteki gibi yapmıştım, öyle yaparsak UI güncellenmiyormuş. Alttaki gibi olması gerekiyor.
Eh, ilk satırdaki hali de çalıştırmış NameProvider'i ona göre ayarlasaymışsınız.
 

Yeni konular

Geri
Yukarı