Skip to content

Commit

Permalink
Change project infos
Browse files Browse the repository at this point in the history
  • Loading branch information
SepehrFakoori committed Jul 11, 2024
1 parent da847b4 commit 1fd3b99
Show file tree
Hide file tree
Showing 7 changed files with 491 additions and 238 deletions.
30 changes: 19 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
# currency_exchange_rate_app_flutter
# Currency Exchange Rate application using Flutter + GetIt + Dio

A new Flutter project.
## Descriptions
👋 Hey there!

## Getting Started
As part of my Flutter course, I developed an app for some practice. I used Bloc as state manager and GetIt for dependency injection and Dio requests. Overall, I'm pretty excited about how this project turned out and I hope you will enjoy it too! ❤️

This project is a starting point for a Flutter application.
## ScreenShots
<br />
<div>
&emsp;&emsp;&emsp;
<img src="https://github.com/SepehrFakoori/currency_exchange_rate_flutter_app/blob/1398995a4719494560f22370309db0bf22d8146d/assets/images/Splashscreen.png" alt="Splash Screen" width="180">
&emsp;&emsp;&emsp;&emsp;
<img src="https://github.com/SepehrFakoori/currency_exchange_rate_flutter_app/blob/1398995a4719494560f22370309db0bf22d8146d/assets/images/Loading.png" alt="Loading" width="180">
&emsp;&emsp;&emsp;&emsp;
<img src="https://github.com/SepehrFakoori/currency_exchange_rate_flutter_app/blob/1398995a4719494560f22370309db0bf22d8146d/assets/images/Homescreen.png" alt="Home Screen" width="180">
</div>
<br />

A few resources to get you started if this is your first Flutter project:
## My Socials:
* [INSTAGRAM](https://www.instagram.com/sepehrfakoori)
* [LINKEDIN](https://www.linkedin.com/in/sepehrfakoori)
* [CONTACT ME](https://sepehrfakoori99@gmail.com)

- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)

For help getting started with Flutter development, view the
[online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
50 changes: 36 additions & 14 deletions lib/data/datasource/price_datasource.dart
Original file line number Diff line number Diff line change
@@ -1,30 +1,33 @@
import 'package:currency_exchange_rate_app_flutter/data/model/crypto_currency.dart';
import 'package:currency_exchange_rate_app_flutter/data/model/coin.dart';
import 'package:currency_exchange_rate_app_flutter/data/model/currency.dart';
import 'package:currency_exchange_rate_app_flutter/data/model/gold.dart';
import 'package:currency_exchange_rate_app_flutter/di/di.dart';
import 'package:currency_exchange_rate_app_flutter/util/api_exception.dart';
import 'package:currency_exchange_rate_app_flutter/util/map_to_list_convertor.dart';
import 'package:dio/dio.dart';

abstract class ICryptoCurrencyDataSource {
Future<List<CryptoCurrency>> getCryptoCurrencies();

abstract class IPriceDataSource {
Future<List<Currency>> getCurrencies();

Future<List<Gold>> getGolds();

Future<List<Coin>> getCoins();
}

class CryptoCurrencyRemoteDatasource extends ICryptoCurrencyDataSource {
class PriceRemoteDatasource extends IPriceDataSource {
final Dio _dio = locator.get();

@override
Future<List<CryptoCurrency>> getCryptoCurrencies() async {
Future<List<Currency>> getCurrencies() async {
try {
Map<String, dynamic> qParams = {
"token": "440714:668d2eb4c7b96",
"action": "tgju",
};
var response =
await _dio.get("DigitalCurrency/", queryParameters: qParams);
return response.data["result"]
.map<CryptoCurrency>(
(jsonObject) => CryptoCurrency.fromMapJson(jsonObject))
var response = await _dio.get("price/", queryParameters: qParams);
var result = convertMap(response.data, "currencies");
return result
.map<Currency>((jsonObject) => Currency.fromMapJson(jsonObject))
.toList();
} on DioException catch (ex) {
throw ApiException(ex.response!.statusCode, ex.response!.statusMessage);
Expand All @@ -34,16 +37,35 @@ class CryptoCurrencyRemoteDatasource extends ICryptoCurrencyDataSource {
}

@override
Future<List<Currency>> getCurrencies() async {
Future<List<Gold>> getGolds() async {
try {
Map<String, dynamic> qParams = {
"token": "440714:668d2eb4c7b96",
"action": "tgju",
};
var response = await _dio.get("price/", queryParameters: qParams);
var result = convertMap(response.data, "currencies");
var result = convertMap(response.data, "gold");
return result
.map<Currency>((jsonObject) => Currency.fromMapJson(jsonObject))
.map<Gold>((jsonObject) => Gold.fromMapJson(jsonObject))
.toList();
} on DioException catch (ex) {
throw ApiException(ex.response!.statusCode, ex.response!.statusMessage);
} catch (ex) {
throw ApiException(0, "Unknown Error!");
}
}

@override
Future<List<Coin>> getCoins() async {
try {
Map<String, dynamic> qParams = {
"token": "440714:668d2eb4c7b96",
"action": "tgju",
};
var response = await _dio.get("price/", queryParameters: qParams);
var result = convertMap(response.data, "coin");
return result
.map<Coin>((jsonObject) => Coin.fromMapJson(jsonObject))
.toList();
} on DioException catch (ex) {
throw ApiException(ex.response!.statusCode, ex.response!.statusMessage);
Expand Down
35 changes: 24 additions & 11 deletions lib/data/repository/price_repository.dart
Original file line number Diff line number Diff line change
@@ -1,34 +1,47 @@
import 'package:currency_exchange_rate_app_flutter/data/datasource/crypto_currency_datasource.dart';
import 'package:currency_exchange_rate_app_flutter/data/model/crypto_currency.dart';
import 'package:currency_exchange_rate_app_flutter/data/datasource/price_datasource.dart';
import 'package:currency_exchange_rate_app_flutter/data/model/coin.dart';
import 'package:currency_exchange_rate_app_flutter/data/model/currency.dart';
import 'package:currency_exchange_rate_app_flutter/data/model/gold.dart';
import 'package:currency_exchange_rate_app_flutter/di/di.dart';
import 'package:currency_exchange_rate_app_flutter/util/api_exception.dart';
import 'package:dartz/dartz.dart';


abstract class ICryptoCurrencyRepository {
Future<Either<String, List<CryptoCurrency>>> getCryptoCurrencies();

abstract class IPriceRepository {
Future<Either<String, List<Currency>>> getCurrencies();

Future<Either<String, List<Gold>>> getGolds();

Future<Either<String, List<Coin>>> getCoins();
}

class CryptoCurrencyRepository extends ICryptoCurrencyRepository {
final ICryptoCurrencyDataSource _dataSource = locator.get();
class PriceRepository extends IPriceRepository {
final IPriceDataSource _dataSource = locator.get();

@override
Future<Either<String, List<CryptoCurrency>>> getCryptoCurrencies() async {
Future<Either<String, List<Currency>>> getCurrencies() async {
try {
var response = await _dataSource.getCryptoCurrencies();
var response = await _dataSource.getCurrencies();
return right(response);
} on ApiException catch (ex) {
return left(ex.message ?? "Text Error We Got!");
}
}

@override
Future<Either<String, List<Currency>>> getCurrencies() async {
Future<Either<String, List<Gold>>> getGolds() async {
try {
var response = await _dataSource.getCurrencies();
var response = await _dataSource.getGolds();
return right(response);
} on ApiException catch (ex) {
return left(ex.message ?? "Text Error We Got!");
}
}

@override
Future<Either<String, List<Coin>>> getCoins() async {
try {
var response = await _dataSource.getCoins();
return right(response);
} on ApiException catch (ex) {
return left(ex.message ?? "Text Error We Got!");
Expand Down
8 changes: 4 additions & 4 deletions lib/di/di.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import 'package:currency_exchange_rate_app_flutter/data/datasource/crypto_currency_datasource.dart';
import 'package:currency_exchange_rate_app_flutter/data/repository/crypto_currency_repository.dart';
import 'package:currency_exchange_rate_app_flutter/data/datasource/price_datasource.dart';
import 'package:currency_exchange_rate_app_flutter/data/repository/price_repository.dart';
import 'package:dio/dio.dart';
import 'package:get_it/get_it.dart';

var locator = GetIt.instance;

Future<void> getItInit() async {
locator.registerSingleton<Dio>(Dio(BaseOptions(baseUrl: "https://one-api.ir/")));
locator.registerSingleton<ICryptoCurrencyDataSource>(CryptoCurrencyRemoteDatasource());
locator.registerSingleton<ICryptoCurrencyRepository>(CryptoCurrencyRepository());
locator.registerSingleton<IPriceDataSource>(PriceRemoteDatasource());
locator.registerSingleton<IPriceRepository>(PriceRepository());
}
8 changes: 4 additions & 4 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:currency_exchange_rate_app_flutter/bloc/crypto/crypto_bloc.dart';
import 'package:currency_exchange_rate_app_flutter/bloc/crypto/crypto_event.dart';
import 'package:currency_exchange_rate_app_flutter/bloc/home/home_bloc.dart';
import 'package:currency_exchange_rate_app_flutter/bloc/home/home_event.dart';
import 'package:currency_exchange_rate_app_flutter/constants/app_colors.dart';
import 'package:currency_exchange_rate_app_flutter/di/di.dart';
import 'package:currency_exchange_rate_app_flutter/screens/home_screen.dart';
Expand Down Expand Up @@ -40,8 +40,8 @@ class MyApp extends StatelessWidget {
),
home: BlocProvider(
create: (context) {
var bloc = CryptoBloc();
bloc.add(CryptoInitializeEvent());
var bloc = HomeBloc();
bloc.add(HomeInitializeEvent());
return bloc;
},
child: const HomeScreen(),
Expand Down
Loading

0 comments on commit 1fd3b99

Please sign in to comment.