제공자 ile Çalışmak 💫 🌌 ✨

Bu yazıda Flutter'da providerları ve state yönetimini ele alacağız.

Provider paketi, state yönetimi için kullanılan InheritedWIdget çevresinde bir wrapper'dır(sarmalayıcıdır).

제공자 파일, 위젯은 상태 개체(두럼 네시)에 포함되어 있습니다.
공급자 ayrıca, verilerle başlatarak ve 위젯 ağacından kaldırıldıklarında onlardan sonra temizleyerek state nesnelerinin yaşam süresinin yönetilmesine yardımcı olur.
Provider, BLoC bileşenlerini uygulamak için bile kullanılabilir veya diğer state yönetimi çözümlerinin temeli olarak hizmet edebilir!
기본 설정, Verileri widget'lara geçirmek için süslü bir terim olan dependency injection Için Kullanılabilir.

플러그인(eklenti)



Flutter 프로젝트 provider eklentisini ekleyerek başlayalım.

pubspec.yaml dosyanıza gidin ve cupertino_icons eklentisini (플러그인) arayın. Bunun altına, uygulamanız için ihtiyaç duyacağınız eklentileri ekleyebilirsiniz. 공급자 paketini de buraya ekleyelim.

cupertino_icons: ^1.0.4
provider: ^6.0.2



Bu yapıldıktan sonra pub get komutunu çalıştırın. Android Studio kullanıyorsanız, sağ üst köşede Pub get seçeneğini goreceksiniz. VS Code'u kullanırsanız, dosyayı kaydederseniz komut otomatik olarak çalışır.

ChangeNotifier 에클레메



공급자는 프로젝트를 완료할 수 있도록 지원합니다. Verileri tüketmeye başlamadan önce bir ChangeNotifier uygulamamız gerekiyor. Bu, Kişi listemize bir şey eklendiğinde, güncellendiğinde veya kaldırıldığında verileri tüketen tüm widget'lara bildirir.

lib içinde provider adında eni bir klasör olusturuyoruz ve bunun içinde contact-provider.dart adında bir dosya olusturuyoruz.

import '../model/contact.dart';
import 'package:flutter/material.dart';

class ContactProvider extends ChangeNotifier {
  List<Contact> _contactList = [];

  List<Contact> get contacts {
    return [..._contactList];
  }

  set contacts(List<Contact> newContacts) {
    _contactList = newContacts;
    notifyListeners();
  }

  void addContact(Contact newContact) {
    _contactList.add(newContact);
    notifyListeners();
  }

  void removeContact(int index) {
    _contactList.removeAt(index);
    notifyListeners();
  }



Başlangıç ​​​​olarak, ContactProvider 및 ChangeNotifier 확장하기 Bu, uygulamamızdaki verileri güncellemek için kullanacağımız notifyListeners() yöntemine erişmemizi sağlar.

Bir getter ve setter kullanılarak erişilebilen özel bir kişi listemiz _contactList var. addContact() 및 removeContact() yöntemlerimiz var. 그녀의 이미지를 확인하세요. 알림을 받을 수 있습니다.

Bu yapıldıktan sonra, main.dart dosyamıza gidiyoruz ve MaterialApp'imiz bir MultiProvider() widget'ına sarıyoruz. MultiProvider'da, Uygulama içinde Kullanmak istediğimiz tüm provider'ların bir listesini beyan ederiz.

main.dart dosyamız şöyle gorünmelidir:

import 'package:contacts_app/provider/contact-provider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'contacts-page.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider.value(value: ContactProvider()),
      ],
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.purple,
          visualDensity: VisualDensity.adaptivePlatformDensity,
        ),
        home: ContactsPage(),
      ),
    );
  }
}


Provider'ı 쿨란막



Artık change listener kurulumumuzu yaptığımıza gore, contact-page.dart dosyasına geri dönelim. Kişiler listesini aldığımızda provider'ı güncelleyebilmemiz için _getContacts() yöntemini değiştiiriz .

  void _getContacts() async {
    await Future.delayed(Duration(milliseconds: 200));
    ContactProvider contactProvider =
        Provider.of<ContactProvider>(context, listen: false);
    contactProvider.contacts = dummyData;
  }


Provider'ımızı başlatıyoruz ve providerdaki kişilerimizi güncelliyoruz. Provider'ınızı başlatırken은 parametresini false olarak ayarlamayı unutmayın을 듣습니다. Provider'ı yalnızca verilerinize erişmek için kullanırsınız, değişiklikleri dinlemek için değil.

Artık verileri elde ettiğimize gore, geriye kalan bir sonraki şey, bu verileri ListView'de tüketmek. Bunu _buildListView() yonteminde yapıyoruz.

 Widget _buildListView(context) {
    return Consumer<ContactProvider>(
      builder: (context, snapshot, child) {
        return ListView.builder(
          itemBuilder: (context, index) => ContactCard(
            index: index,
            contact: snapshot.contacts[index],
            updateCallback: _updateContact,
            deleteCallback: () => snapshot.removeContact(index),
          ),
          itemCount: snapshot.contacts.length,
        );
      },
    );
  }


ListView'imizi, türünün ContactProvider 이전 버전 0Consumer<T>() 위젯'이나 사리요루즈. Tüketici olusturucu işlevi bize bir context, model ve alt değişkenler verir. Model Bize ListView'imizi doldurmak için kullandığımız kişileri sağlar. Aşağıdaki kişi listemiz için kullanıcı arayüzünü gorebilirsiniz.



Bu yazıda Provider ve Consumer'ın nasıl kullanılacağına ve ChangeNotifiers konularına goz attık ve provider'ı, contact uygulamamızı oluşturmak için kullandık.

Kodun tamamına ulaşmak için: https://github.com/gulsenkeskin/contacts_app

reference

좋은 웹페이지 즐겨찾기