Flutter & Mobil İle İleri Düzey Karmaşık Veri Filtreleme Sistemi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

İleri düzey bir filtreleme sistemi kurmak için Flutter SDK 3.24 ve üzeri sürümleri kullanmanız önerilir. Ayrıca durum yönetimi (state management) için Riverpod veya Bloc kütüphanelerinden birine hakim olmanız, karmaşık filtreleme mantıklarını ayrıştırmanızı kolaylaştıracaktır. Bu rehberde, performans avantajları nedeniyle Riverpod yapısını temel alacağız.

  • Flutter SDK: 3.24.0+
  • State Management: flutter_riverpod
  • Veri İşleme: collection paketi (liste operasyonları için)
  • Geliştirme Ortamı: VS Code veya Android Studio

Adım 1: Veri Modeli ve Filtreleme Kriterlerini Tanımlama

Karmaşık filtreleme sistemlerinde ilk adım, verinin nasıl modelleneceğini belirlemektir. Filtreleme kriterlerini bir nesne içerisinde toplamak, kodun okunabilirliğini ve yönetilebilirliğini artırır. Aşağıdaki örnekte, bir e-ticaret ürünü için filtreleme kriterlerini tanımlıyoruz.

class FilterCriteria {
  final String searchQuery;
  final double minPrice;
  final double maxPrice;
  final List categories;

  FilterCriteria({
    this.searchQuery = '',
    this.minPrice = 0.0,
    this.maxPrice = double.infinity,
    this.categories = const [],
  });
}

Bu model, filtreleme mantığının temelini oluşturur. FilterCriteria sınıfı, uygulamanın farklı bölümlerinde tutarlı bir şekilde kullanılacaktır.

Adım 2: Filtreleme Mantığını (Business Logic) Oluşturma

Filtreleme mantığını UI kodundan ayırmak, test edilebilirliği artırır. Burada StateNotifier kullanarak, kriterler her değiştiğinde filtrelenmiş veriyi otomatik olarak güncelleyen bir yapı kuracağız.

class ProductNotifier extends StateNotifier {
  final List allProducts;

  ProductNotifier(this.allProducts) : super(allProducts);

  void filter(FilterCriteria criteria) {
    state = allProducts.where((product) {
      final matchesQuery = product.name.toLowerCase().contains(criteria.searchQuery.toLowerCase());
      final matchesPrice = product.price >= criteria.minPrice && product.price


Adım 3: Performans Optimizasyonu ve Büyük Veri Setleri

Uygulamanızda binlerce ürünle çalıştığınızda, her filtreleme işleminde tüm listeyi yeniden taramak (re-filtering) ana iş parçacığını (main thread) kilitleyebilir. Bu durum UI'da takılmalara neden olur. Performansı artırmak için debounce mekanizması ve compute fonksiyonu kullanarak işlemleri arka plana taşıyabiliriz.

Öncelikle, kullanıcı her tuşa bastığında filtreleme tetiklenmesin diye bir geciktirme (debounce) uygulayalım:

import 'dart:async';

class SearchDebouncer {
  final Duration delay;
  Timer? _timer;

  SearchDebouncer({required this.delay});

  void run(void Function() action) {
    _timer?.cancel();
    _timer = Timer(delay, action);
  }
}

Büyük veri setlerinde filtreleme mantığını compute fonksiyonu ile izole bir izole (isolate) içerisinde çalıştırmak, uygulamanın 60 FPS performansını korumasını sağlar:

import 'package:flutter/foundation.dart';

// Bu fonksiyon ana thread dışında çalışır
List filterProducts(Map args) {
  final allProducts = args['products'] as List;
  final criteria = args['criteria'] as FilterCriteria;

  return allProducts.where((product) {
    return product.name.contains(criteria.searchQuery) && 
           product.price                
Bu yazıya tepkinizi paylaşın:
Deniz Arslan

On yıllık içerik üretim deneyimiyle karmaşık süreçleri herkesin anlayabileceği pratik rehberlere dönüştürüyorum. Günlük yaşamı kolaylaştıran çözümler üzerine uzmanlaşmış bir editörüm.

Yorumlar (0)

Yorum Yaz