Skip to content

Commit

Permalink
implemented graphs and percentages, ready for release
Browse files Browse the repository at this point in the history
  • Loading branch information
yosraemad committed Aug 26, 2020
1 parent 58ac561 commit 9cd6d65
Show file tree
Hide file tree
Showing 11 changed files with 171 additions and 41 deletions.
3 changes: 1 addition & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ android {
}

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).

applicationId "com.example.corona_app"
minSdkVersion 16
targetSdkVersion 28
Expand All @@ -47,7 +47,6 @@ android {

buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
Expand Down
4 changes: 2 additions & 2 deletions lib/src/data/corona_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ Future<CoronaData> fetchData(String country) async {
Map<String, dynamic> last8Days;
if (country == "Worldwide") {
response = await http.get(apiUrl + "/all?allowNull=true");
last8DaysResponse = await http.get(apiUrl + "/historical/all?lastdays=8");
last8DaysResponse = await http.get(apiUrl + "/historical/all?lastdays=4");
last8Days = json.decode(last8DaysResponse.body);
} else {
response = await http.get(apiUrl + "/countries/$country");
last8DaysResponse =
await http.get(apiUrl + "/historical/$country?lastdays=8");
await http.get(apiUrl + "/historical/$country?lastdays=4");
last8Days = json.decode(last8DaysResponse.body)["timeline"];
}
return CoronaData.fromMap(json.decode(response.body), last8Days);
Expand Down
5 changes: 5 additions & 0 deletions lib/src/models/chart_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class ChartsModel {
DateTime date;
int value;
ChartsModel(this.date, this.value);
}
79 changes: 73 additions & 6 deletions lib/src/models/corona_data.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import 'package:corona_app/src/models/chart_model.dart';
import 'package:intl/intl.dart';
import 'package:charts_flutter/flutter.dart' as charts;

class CoronaData {
String name;
String flag;
Expand All @@ -9,9 +13,9 @@ class CoronaData {
int todayRecovered;
int active;
int critical;
List<int> last8DaysCases = [];
List<int> last8DaysDeaths = [];
List<int> last8DaysRecovered = [];
List<ChartsModel> last8DaysCases = [];
List<ChartsModel> last8DaysDeaths = [];
List<ChartsModel> last8DaysRecovered = [];

CoronaData.fromMap(
Map<String, dynamic> rawjson, Map<String, dynamic> last8Days) {
Expand All @@ -31,13 +35,76 @@ class CoronaData {
Map<String, dynamic> lastDeaths = last8Days["deaths"];
Map<String, dynamic> lastRecovered = last8Days["recovered"];
lastCases.forEach((key, value) {
last8DaysCases.add(lastCases[key]);
last8DaysCases
.add(ChartsModel(DateFormat("M/d/yy").parse(key), lastCases[key]));
});
lastDeaths.forEach((key, value) {
last8DaysDeaths.add(lastDeaths[key]);
last8DaysDeaths
.add(ChartsModel(DateFormat("M/d/yy").parse(key), lastDeaths[key]));
});
lastRecovered.forEach((key, value) {
last8DaysRecovered.add(lastRecovered[key]);
last8DaysRecovered.add(
ChartsModel(DateFormat("M/d/yy").parse(key), lastRecovered[key]));
});
}

List<charts.Series<dynamic, DateTime>> createCasesChartSeries() {
return [
charts.Series<ChartsModel, DateTime>(
id: "Cases",
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (chart, _) => chart.date,
measureFn: (chart, _) => chart.value,
data: last8DaysCases,
)
];
}

List<charts.Series<dynamic, DateTime>> createDeathsChartSeries() {
return [
charts.Series<ChartsModel, DateTime>(
id: "Deaths",
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (chart, _) => chart.date,
measureFn: (chart, _) => chart.value,
data: last8DaysDeaths,
)
];
}

List<charts.Series<dynamic, DateTime>> createRecoveredChartSeries() {
return [
charts.Series<ChartsModel, DateTime>(
id: "Recovered",
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (chart, _) => chart.date,
measureFn: (chart, _) => chart.value,
data: last8DaysRecovered,
)
];
}

String get recoveredPercentage {
return (last8DaysRecovered[last8DaysRecovered.length - 1].value /
last8DaysRecovered[last8DaysRecovered.length - 2].value *
100 -
100)
.toStringAsFixed(2);
}

String get deathPercentage {
return (last8DaysDeaths[last8DaysDeaths.length - 1].value /
last8DaysDeaths[last8DaysDeaths.length - 2].value *
100 -
100)
.toStringAsFixed(2);
}

String get casesPercentage {
return (last8DaysCases[last8DaysCases.length - 1].value /
last8DaysCases[last8DaysCases.length - 2].value *
100 -
100)
.toStringAsFixed(2);
}
}
3 changes: 1 addition & 2 deletions lib/src/screens/main_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';

//TODO: Instructions
//TODO: Graphs and percentages
//TODO: percentages

class MainScreen extends StatefulWidget {
static final String routeName = "/main-screen";
Expand Down
65 changes: 41 additions & 24 deletions lib/src/widgets/bottomNavBarPages/home_body.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:corona_app/src/data/corona_api.dart';
import 'package:corona_app/src/models/corona_data.dart';
import 'package:corona_app/src/models/profile.dart';
import 'package:corona_app/src/providers/user_provider.dart';
import 'package:corona_app/src/widgets/chart.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:intl/intl.dart';
Expand Down Expand Up @@ -212,13 +213,19 @@ class _HomeBodyState extends State<HomeBody> {
),
),
),
Padding(
padding: EdgeInsets.only(top: 5.0),
child: Image(
width: 125,
height: 37.5,
image:
AssetImage("assets/images/closed_graph.png"),
Transform.scale(
scale: 1.2,
child: Transform.translate(
offset: const Offset(-10, -10),
child: Padding(
padding: EdgeInsets.only(bottom: 2.0),
child: SizedBox(
width: 130,
height: 37.5,
child:
Chart(data.createRecoveredChartSeries()),
),
),
),
),
],
Expand Down Expand Up @@ -284,7 +291,7 @@ class _HomeBodyState extends State<HomeBody> {
Column(
children: [
Text(
"+12%",
data.recoveredPercentage + "%",
style: TextStyle(
fontFamily: "WorkSansMedium",
fontSize: 20.0,
Expand Down Expand Up @@ -343,13 +350,18 @@ class _HomeBodyState extends State<HomeBody> {
),
),
),
Padding(
padding: EdgeInsets.only(top: 5.0),
child: Image(
width: 125,
height: 37.5,
image:
AssetImage("assets/images/death_graph.png"),
Transform.scale(
scale: 1.2,
child: Transform.translate(
offset: const Offset(-10, -10),
child: Padding(
padding: EdgeInsets.only(bottom: 2.0),
child: SizedBox(
width: 130,
height: 37.5,
child: Chart(data.createDeathsChartSeries()),
),
),
),
),
],
Expand All @@ -374,7 +386,7 @@ class _HomeBodyState extends State<HomeBody> {
Column(
children: [
Text(
"+12.6%",
data.deathPercentage + "%",
style: TextStyle(
fontFamily: "WorkSansMedium",
fontSize: 20.0,
Expand Down Expand Up @@ -474,13 +486,18 @@ class _HomeBodyState extends State<HomeBody> {
),
),
),
Padding(
padding: EdgeInsets.only(top: 5.0),
child: Image(
width: 125,
height: 37.5,
image:
AssetImage("assets/images/active_graph.png"),
Transform.scale(
scale: 1.2,
child: Transform.translate(
offset: const Offset(-10, -10),
child: Padding(
padding: EdgeInsets.only(bottom: 2.0),
child: SizedBox(
width: 130,
height: 37.5,
child: Chart(data.createCasesChartSeries()),
),
),
),
),
],
Expand All @@ -505,7 +522,7 @@ class _HomeBodyState extends State<HomeBody> {
Column(
children: [
Text(
"+25.7%",
data.casesPercentage + "%",
style: TextStyle(
fontFamily: "WorkSansMedium",
fontSize: 20.0,
Expand Down
1 change: 0 additions & 1 deletion lib/src/widgets/bottomNavBarPages/tasks_body.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import 'package:corona_app/src/providers/user_provider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

//TODO: REFRESH EVERY 24 HOURS
class TasksBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
Expand Down
21 changes: 21 additions & 0 deletions lib/src/widgets/chart.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;

class Chart extends StatelessWidget {
final List<charts.Series> seriesList;
final bool animate;
Chart(this.seriesList, {this.animate: false});
@override
Widget build(BuildContext context) {
return charts.TimeSeriesChart(
seriesList,
animate: animate,
dateTimeFactory: const charts.LocalDateTimeFactory(),
primaryMeasureAxis: charts.NumericAxisSpec(
tickProviderSpec: charts.BasicNumericTickProviderSpec(zeroBound: false),
renderSpec: charts.NoneRenderSpec(),
),
domainAxis: charts.DateTimeAxisSpec(renderSpec: charts.NoneRenderSpec()),
);
}
}
21 changes: 21 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.3"
charts_common:
dependency: transitive
description:
name: charts_common
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.0"
charts_flutter:
dependency: "direct main"
description:
name: charts_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.0"
clock:
dependency: transitive
description:
Expand Down Expand Up @@ -114,6 +128,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.16.1"
logging:
dependency: transitive
description:
name: logging
url: "https://pub.dartlang.org"
source: hosted
version: "0.11.4"
matcher:
dependency: transitive
description:
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ dependencies:
intl: ^0.16.1
webview_flutter: ^0.3.22+1
url_launcher: ^5.5.0
charts_flutter: ^0.9.0

dev_dependencies:
flutter_test:
Expand Down
9 changes: 5 additions & 4 deletions test/last_8_days_test.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import 'package:corona_app/src/data/corona_api.dart';
import 'package:corona_app/src/models/chart_model.dart';
import 'package:corona_app/src/models/corona_data.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
test("Testing Last 8 days data for Worldwide", () async {
CoronaData data = await fetchData("Worldwide");
print(data.last8DaysCases);
expect(data.last8DaysCases is List<int>, true);
print(data.last8DaysCases[0].date);
expect(data.last8DaysCases is List<ChartsModel>, true);
});
test("Testing Last 8 days data for a Country", () async {
CoronaData data = await fetchData("USA");
print(data.last8DaysCases);
expect(data.last8DaysCases is List<int>, true);
print(data.last8DaysCases[0].date);
expect(data.last8DaysCases is List<ChartsModel>, true);
});
}

0 comments on commit 9cd6d65

Please sign in to comment.