Flutter'da ProxyProvider ile Veri Enjeksiyonu

Güncelleme tarihi: 19 Mar

Bu mobide ProxyProvider’ın ne olduğunu, kolaylıklarıyla birlikte nerede ve nasıl kullanılacağını öğrenebilirsiniz.


Görsel Referansı


Başlamadan Önce


ProxyProvider’ı daha iyi anlamanız için eğer Provider konusunda eksileriniz varsa bu mobiyi inceleyebilirsiniz.


Başlangıç


ProxyProvider, ilk başta anlaşılması biraz karmaşık gelse de anladıktan sonra ne kadar kullanışlı bir yapı olduğunun farkına varacaksınız. Basit bir şekilde açıklamak gerekirse ProxyProvider, diğer Provider’lardan gelen değerleri yeni bir nesneye birleştiren ve sonucu Provider’a gönderen bir Provider türüdür.


Peki ProxyProvider'ın Provider’dan farkı nedir? Flutter dökümanı pub.dev'de Provider için DON’T create your object from variables that can change over time ibaresi belirtilir. Yani Provider kullanırken değişken değer kullanmamamız gerektiğini açıklıyor. Herhangi bir veri değişikliğinde, Provider kendini güncellemezken update parametresi ile ProxyProvider child widget’ını güncelleyecektir.


Sayaç Uygulaması


Bunu kod üstünde ProxyProvider0 kullanarak görebilirsiniz, yazının ilerleyen kısmında ProxyProvider türlerinden ve arasındaki farklılıklardan da bahsedilecek.


import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(primarySwatch: Colors.blue),
      debugShowCheckedModeBanner: false,
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _increasecounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: ProxyProvider0<int>(
          update: (context, _) => _counter,
          child: const CounterNumber(),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _increasecounter,
        child: const Icon(Icons.add),
      ),
    );
  }
}

class CounterNumber extends