From ac14fa0f6e456376f3489fcc326599ebc7de72ac Mon Sep 17 00:00:00 2001 From: Pavan Kalyan Date: Sun, 23 Jan 2022 05:54:17 +0530 Subject: [PATCH] fix: handling inconsistencies with API and better failure handling, also supporting Toph partially --- .flutter-plugins-dependencies | 2 +- .../gen/com/example/kontests/BuildConfig.java | 8 + .../gen/com/example/kontests/BuildConfig.java | 8 + lib/Contest.dart | 19 +- lib/ContestServices.dart | 6 +- lib/main.dart | 228 +++++++------- pubspec.lock | 294 ++++++++++++++++-- pubspec.yaml | 3 +- 8 files changed, 408 insertions(+), 160 deletions(-) create mode 100644 android/app/src/debug/gen/com/example/kontests/BuildConfig.java create mode 100644 android/app/src/profile/gen/com/example/kontests/BuildConfig.java diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index 74981d2..b579a90 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider","path":"/home/pavan/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.5.1/","dependencies":[]},{"name":"shared_preferences","path":"/home/pavan/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.1+2/","dependencies":[]},{"name":"url_launcher","path":"/home/pavan/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/","dependencies":[]}],"android":[{"name":"path_provider","path":"/home/pavan/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.5.1/","dependencies":[]},{"name":"shared_preferences","path":"/home/pavan/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.1+2/","dependencies":[]},{"name":"url_launcher","path":"/home/pavan/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":[]},{"name":"shared_preferences","dependencies":[]},{"name":"url_launcher","dependencies":[]}],"date_created":"2020-05-17 14:36:24.405398","version":"1.18.0-11.1.pre"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.28/","dependencies":[]},{"name":"shared_preferences","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.12+4/","dependencies":[]},{"name":"url_launcher","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.5/","dependencies":[]}],"android":[{"name":"path_provider","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.28/","dependencies":[]},{"name":"shared_preferences","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.12+4/","dependencies":[]},{"name":"url_launcher","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.5/","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-0.0.4+8/","dependencies":[]},{"name":"shared_preferences_macos","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-0.0.1+11/","dependencies":[]},{"name":"url_launcher_macos","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-2.0.3/","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-0.0.1+2/","dependencies":[]},{"name":"shared_preferences_linux","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_linux-0.0.2+4/","dependencies":["path_provider_linux"]},{"name":"url_launcher_linux","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_linux-2.0.3/","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-0.0.5/","dependencies":[]},{"name":"shared_preferences_windows","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_windows-0.0.2+3/","dependencies":["path_provider_windows"]},{"name":"url_launcher_windows","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_windows-2.0.2/","dependencies":[]}],"web":[{"name":"shared_preferences_web","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-0.1.2+7/","dependencies":[]},{"name":"url_launcher_web","path":"/home/pavan/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-2.0.6/","dependencies":[]}]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_macos","path_provider_linux","path_provider_windows"]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_linux","shared_preferences_macos","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"url_launcher","dependencies":["url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2022-01-23 05:51:35.050130","version":"2.8.1"} \ No newline at end of file diff --git a/android/app/src/debug/gen/com/example/kontests/BuildConfig.java b/android/app/src/debug/gen/com/example/kontests/BuildConfig.java new file mode 100644 index 0000000..11e48d9 --- /dev/null +++ b/android/app/src/debug/gen/com/example/kontests/BuildConfig.java @@ -0,0 +1,8 @@ +/*___Generated_by_IDEA___*/ + +package com.example.kontests; + +/* This stub is only used by the IDE. It is NOT the BuildConfig class actually packed into the APK */ +public final class BuildConfig { + public final static boolean DEBUG = Boolean.parseBoolean(null); +} \ No newline at end of file diff --git a/android/app/src/profile/gen/com/example/kontests/BuildConfig.java b/android/app/src/profile/gen/com/example/kontests/BuildConfig.java new file mode 100644 index 0000000..11e48d9 --- /dev/null +++ b/android/app/src/profile/gen/com/example/kontests/BuildConfig.java @@ -0,0 +1,8 @@ +/*___Generated_by_IDEA___*/ + +package com.example.kontests; + +/* This stub is only used by the IDE. It is NOT the BuildConfig class actually packed into the APK */ +public final class BuildConfig { + public final static boolean DEBUG = Boolean.parseBoolean(null); +} \ No newline at end of file diff --git a/lib/Contest.dart b/lib/Contest.dart index 804032c..566a108 100644 --- a/lib/Contest.dart +++ b/lib/Contest.dart @@ -15,7 +15,9 @@ class Contests { factory Contests.fromJson(List parsedJson) { List contests = new List(); - contests = parsedJson.map((i) => Contest.fromJson(i)).toList(); + if (parsedJson != null) { + contests = parsedJson.map((i) => Contest.fromJson(i)).toList(); + } return new Contests( contests: contests, ); @@ -46,10 +48,8 @@ class Contest { return Contest( name: json['name'], url: json['url'], - start_time: new DateFormat("yyyy-MM-ddTHH:mm:ss.SSSZ") - .parseUtc(json['start_time']), - end_time: - new DateFormat("yyyy-MM-ddTHH:mm:ss.SSSZ").parseUtc(json['end_time']), + start_time: retrieveDateTime(json['site'], json['start_time']), + end_time: retrieveDateTime(json['site'], json['end_time']), duration: json['duration'], site: json['site'], in_24_hours: within_24, @@ -57,6 +57,15 @@ class Contest { ); } + static DateTime retrieveDateTime(String site, String timeInputString) { + try { + return new DateFormat("yyyy-MM-ddTHH:mm:ss.SSSZ") + .parseUtc(timeInputString); + } on FormatException { + return new DateFormat("yyyy-MM-dd HH:mm:ss Z").parseUtc(timeInputString); + } + } + String getName() { return name; } diff --git a/lib/ContestServices.dart b/lib/ContestServices.dart index 4ff5eb2..17779e0 100644 --- a/lib/ContestServices.dart +++ b/lib/ContestServices.dart @@ -19,6 +19,10 @@ Future loadContest() async { Future loadContests(String site, bool refreshing) async { final path = (await getApplicationDocumentsDirectory()).path; + //exception for TOPH as the API for this currently does not exist. + if (site.toUpperCase() == 'TOPH') { + return Contests.fromJson(null); + } final contests = HttpNetworkResource( url: 'https://kontests.net/api/v1/' + site, parser: (contents) => json.decode(contents), @@ -29,4 +33,4 @@ Future loadContests(String site, bool refreshing) async { final myData = await contests.get(forceReload: refreshing); return Contests.fromJson(myData); -} \ No newline at end of file +} diff --git a/lib/main.dart b/lib/main.dart index 4b44766..95ad6e3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -34,15 +34,6 @@ class MyApp extends StatelessWidget { } } -_launchURL(String url) async { - String launchURL = url; - if (await canLaunch(launchURL)) { - await launch(launchURL); - } else { - throw 'Could not launch $launchURL'; - } -} - class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); @@ -80,124 +71,111 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { - return DefaultTabController( - length: 10, - child: Scaffold( - drawer: Drawer( - child: Column( - children: [ - Expanded( - child: ListView( - padding: EdgeInsets.zero, - children: [ - DrawerHeader( - decoration: BoxDecoration(color: Colors.blue), - child: Text("Kontests Unofficial App", - style: TextStyle(color: Colors.white, fontSize:24),), - ), - ListTile( - leading: new Container( - padding: EdgeInsets.all(2), - child: new LayoutBuilder(builder: (context, constraint) { - return new Icon(FlutterIcons.mark_github_oct, size: constraint.biggest.height); - }), - ), - title: Text("Developer"), - subtitle: Text("github/pavan-kalyan"), - onTap: () => launch("https://github.com/pavan-kalyan"), + return FutureBuilder( + future: sites, + builder: (context, snapshot) { + var _numOfSites = 11; + if (snapshot.hasData) { + _numOfSites = snapshot.data.sites.length; + } + + return DefaultTabController( + length: _numOfSites, + child: Scaffold( + drawer: Drawer( + child: Column(children: [ + Expanded( + child: ListView( + padding: EdgeInsets.zero, + children: [ + DrawerHeader( + decoration: BoxDecoration(color: Colors.blue), + child: Text( + "Kontests Unofficial App", + style: TextStyle(color: Colors.white, fontSize: 24), + ), + ), + ListTile( + leading: new Container( + padding: EdgeInsets.all(2), + child: new LayoutBuilder( + builder: (context, constraint) { + return new Icon(FlutterIcons.mark_github_oct, + size: constraint.biggest.height); + }), + ), + title: Text("Developer"), + subtitle: Text("github/pavan-kalyan"), + onTap: () => + launch("https://github.com/pavan-kalyan"), + ), + ], + ), ), - ], - ), - ), - Divider(), + Divider(), Container( - child: Center( - child: ListTile( - title: Text("Made in Flutter", - style: TextStyle(fontWeight: FontWeight.w900)) - ), - ) - ) - ] - ) - ), - appBar: AppBar( - title: Text("Kontests Unofficial"), - bottom: PreferredSize( - preferredSize: Size.fromHeight(50.0), - child: FutureBuilder( + child: Center( + child: ListTile( + title: Text("Made in Flutter", + style: TextStyle(fontWeight: FontWeight.w900))), + )) + ])), + appBar: AppBar( + title: Text("Kontests Unofficial"), + bottom: PreferredSize( + preferredSize: Size.fromHeight(50.0), + child: FutureBuilder( + future: sites, + builder: (context, snapshot) { + if (snapshot.hasData) { + return TabBar( + isScrollable: true, + tabs: List.generate( + snapshot.data.sites.length, (int index) { + return new Tab( + text: snapshot.data.sites[index].name, + ); + })); + } + return TabBar( + isScrollable: true, + tabs: [ + Text('Codeforces'), + Text('TopCoder'), + Text('AtCoder'), + Text('CS Academy'), + Text('CodeChef'), + Text('HackerEarth'), + Text('Kick Start'), + Text('LeetCode'), + Text('HackerRank'), + Text('Codeforces:gym'), + Text('Toph'), + ], + ); + }, + ))), + body: FutureBuilder( future: sites, builder: (context, snapshot) { if (snapshot.hasData) { - return TabBar( - isScrollable: true, - tabs: List.generate( + return TabBarView( + children: List.generate( snapshot.data.sites.length, (int index) { - return new Tab( - text: snapshot.data.sites[index].name, - ); - })); + return ContestList( + site: snapshot.data.sites[index].uname, + ); + })); } - return TabBar( - isScrollable: true, - tabs: [ - Text('Codeforces'), - Text('TopCoder'), - Text('AtCoder'), - Text('CS Academy'), - Text('CodeChef'), - Text('HackerEarth'), - Text('Kick Start'), - Text('LeetCode'), - Text('HackerRank'), - Text('Codeforces:gym'), - ], + return TabBarView( + children: + List.generate(_numOfSites, (int index) { + return Center(child: CircularProgressIndicator()); + }), ); - }, - ))), - body: FutureBuilder( - future: sites, - builder: (context, snapshot) { - if (snapshot.hasData) { - return TabBarView( - children: List.generate( - snapshot.data.sites.length, (int index) { - return ContestList( - site: snapshot.data.sites[index].uname, - ); - })); - } - return TabBarView( - children: List.generate(10, (int index) { - return Center(child: CircularProgressIndicator()); - }), - ); - } - /* - TabBarView( - children: [ - ContestList(site: 'codeforces'), - ContestList(site: 'at_coder'), - ContestList(site: 'leet_code'), - ContestList(site: 'top_coder'), - ContestList(site: 'at_coder'), - ContestList(site: 'leet_code'), - ContestList(site: 'top_coder'), - ContestList(site: 'at_coder'), - ContestList(site: 'leet_code'), - ContestList(site: 'top_coder'), - ContestList(site: 'top_coder'), - ], - - ) - */ - ), - )); - } - - Future _handleRefresh() async { - setState(() => refreshing = true); - refreshing = false; + }), + )); + }); } } @@ -207,6 +185,7 @@ class ContestList extends StatefulWidget { ContestList({ this.site, }); + @override createState() => _ContestListState(); } @@ -259,9 +238,12 @@ class _ContestListState extends State TimeOfDay timepicked = TimeOfDay.fromDateTime(startDateTime); String hour = timepicked.hourOfPeriod.toString(); - - String minute = timepicked.minute<10 ? '0'+timepicked.minute.toString():timepicked.minute.toString(); - String meridiem = timepicked.period.index == 0 ? 'am': 'pm'; + + String minute = timepicked.minute < 10 + ? '0' + timepicked.minute.toString() + : timepicked.minute.toString(); + String meridiem = + timepicked.period.index == 0 ? 'am' : 'pm'; return ListTile( title: Text(snapshot.data.contests[index].name), @@ -272,7 +254,7 @@ class _ContestListState extends State ' ' + hour + ':' + - minute + + minute + ' ' + meridiem), ); diff --git a/pubspec.lock b/pubspec.lock index 292971d..2433455 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,13 +1,34 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + url: "https://pub.dartlang.org" + source: hosted + version: "31.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.0" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.8.2" async_resource: dependency: "direct main" description: @@ -21,28 +42,56 @@ packages: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.3" + version: "1.3.1" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.5" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.1.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.12" + version: "1.15.0" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" cupertino_icons: dependency: "direct main" description: @@ -56,7 +105,21 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.2" flutter: dependency: "direct main" description: flutter @@ -81,20 +144,32 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" http: dependency: "direct main" description: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.12.0+4" + version: "0.12.2" http_parser: dependency: transitive description: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "3.1.3" + version: "3.1.4" intl: dependency: "direct main" description: @@ -108,49 +183,112 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.1+1" + version: "0.6.3" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.6" + version: "0.12.11" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.8" + version: "1.7.0" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" path_provider: dependency: transitive description: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "1.5.1" + version: "1.6.28" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+2" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4+8" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.5" pedantic: dependency: transitive description: name: pedantic url: "https://pub.dartlang.org" source: hosted - version: "1.8.0+1" + version: "1.11.1" + pigeon: + dependency: "direct main" + description: + name: pigeon + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.15" platform: dependency: transitive description: name: platform url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" rxdart: dependency: transitive description: @@ -164,14 +302,49 @@ packages: name: service_worker url: "https://pub.dartlang.org" source: hosted - version: "0.2.3" + version: "0.2.4" shared_preferences: dependency: "direct main" description: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "0.5.1+2" + version: "0.5.12+4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.2+4" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+11" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2+7" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.2+3" sky_engine: dependency: transitive description: flutter @@ -183,70 +356,133 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.1" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.3" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "1.1.0" synchronized: dependency: transitive description: name: synchronized url: "https://pub.dartlang.org" source: hosted - version: "2.2.0" + version: "2.2.0+2" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.15" + version: "0.4.3" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.3.0" url_launcher: dependency: "direct main" description: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "3.0.3" + version: "6.0.5" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.6" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.1.1" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.8" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" sdks: - dart: ">=2.6.0 <3.0.0" - flutter: ">=1.10.0 <2.0.0" + dart: ">=2.15.0 <3.0.0" + flutter: ">=2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 7f3e5e9..890ce43 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,12 +18,13 @@ environment: dependencies: http: ^0.12.0+2 - url_launcher: ^3.0.2 + url_launcher: '>=3.0.2' flutter_cache_store: ^0.7.0 intl: ^0.15.8 flutter_icons: ^1.1.0 async_resource: ^0.1.4 shared_preferences: ^0.5.1+2 + pigeon: ^1.0.7 flutter: sdk: flutter