From 02f365d574be296673b7c2696bd6073f61b1ed53 Mon Sep 17 00:00:00 2001 From: HPatel000 Date: Thu, 18 Jun 2020 18:02:52 +0530 Subject: [PATCH] include global data --- lib/data/data_search.dart | 18 +++-- lib/data/global_info.dart | 24 ++++++ lib/data/global_page.dart | 62 +++++++++++++++ lib/screens/credits_screen.dart | 2 +- lib/screens/global_screen.dart | 45 +++++++++++ lib/screens/nation_screen.dart | 123 ++++++++++++++++++++++------- lib/screens/prevention_screen.dart | 2 +- lib/services/networking.dart | 4 + lib/widgets/coutries_stream.dart | 32 ++++++++ lib/widgets/list_tile_data.dart | 15 ++-- lib/widgets/reusable_card.dart | 4 +- 11 files changed, 280 insertions(+), 51 deletions(-) create mode 100644 lib/data/global_info.dart create mode 100644 lib/data/global_page.dart create mode 100644 lib/screens/global_screen.dart create mode 100644 lib/widgets/coutries_stream.dart diff --git a/lib/data/data_search.dart b/lib/data/data_search.dart index 081f51d..d7de941 100644 --- a/lib/data/data_search.dart +++ b/lib/data/data_search.dart @@ -50,10 +50,10 @@ class DataSearch extends SearchDelegate { ReusableFunction().getDistrictList(query, districtData); return SingleStateScreen( state: statewise[i]['state'], - active: statewise[i]['active'], - confirmed: statewise[i]['confirmed'], - deaths: statewise[i]['deaths'], - recovered: statewise[i]['recovered'], + active: double.tryParse(statewise[i]['active'].toString()), + confirmed: double.tryParse(statewise[i]['confirmed'].toString()), + deaths: double.tryParse(statewise[i]['deaths']), + recovered: double.tryParse(statewise[i]['recovered']), districtList: districtList, ); } else { @@ -89,10 +89,12 @@ class DataSearch extends SearchDelegate { builder: (context) { return SingleStateScreen( state: statewise[i]['state'], - active: statewise[i]['active'], - confirmed: statewise[i]['confirmed'], - deaths: statewise[i]['deaths'], - recovered: statewise[i]['recovered'], + active: double.tryParse( + statewise[i]['active'].toString()), + confirmed: double.tryParse( + statewise[i]['confirmed'].toString()), + deaths: double.tryParse(statewise[i]['deaths']), + recovered: double.tryParse(statewise[i]['recovered']), districtList: districtList, ); }, diff --git a/lib/data/global_info.dart b/lib/data/global_info.dart new file mode 100644 index 0000000..b5dc053 --- /dev/null +++ b/lib/data/global_info.dart @@ -0,0 +1,24 @@ +import 'package:covid19updates/services/networking.dart'; + +class GlobalInfo { + double gActive; + double gConfirmed; + double gDeaths; + double gRecovered; + List countriesData; + + Future getGlobalInfo() async { + var data = await NetworkHelper().getGlobalData(); + updateData(data); + } + + void updateData(data) { + this.gConfirmed = + double.tryParse((data['Global']['TotalConfirmed']).toString()); + gDeaths = double.tryParse((data['Global']['TotalDeaths']).toString()); + gRecovered = double.tryParse((data['Global']['TotalRecovered']).toString()); + gActive = gConfirmed - gRecovered - gDeaths; + countriesData = data['Countries']; + } +} +//Countries diff --git a/lib/data/global_page.dart b/lib/data/global_page.dart new file mode 100644 index 0000000..27fe9cb --- /dev/null +++ b/lib/data/global_page.dart @@ -0,0 +1,62 @@ +import 'package:covid19updates/data/global_info.dart'; +import 'package:covid19updates/screens/global_screen.dart'; +import 'package:flutter/material.dart'; +import 'package:connectivity/connectivity.dart'; +import 'package:provider/provider.dart'; +import '../screens/show_msg.dart'; + +class GlobalPage extends StatefulWidget { + @override + _GlobalPageState createState() => _GlobalPageState(); +} + +class _GlobalPageState extends State { + Future _start; + bool isConnected; + GlobalInfo _info = GlobalInfo(); + _getData() async { + return await _info.getGlobalInfo(); + } + + Future checkConnection() async { + var connection = await Connectivity().checkConnectivity(); + if (connection == ConnectivityResult.mobile || + connection == ConnectivityResult.wifi) { + isConnected = true; + } else { + isConnected = false; + } + } + + @override + void initState() { + super.initState(); + _start = _getData(); + checkConnection(); + } + + @override + Widget build(BuildContext context) { + return Provider( + create: (context) => _info, + child: Scaffold( + backgroundColor: Color(0xff1b1b2f), + body: FutureBuilder( + future: _start, + builder: (context, snapshot) { + switch (snapshot.connectionState) { + case ConnectionState.active: + case ConnectionState.waiting: + return ShowLoading(); + case ConnectionState.done: + return isConnected ? GlobalScreen() : ShowConnectionError(); + case ConnectionState.none: + default: + return ShowError(); + } + }, + ), + ), + ); + } +} diff --git a/lib/screens/credits_screen.dart b/lib/screens/credits_screen.dart index 9981680..64c1f6a 100644 --- a/lib/screens/credits_screen.dart +++ b/lib/screens/credits_screen.dart @@ -136,7 +136,7 @@ class LinkTile extends StatelessWidget { Widget build(BuildContext context) { return Container( padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 15.0), - margin: EdgeInsets.symmetric(vertical: 5.0, horizontal: 15.0), + margin: EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0), decoration: BoxDecoration( color: Color(0xff1f4068), borderRadius: BorderRadius.all(Radius.circular(50.0)), diff --git a/lib/screens/global_screen.dart b/lib/screens/global_screen.dart new file mode 100644 index 0000000..91eb17e --- /dev/null +++ b/lib/screens/global_screen.dart @@ -0,0 +1,45 @@ +import 'package:covid19updates/data/global_info.dart'; +import 'package:covid19updates/widgets/coutries_stream.dart'; +import 'package:covid19updates/widgets/curved_top.dart'; +import 'package:covid19updates/widgets/data_cards.dart'; +import 'package:covid19updates/widgets/top_title.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class GlobalScreen extends StatelessWidget { + @override + Widget build(BuildContext context) { + final GlobalInfo _info = Provider.of(context); + return CustomScrollView( + slivers: [ + SliverAppBar( + elevation: 0.0, + floating: true, + expandedHeight: 100, + title: Text('Covid-19 Updates', + style: TextStyle(fontSize: 20, color: Colors.white)), + flexibleSpace: FlexibleSpaceBar( + background: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TopTitle( + title: 'Global', + ), + ], + ), + ), + ), + CurvedTop(), + SliverToBoxAdapter( + child: DataCards( + confirmed: _info.gConfirmed, + active: _info.gActive, + recovered: _info.gRecovered, + deaths: _info.gDeaths, + ), + ), + CountriesStream(), + ], + ); + } +} diff --git a/lib/screens/nation_screen.dart b/lib/screens/nation_screen.dart index d1643c5..c897b11 100644 --- a/lib/screens/nation_screen.dart +++ b/lib/screens/nation_screen.dart @@ -1,3 +1,4 @@ +import 'package:covid19updates/data/global_page.dart'; import 'package:covid19updates/screens/credits_screen.dart'; import 'package:covid19updates/screens/prevention_screen.dart'; import 'package:covid19updates/widgets/curved_top.dart'; @@ -22,11 +23,20 @@ class NationScreen extends StatelessWidget { floating: true, expandedHeight: 100, leading: IconButton( - icon: FaIcon(FontAwesomeIcons.staylinked, - color: Color(0xffffffff), size: 25.0), + padding: EdgeInsets.only(right: 15.0), + icon: Icon( + Icons.search, + color: Colors.white, + size: 30.0, + ), onPressed: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => CreditsScreen())); + showSearch( + context: context, + delegate: DataSearch( + statewise: _appStart.statewise, + districtData: _appStart.districtData, + ), + ); }, ), title: Text('Covid-19 Updates', @@ -39,20 +49,13 @@ class NationScreen extends StatelessWidget { title: 'India', ), IconButton( - padding: EdgeInsets.only(right: 15.0), - icon: Icon( - Icons.search, - color: Colors.white, - size: 30.0, - ), + icon: FaIcon(FontAwesomeIcons.staylinked, + color: Color(0xffffffff), size: 25.0), onPressed: () { - showSearch( - context: context, - delegate: DataSearch( - statewise: _appStart.statewise, - districtData: _appStart.districtData, - ), - ); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CreditsScreen())); }, ), ], @@ -81,20 +84,80 @@ class NationScreen extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'Spread Awareness', - style: TextStyle( - color: Colors.white, - fontSize: 25.0, - ), + Row( + children: [ + Column( + children: [ + Text( + 'Spread', + style: TextStyle( + color: Colors.white, + fontSize: 25.0, + ), + ), + Text( + ' Awareness', + style: TextStyle( + color: Colors.white, + fontSize: 25.0, + ), + ), + ], + ), + SizedBox(width: 20.0), + Hero( + tag: 'heartbeat', + child: FaIcon( + FontAwesomeIcons.heartbeat, + color: Color(0xffe43f5a), + size: 30.0, + ), + ), + ], + ), + Icon( + Icons.navigate_next, + color: Colors.white, + size: 40.0, ), - Hero( - tag: 'heartbeat', - child: FaIcon( - FontAwesomeIcons.heartbeat, - color: Color(0xffe43f5a), - size: 30.0, - ), + ], + ), + ), + ), + ), + SliverToBoxAdapter( + child: GestureDetector( + onTap: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => GlobalPage())); + }, + child: Container( + margin: EdgeInsets.symmetric(horizontal: 15.0, vertical: 10.0), + padding: EdgeInsets.all(15.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Color(0xff162447), +// borderRadius: BorderRadius.all(Radius.circular(15.0)), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Text( + 'Global Data', + style: TextStyle( + color: Colors.white, + fontSize: 25.0, + ), + ), + SizedBox(width: 20.0), + FaIcon( + FontAwesomeIcons.globe, + color: Color(0xffe43f5a), + size: 30.0, + ), + ], ), Icon( Icons.navigate_next, diff --git a/lib/screens/prevention_screen.dart b/lib/screens/prevention_screen.dart index 8ca6d88..5f4b37b 100644 --- a/lib/screens/prevention_screen.dart +++ b/lib/screens/prevention_screen.dart @@ -127,7 +127,7 @@ class InfoCard extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - margin: EdgeInsets.symmetric(vertical: 5.0, horizontal: 15.0), + margin: EdgeInsets.symmetric(vertical: 15.0, horizontal: 15.0), padding: EdgeInsets.all(10), decoration: BoxDecoration( color: Color(0xff1f4868), diff --git a/lib/services/networking.dart b/lib/services/networking.dart index 6caa6a7..be0396e 100644 --- a/lib/services/networking.dart +++ b/lib/services/networking.dart @@ -20,4 +20,8 @@ class NetworkHelper { Future getDistrictData() { return getData('https://api.covid19india.org/v2/state_district_wise.json'); } + + Future getGlobalData() { + return getData('https://api.covid19api.com/summary'); + } } diff --git a/lib/widgets/coutries_stream.dart b/lib/widgets/coutries_stream.dart new file mode 100644 index 0000000..55df307 --- /dev/null +++ b/lib/widgets/coutries_stream.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:covid19updates/widgets/list_tile_data.dart'; +import 'package:covid19updates/data/global_info.dart'; + +class CountriesStream extends StatelessWidget { + @override + Widget build(BuildContext context) { + final GlobalInfo _info = Provider.of(context); + return SliverList( + delegate: SliverChildBuilderDelegate( + (_, index) { + final oneCountry = _info.countriesData[index]; + var country = oneCountry['Country']; + var confirmed = + double.tryParse((oneCountry['TotalConfirmed']).toString()); + var deaths = double.tryParse((oneCountry['TotalDeaths']).toString()); + var recovered = + double.tryParse((oneCountry['TotalRecovered']).toString()); + return ListTileData( + name: country, + active: confirmed - deaths - recovered, + confirmed: confirmed, + deaths: deaths, + recovered: recovered, + ); + }, + childCount: _info.countriesData.length, + ), + ); + } +} diff --git a/lib/widgets/list_tile_data.dart b/lib/widgets/list_tile_data.dart index 5d589c4..c366cf4 100644 --- a/lib/widgets/list_tile_data.dart +++ b/lib/widgets/list_tile_data.dart @@ -35,24 +35,21 @@ class ListTileData extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Flexible( - flex: 2, + flex: 3, fit: FlexFit.tight, child: Container( child: Text( name, overflow: TextOverflow.visible, style: TextStyle( - fontSize: 14.0, + fontSize: 13.0, color: Colors.white, ), ), ), ), - SizedBox( - width: 5.0, - ), Flexible( - flex: 1, + flex: 2, fit: FlexFit.tight, child: DataCol( data: ReusableFunction().formatNumber(confirmed), @@ -61,7 +58,7 @@ class ListTileData extends StatelessWidget { ), ), Flexible( - flex: 1, + flex: 2, fit: FlexFit.tight, child: DataCol( data: ReusableFunction().formatNumber(active), @@ -70,7 +67,7 @@ class ListTileData extends StatelessWidget { ), ), Flexible( - flex: 1, + flex: 2, fit: FlexFit.tight, child: DataCol( data: ReusableFunction().formatNumber(recovered), @@ -79,7 +76,7 @@ class ListTileData extends StatelessWidget { ), ), Flexible( - flex: 1, + flex: 2, fit: FlexFit.tight, child: DataCol( data: ReusableFunction().formatNumber(deaths), diff --git a/lib/widgets/reusable_card.dart b/lib/widgets/reusable_card.dart index 9af81a3..9da2404 100644 --- a/lib/widgets/reusable_card.dart +++ b/lib/widgets/reusable_card.dart @@ -13,7 +13,7 @@ class ReusableCard extends StatelessWidget { return Expanded( child: Container( margin: EdgeInsets.all(6.0), - padding: EdgeInsets.all(15.0), + padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 15.0), decoration: BoxDecoration( color: Color(0xff162447), borderRadius: BorderRadius.circular(10.0), @@ -33,7 +33,7 @@ class ReusableCard extends StatelessWidget { Text( data, style: TextStyle( - fontSize: 30.0, + fontSize: 25.0, fontWeight: FontWeight.w900, color: colour, ),