diff --git a/integration_test/search_test.dart b/integration_test/search_test.dart
index 75b55ec..3d5ce15 100644
--- a/integration_test/search_test.dart
+++ b/integration_test/search_test.dart
@@ -11,8 +11,8 @@ import 'package:http_mock_adapter/http_mock_adapter.dart';
import 'data/api_data.dart';
void main() {
- final dioAdapter = DioAdapter();
final dio = Dio();
+ final dioAdapter = DioAdapter(dio: dio);
setUpAll(() {
dio.httpClientAdapter = dioAdapter;
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 6b4c0f7..f2872cf 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 8.0
+ 9.0
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index ec2e8c3..468d9fb 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -24,9 +24,9 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/shared_preferences/ios"
SPEC CHECKSUMS:
- Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
+ Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec
- integration_test: 6eb66a19f7104200dcfdd62bc0077e1b09686e4f
+ integration_test: 7db6d89f336f671dcbc7563ee27a5b08f6f8aee1
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
diff --git a/lib/constants/app_theme.dart b/lib/constants/app_theme.dart
index 4334fb8..694be2a 100644
--- a/lib/constants/app_theme.dart
+++ b/lib/constants/app_theme.dart
@@ -9,15 +9,11 @@ class AppTheme {
unselectedItemColor: Colors.white70),
appBarTheme: AppBarTheme(
color: Colors.blueGrey,
- brightness: Brightness.dark,
),
scaffoldBackgroundColor: Colors.white,
- accentColor: Colors.black54,
- brightness: Brightness.light,
cardColor: Colors.grey[500],
unselectedWidgetColor: Colors.black45,
focusColor: Colors.black,
- primarySwatch: Colors.blueGrey,
textTheme: TextTheme(
headline1: TextStyle(
color: Colors.black, fontSize: 40, fontWeight: FontWeight.w500),
@@ -36,6 +32,8 @@ class AppTheme {
subtitle2: TextStyle(
color: Colors.black, fontSize: 16, fontWeight: FontWeight.bold),
),
+ colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.blueGrey)
+ .copyWith(secondary: Colors.black54),
);
static final ThemeData dark = ThemeData(
@@ -46,13 +44,9 @@ class AppTheme {
unselectedItemColor: Colors.white70),
appBarTheme: AppBarTheme(
color: Colors.black,
- brightness: Brightness.dark,
),
scaffoldBackgroundColor: Colors.black,
- accentColor: Colors.white54,
- brightness: Brightness.dark,
focusColor: Colors.white,
- primarySwatch: Colors.blueGrey,
textTheme: TextTheme(
headline1: TextStyle(
color: Colors.white, fontSize: 40, fontWeight: FontWeight.w500),
@@ -70,5 +64,7 @@ class AppTheme {
color: Colors.white70, fontSize: 14, fontWeight: FontWeight.normal),
subtitle2: TextStyle(
color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold)),
+ colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.blueGrey)
+ .copyWith(secondary: Colors.white54),
);
}
diff --git a/lib/main.dart b/lib/main.dart
index 6647061..154ddeb 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,7 +1,6 @@
import 'package:cryptocurrency_app/constants/app_theme.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'provider/settings_provider.dart';
@@ -20,12 +19,12 @@ void main() async {
child: ProviderScope(child: MyApp())));
}
-class MyApp extends HookWidget {
+class MyApp extends HookConsumerWidget {
MyApp({Key? key}) : super(key: key);
@override
- Widget build(BuildContext context) {
- final settings = useProvider(cryptoSettings);
+ Widget build(BuildContext context, WidgetRef ref) {
+ final settings = ref.watch(cryptoSettings);
final themeMode = settings.maybeWhen(
data: (data) => Utils.getThemeMode(data.themeMode),
diff --git a/lib/ui/home.dart b/lib/ui/home.dart
index 78855de..d86c9a8 100644
--- a/lib/ui/home.dart
+++ b/lib/ui/home.dart
@@ -4,17 +4,16 @@ import 'package:cryptocurrency_app/ui/screens/home.dart';
import 'package:cryptocurrency_app/ui/screens/search.dart';
import 'package:cryptocurrency_app/ui/screens/settings.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:easy_localization/easy_localization.dart';
import '../generated/locale_keys.g.dart';
-class Home extends HookWidget {
+class Home extends HookConsumerWidget {
const Home({Key? key}) : super(key: key);
@override
- Widget build(BuildContext context) {
- final navigation = useProvider(navigationProvider);
+ Widget build(BuildContext context, WidgetRef ref) {
+ final navigation = ref.watch(navigationProvider);
return Scaffold(
body: currentScreen(navigation.index),
@@ -22,7 +21,7 @@ class Home extends HookWidget {
key: Keys.NAV_BAR,
currentIndex: navigation.index,
onTap: (index) {
- context.read(navigationProvider.notifier).selectPage(index);
+ ref.read(navigationProvider.notifier).selectPage(index);
},
items: [
BottomNavigationBarItem(
diff --git a/lib/ui/screens/details.dart b/lib/ui/screens/details.dart
index 64cc9ce..09e883b 100644
--- a/lib/ui/screens/details.dart
+++ b/lib/ui/screens/details.dart
@@ -7,16 +7,15 @@ import 'package:cryptocurrency_app/ui/widgets/details/time_bar_selector.dart';
import 'package:cryptocurrency_app/ui/widgets/line_chart.dart';
import 'package:cryptocurrency_app/ui/widgets/title_price.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
-class DetailsScreen extends HookWidget {
+class DetailsScreen extends HookConsumerWidget {
final Pair pair;
DetailsScreen({required this.pair});
@override
- Widget build(BuildContext context) {
- final graph = useProvider(graphDataProvider(pair));
+ Widget build(BuildContext context, WidgetRef ref) {
+ final graph = ref.watch(graphDataProvider(pair));
return Scaffold(
key: Keys.DETAILS_SCREEN,
diff --git a/lib/ui/screens/home.dart b/lib/ui/screens/home.dart
index d761929..433f367 100644
--- a/lib/ui/screens/home.dart
+++ b/lib/ui/screens/home.dart
@@ -4,16 +4,15 @@ import 'package:cryptocurrency_app/ui/widgets/favorite_pair.dart';
import 'package:cryptocurrency_app/ui/widgets/pair_tile.dart';
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:easy_localization/easy_localization.dart';
import '../../generated/locale_keys.g.dart';
-class HomeScreen extends HookWidget {
+class HomeScreen extends HookConsumerWidget {
@override
- Widget build(BuildContext context) {
- final pairs = useProvider(pairsProvider);
- final favoritePair = useProvider(favoritePairProvider);
+ Widget build(BuildContext context, WidgetRef ref) {
+ final pairs = ref.watch(pairsProvider);
+ final favoritePair = ref.watch(favoritePairProvider);
return Container(
key: Keys.HOME_SCREEN,
child: Column(
diff --git a/lib/ui/screens/search.dart b/lib/ui/screens/search.dart
index 5ebc4d0..31a1bbc 100644
--- a/lib/ui/screens/search.dart
+++ b/lib/ui/screens/search.dart
@@ -2,15 +2,14 @@ import 'package:cryptocurrency_app/constants/keys.dart';
import 'package:cryptocurrency_app/provider/crypto_provider.dart';
import 'package:cryptocurrency_app/ui/widgets/pair_tile.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:easy_localization/easy_localization.dart';
import '../../generated/locale_keys.g.dart';
-class SearchScreen extends HookWidget {
+class SearchScreen extends HookConsumerWidget {
@override
- Widget build(BuildContext context) {
- final pairs = useProvider(pairsSearchProvider);
+ Widget build(BuildContext context, WidgetRef ref) {
+ final pairs = ref.watch(pairsSearchProvider);
return Container(
key: Keys.SEARCH_SCREEN,
@@ -31,7 +30,7 @@ class SearchScreen extends HookWidget {
),
child: TextFormField(
key: Keys.SEARCH_TEXT_FIELD,
- initialValue: context.read(searchTextProvider).state,
+ initialValue: ref.read(searchTextProvider).state,
style: TextStyle(color: Colors.white, fontSize: 21),
decoration: new InputDecoration(
prefixIcon: new Icon(Icons.search,
@@ -40,7 +39,7 @@ class SearchScreen extends HookWidget {
hintStyle: new TextStyle(color: Colors.white),
border: InputBorder.none),
onChanged: (value) =>
- {context.read(searchTextProvider).state = value},
+ {ref.read(searchTextProvider).state = value},
),
),
Expanded(
diff --git a/lib/ui/screens/settings.dart b/lib/ui/screens/settings.dart
index 1fe8a86..eea1fb8 100644
--- a/lib/ui/screens/settings.dart
+++ b/lib/ui/screens/settings.dart
@@ -4,19 +4,19 @@ import 'package:cryptocurrency_app/models/markets/pair/pair.dart';
import 'package:cryptocurrency_app/provider/crypto_provider.dart';
import 'package:cryptocurrency_app/provider/settings_provider.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:settings_ui/settings_ui.dart';
import '../../generated/locale_keys.g.dart';
import 'package:cryptocurrency_app/constants/utils.dart' as Utils;
+import 'package:flutter_riverpod/flutter_riverpod.dart';
-class SettingScreen extends HookWidget {
+class SettingScreen extends HookConsumerWidget {
@override
- Widget build(BuildContext context) {
- final settings = useProvider(cryptoSettings);
- final exchanges = useProvider(exchangesProvider);
- final pairs = useProvider(pairsProvider);
+ Widget build(BuildContext context, WidgetRef ref) {
+ final settings = ref.watch(cryptoSettings);
+ final exchanges = ref.watch(exchangesProvider);
+ final pairs = ref.watch(pairsProvider);
final details =
settings.maybeWhen(data: (details) => details, orElse: () => null);
@@ -44,7 +44,7 @@ class SettingScreen extends HookWidget {
leading: Icon(Icons.language),
onPressed: (BuildContext ctx) =>
showLenguageSelectionDialog(
- context, details.currentLanguage)),
+ context, ref, details.currentLanguage)),
],
),
SettingsSection(
@@ -55,14 +55,15 @@ class SettingScreen extends HookWidget {
subtitle: details.favoriteExchange,
leading: Icon(Icons.graphic_eq),
onPressed: (BuildContext context) =>
- showExchangeSelectDialog(context, exchanges),
+ showExchangeSelectDialog(
+ context, ref, exchanges),
),
SettingsTile(
title: LocaleKeys.topPair.tr(),
subtitle: details.favoritePair,
leading: Icon(Icons.language),
onPressed: (BuildContext context) =>
- showTopPairSelectDialog(context, pairs)),
+ showTopPairSelectDialog(context, ref, pairs)),
],
),
SettingsSection(
@@ -74,7 +75,7 @@ class SettingScreen extends HookWidget {
leading: Icon(Icons.graphic_eq),
onPressed: (BuildContext context) =>
showThemeSelectDialog(
- context, details.themeMode),
+ context, ref, details.themeMode),
),
],
),
@@ -88,7 +89,7 @@ class SettingScreen extends HookWidget {
}
void showLenguageSelectionDialog(
- BuildContext context, String currentLenguage) {
+ BuildContext context, WidgetRef ref, String currentLenguage) {
showDialog(
context: context,
builder: (_) => AlertDialog(
@@ -105,7 +106,7 @@ class SettingScreen extends HookWidget {
onChanged: (value) async {
await context.setLocale(Locale('en'));
- context
+ ref
.read(cryptoSettings.notifier)
.setLenguage(LocaleKeys.english);
@@ -125,7 +126,7 @@ class SettingScreen extends HookWidget {
groupValue: LocaleKeys.spanish,
onChanged: (value) async {
await context.setLocale(Locale('es'));
- context
+ ref
.read(cryptoSettings.notifier)
.setLenguage(LocaleKeys.spanish);
Navigator.pop(context);
@@ -144,8 +145,8 @@ class SettingScreen extends HookWidget {
);
}
- void showExchangeSelectDialog(
- BuildContext context, AsyncValue> exchanges) {
+ void showExchangeSelectDialog(BuildContext context, WidgetRef ref,
+ AsyncValue> exchanges) {
showDialog(
context: context,
builder: (context) {
@@ -159,7 +160,7 @@ class SettingScreen extends HookWidget {
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
- context
+ ref
.read(cryptoSettings.notifier)
.setFavoriteExchange(data[index].symbol);
@@ -182,7 +183,7 @@ class SettingScreen extends HookWidget {
}
void showTopPairSelectDialog(
- BuildContext context, AsyncValue> pairs) {
+ BuildContext context, WidgetRef ref, AsyncValue> pairs) {
showDialog(
context: context,
builder: (context) {
@@ -200,7 +201,7 @@ class SettingScreen extends HookWidget {
children: [
GestureDetector(
onTap: () {
- context
+ ref
.read(cryptoSettings.notifier)
.setFavoritePair(data[index].pair);
Navigator.pop(context);
@@ -224,7 +225,8 @@ class SettingScreen extends HookWidget {
});
}
- void showThemeSelectDialog(BuildContext context, currentTheme) {
+ void showThemeSelectDialog(
+ BuildContext context, WidgetRef ref, currentTheme) {
showDialog(
context: context,
builder: (context) {
@@ -235,16 +237,14 @@ class SettingScreen extends HookWidget {
children: Utils.themeModes
.map((data) => GestureDetector(
onTap: () {
- context
- .read(cryptoSettings.notifier)
- .setTheme(data);
+ ref.read(cryptoSettings.notifier).setTheme(data);
Navigator.pop(context);
},
child: Row(
children: [
Radio(
onChanged: (value) {
- context
+ ref
.read(cryptoSettings.notifier)
.setTheme(value!);
Navigator.pop(context);
diff --git a/lib/ui/widgets/details/details_widget.dart b/lib/ui/widgets/details/details_widget.dart
index f906759..fa9d038 100644
--- a/lib/ui/widgets/details/details_widget.dart
+++ b/lib/ui/widgets/details/details_widget.dart
@@ -11,17 +11,17 @@ import 'ohlc_section.dart';
import 'order_book_section.dart';
import 'trades_section.dart';
-class DetailsWidget extends HookWidget {
+class DetailsWidget extends HookConsumerWidget {
final Pair pair;
const DetailsWidget({Key? key, required this.pair}) : super(key: key);
@override
- Widget build(BuildContext context) {
+ Widget build(BuildContext context, WidgetRef ref) {
final _controller = useTabController(initialLength: 4);
- final graph = useProvider(graphDataProvider(pair));
- final summary = useProvider(pairSummaryProvider(pair));
- final orderBook = useProvider(pairOrderBookProvider(pair));
- final trades = useProvider(tradesProvider(pair));
+ final graph = ref.watch(graphDataProvider(pair));
+ final summary = ref.watch(pairSummaryProvider(pair));
+ final orderBook = ref.watch(pairOrderBookProvider(pair));
+ final trades = ref.watch(tradesProvider(pair));
return Container(
child: Column(
diff --git a/lib/ui/widgets/details/time_bar_selector.dart b/lib/ui/widgets/details/time_bar_selector.dart
index 5f5bc10..3ef8d5c 100644
--- a/lib/ui/widgets/details/time_bar_selector.dart
+++ b/lib/ui/widgets/details/time_bar_selector.dart
@@ -1,13 +1,12 @@
import 'package:cryptocurrency_app/provider/time_provider.dart';
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
-class TimeBarSelector extends HookWidget {
+class TimeBarSelector extends HookConsumerWidget {
@override
- Widget build(BuildContext context) {
- final time = useProvider(timeDataProvider);
+ Widget build(BuildContext context, WidgetRef ref) {
+ final time = ref.watch(timeDataProvider);
return Container(
padding: EdgeInsets.symmetric(horizontal: 15),
diff --git a/lib/ui/widgets/pair_tile.dart b/lib/ui/widgets/pair_tile.dart
index 97e47a8..07f69c9 100644
--- a/lib/ui/widgets/pair_tile.dart
+++ b/lib/ui/widgets/pair_tile.dart
@@ -4,23 +4,22 @@ import 'package:cryptocurrency_app/models/markets/pair/pair.dart';
import 'package:cryptocurrency_app/provider/crypto_provider.dart';
import 'package:cryptocurrency_app/ui/screens/details.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:cryptocurrency_app/constants/utils.dart' as Utils;
import 'line_chart.dart';
-final currentPair = ScopedProvider(null);
+final currentPair = Provider((ref) => Pair(exchange: "", pair: ""));
-class PairTile extends HookWidget {
+class PairTile extends HookConsumerWidget {
const PairTile();
@override
- Widget build(BuildContext context) {
- final pair = useProvider(currentPair);
- final summary = useProvider(pairSummaryProvider(pair));
- final graph = useProvider(graphDataProvider(pair));
+ Widget build(BuildContext context, WidgetRef ref) {
+ final pair = ref.watch(currentPair);
+ final summary = ref.watch(pairSummaryProvider(pair));
+ final graph = ref.watch(graphDataProvider(pair));
return Container(
key: Keys.PAIR_TILE,
diff --git a/lib/ui/widgets/title_price.dart b/lib/ui/widgets/title_price.dart
index 973b3f3..0a0d1d4 100644
--- a/lib/ui/widgets/title_price.dart
+++ b/lib/ui/widgets/title_price.dart
@@ -3,18 +3,17 @@ import 'package:cryptocurrency_app/models/markets/pair/pair.dart';
import 'package:cryptocurrency_app/provider/crypto_provider.dart';
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
-import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:easy_localization/easy_localization.dart';
-class TitlePrice extends HookWidget {
+class TitlePrice extends HookConsumerWidget {
final Pair pair;
TitlePrice({required this.pair});
@override
- Widget build(BuildContext context) {
- final data = useProvider(pairSummaryProvider(pair));
+ Widget build(BuildContext context, WidgetRef ref) {
+ final data = ref.watch(pairSummaryProvider(pair));
return data.when(
data: (data) {
diff --git a/pubspec.lock b/pubspec.lock
index 3649ef8..6343ab6 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -273,7 +273,7 @@ packages:
source: sdk
version: "0.0.0"
flutter_hooks:
- dependency: "direct main"
+ dependency: transitive
description:
name: flutter_hooks
url: "https://pub.dartlang.org"
@@ -299,12 +299,12 @@ packages:
source: hosted
version: "1.2.0"
flutter_riverpod:
- dependency: transitive
+ dependency: "direct main"
description:
name: flutter_riverpod
url: "https://pub.dartlang.org"
source: hosted
- version: "0.12.4"
+ version: "1.0.0-dev.6"
flutter_secure_storage:
dependency: "direct main"
description:
@@ -368,7 +368,7 @@ packages:
name: hooks_riverpod
url: "https://pub.dartlang.org"
source: hosted
- version: "0.12.4"
+ version: "1.0.0-dev.6"
http_mock_adapter:
dependency: "direct dev"
description:
@@ -569,7 +569,7 @@ packages:
name: riverpod
url: "https://pub.dartlang.org"
source: hosted
- version: "0.12.4"
+ version: "1.0.0-dev.6"
settings_ui:
dependency: "direct main"
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 8c8714a..5194442 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -19,33 +19,33 @@ version: 1.0.0+1
environment:
sdk: '>=2.12.0 <3.0.0'
-
+
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.0
- flutter_hooks:
- hooks_riverpod:
+ hooks_riverpod: 1.0.0-dev.6
+ flutter_riverpod: 1.0.0-dev.6
dio: ^4.0.0
flutter_dotenv: ^5.0.0
- fl_chart: ^0.36.1
+ fl_chart: ^0.36.1
settings_ui: ^1.0.0
auto_size_text: ^3.0.0-nullsafety.0
- flutter_secure_storage: ^4.1.0
+ flutter_secure_storage: ^4.1.0
easy_localization: ^3.0.0
freezed_annotation:
flutter_candlesticks:
git: https://github.com/salvadordeveloper/flutter-candlesticks.git
mockito: ^5.0.9
-
+
dev_dependencies:
integration_test:
sdk: flutter
flutter_test:
sdk: flutter
http_mock_adapter: ^0.3.2
- build_runner:
- freezed:
+ build_runner:
+ freezed:
json_serializable:
flutter_launcher_icons: ^0.9.0
flutter_native_splash: ^1.1.8+4