38 lines
1.5 KiB
Dart
38 lines
1.5 KiB
Dart
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||
|
|
import 'package:dio/dio.dart';
|
||
|
|
|
||
|
|
class ConversionUnit {
|
||
|
|
final String name;
|
||
|
|
final String symbol;
|
||
|
|
final String category;
|
||
|
|
final double rateToValue;
|
||
|
|
|
||
|
|
ConversionUnit({required this.name, required this.symbol, required this.category, required this.rateToValue});
|
||
|
|
}
|
||
|
|
|
||
|
|
class ConverterNotifier extends StateNotifier<List<ConversionUnit>> {
|
||
|
|
ConverterNotifier() : super(_initialUnits);
|
||
|
|
|
||
|
|
static final List<ConversionUnit> _initialUnits = [
|
||
|
|
ConversionUnit(name: 'Chilometri', symbol: 'km', category: 'Distanza', rateToValue: 1000),
|
||
|
|
ConversionUnit(name: 'Metri', symbol: 'm', category: 'Distanza', rateToValue: 1),
|
||
|
|
ConversionUnit(name: 'Kilogrammi', symbol: 'kg', category: 'Peso', rateToValue: 1),
|
||
|
|
ConversionUnit(name: 'Libbre', symbol: 'lb', category: 'Peso', rateToValue: 0.453592),
|
||
|
|
];
|
||
|
|
|
||
|
|
Future<void> fetchLiveRates() async {
|
||
|
|
try {
|
||
|
|
final response = await Dio().get('https://api.frankfurter.app/latest?from=EUR');
|
||
|
|
final rates = response.data['rates'] as Map<String, dynamic>;
|
||
|
|
state = [
|
||
|
|
...state,
|
||
|
|
ConversionUnit(name: 'Dollaro USA', symbol: 'USD', category: 'Valuta', rateToValue: rates['USD']),
|
||
|
|
ConversionUnit(name: 'Euro', symbol: 'EUR', category: 'Valuta', rateToValue: 1.0),
|
||
|
|
];
|
||
|
|
} catch (e) {
|
||
|
|
print("Errore API: $e");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
final converterProvider = StateNotifierProvider<ConverterNotifier, List<ConversionUnit>>((ref) => ConverterNotifier());
|