Files
velocity-pay-flutter/lib/screens/home/home_controller.dart
2025-06-26 14:43:25 +02:00

76 lines
1.9 KiB
Dart

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:qpay/http/http.dart';
part 'home_controller.freezed.dart';
part 'home_controller.g.dart';
class HomeScreenModel {
List<dynamic> transactions = [];
List<Category> categories = [];
dynamic account = {};
dynamic profile = {};
bool isLoading = false;
bool isLoggedIn = false;
String? errorMessage;
}
@freezed
abstract class Category with _$Category {
const factory Category({
required String name,
required String description,
required String? image,
required String label,
}) = _Category;
factory Category.fromJson(Map<String, dynamic> json) =>
_$CategoryFromJson(json);
}
var logger = Logger(printer: PrettyPrinter());
class HomeController extends ChangeNotifier {
final HomeScreenModel model = HomeScreenModel();
final Http http = Http();
Future<void> getCategories() async {
// activate skeletonizer
model.categories = getFakeCategoryData();
// Simulate fetching categories
try {
model.isLoading = true;
List<dynamic> response = await http.get('/categories');
model.categories = response.map((e) => Category.fromJson(e)).toList();
} on DioException catch (e) {
logger.e(e);
model.errorMessage = e.type.name;
model.categories = [];
}
model.isLoading = false;
notifyListeners();
}
// required by skeletonizer
List<Category> getFakeCategoryData() {
return [
Category(
name: 'Electricity',
description: 'Pay your electricity bills easily',
image: 'assets/images/electricity.png',
label: 'Electricity',
),
Category(
name: 'Internet',
description: 'Pay your internet bills easily',
image: 'assets/images/internet.png',
label: 'Internet',
),
];
}
}