85 lines
2.2 KiB
Dart
85 lines
2.2 KiB
Dart
import 'package:autos/data/repositories/imports_repository_impl.dart';
|
|
import 'package:autos/domain/entities/import_product.dart';
|
|
import 'package:autos/presentation/providers/user_provider.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_riverpod/legacy.dart';
|
|
|
|
/// ✅ Repository Provider
|
|
final importsRepositoryProvider = Provider<ImportsRepository>(
|
|
(ref) => ImportsRepositoryImpl(ref.read(apiServiceProvider)),
|
|
);
|
|
|
|
/// ✅ Main Imports Provider
|
|
final importsProvider = StateNotifierProvider<
|
|
ImportsNotifier, AsyncValue<List<ImportProductEntity>>>(
|
|
(ref) => ImportsNotifier(ref.read(importsRepositoryProvider)),
|
|
);
|
|
class ImportsNotifier
|
|
extends StateNotifier<AsyncValue<List<ImportProductEntity>>> {
|
|
final ImportsRepository _repo;
|
|
|
|
ImportsNotifier(this._repo) : super(const AsyncLoading());
|
|
|
|
/// ✅ STATE
|
|
int _page = 1;
|
|
final int _pageSize = 48;
|
|
|
|
String _category = "All";
|
|
String _subcategory = "All";
|
|
|
|
int get currentPage => _page;
|
|
|
|
/// ✅ LOAD PRODUCTS FROM API
|
|
Future<void> loadProducts({bool resetPage = false}) async {
|
|
try {
|
|
if (resetPage) _page = 1;
|
|
|
|
state = const AsyncLoading();
|
|
|
|
debugPrint("📡 Fetching products");
|
|
debugPrint("➡ Page: $_page");
|
|
debugPrint("➡ Category: $_category");
|
|
debugPrint("➡ SubCategory: $_subcategory");
|
|
|
|
final products = await _repo.getUserProducts(
|
|
page: _page,
|
|
pageSize: _pageSize,
|
|
category: _category == "All" ? null : _category,
|
|
subcategory: _subcategory == "All" ? null : _subcategory,
|
|
);
|
|
|
|
state = AsyncData(products);
|
|
} catch (e, st) {
|
|
state = AsyncError(e, st);
|
|
}
|
|
}
|
|
|
|
/// ✅ CATEGORY CHANGE (RESETS SUBCATEGORY AUTOMATICALLY)
|
|
void changeCategory(String value) {
|
|
_category = value;
|
|
_subcategory = "All"; // ✅ RESET HERE
|
|
loadProducts(resetPage: true);
|
|
}
|
|
|
|
/// ✅ SUBCATEGORY CHANGE
|
|
void changeSubcategory(String value) {
|
|
_subcategory = value;
|
|
loadProducts(resetPage: true);
|
|
}
|
|
|
|
/// ✅ NEXT PAGE
|
|
void nextPage() {
|
|
_page++;
|
|
loadProducts();
|
|
}
|
|
|
|
/// ✅ PREVIOUS PAGE
|
|
void prevPage() {
|
|
if (_page > 1) {
|
|
_page--;
|
|
loadProducts();
|
|
}
|
|
}
|
|
}
|