From 3e81b23f09e54d45d8c68da3aba5a028a6d896f8 Mon Sep 17 00:00:00 2001 From: Giacomo Cappon Date: Wed, 7 Sep 2022 11:48:39 +0200 Subject: [PATCH] [master] fixed some typos. fitbitter 2.0.1 --- CHANGELOG.md | 4 + README.md | 166 +++++++++++++++++- example/lib/AndroidManifest.xml | 57 ------ example/pubspec.lock | 2 +- lib/fitbitter.dart | 2 +- lib/src/data/fitbitCardioScoreData.dart | 7 - lib/src/fitbitConnector.dart | 1 - .../fitbitCardioScoreDataManager.dart | 1 - ...r.dart => fitbitHeartRateDataManager.dart} | 0 lib/src/urls/fitbitAccountAPIURL.dart | 12 +- lib/src/urls/fitbitAuthAPIURL.dart | 12 +- lib/src/urls/fitbitDeviceAPIURL.dart | 12 +- lib/src/urls/fitbitHeartAPIURL.dart | 46 ++--- lib/src/urls/fitbitSleepAPIURL.dart | 8 +- pubspec.yaml | 2 +- 15 files changed, 221 insertions(+), 111 deletions(-) delete mode 100644 example/lib/AndroidManifest.xml rename lib/src/managers/{fitbitHeartDataManager.dart => fitbitHeartRateDataManager.dart} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd4ee59..6205229 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## [2.0.1] - 2022/09/06 + +Fixed some typos. + ## [2.0.0] - 2022/09/06 Major release 2.0.0. diff --git a/README.md b/README.md index 58101c8..816ccff 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,172 @@ A Flutter package to make your life easier when dealing with Fitbit APIs. +## Getting started + +### Step 1: Install Fitbitter + +To install Fitbitter, simply add `fitbitter: ` to the dependencies of your `pubspec.yaml` file: + +```yaml +dependencies: + fitbitter: #latest version +``` + +### Step 1a: (for Android only) Modify you manifest + +Fitbitter uses `flutter_web_auth` to let you authenticate to Fitbit. In Android, you need to add these lines of code to your `android/app/src/main/AndroidManifest.xml` file: +```xml + + + + + + + + +``` +and change ```CALLBACK_SCHEME``` with your callback scheme (in the test example below this will be ```example```) + +### Step 1b: (for Android only) Increase the minimum Android SDK version + +Fitbitter uses `flutter_secure_storage` to securely store the Fitbit tokens. Since `flutter_secure_storage` requires that minimum Android SDK version is 18, you need to change the default minimum sdk version to 18 or above. To do so, open `android/app/build.gradle`, locate this snippet of code: +```gradle +... +defaultConfig { + applicationId "your.app.id" + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } +... +``` +and change ```minSdkVersion``` to 18 or above, e.g.,: +```gradle +... +defaultConfig { + applicationId "your.app.id" + minSdkVersion 18 + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } +... +``` + +### Step 1c: (for Android only) Requirement: Web Browser + +Fitbitter uses `flutter_web_auth` to let you authenticate to Fitbit. In order to let it work correcty please be sure that your emulator or your physical device is using Chrome, Opera, or Firefox as default web browser. + +### Step 1d:(for Web only) Requirement: Create an endpoint + +Fitbitter uses `flutter_web_auth` to let you authenticate to Fitbit. In order to let it work correcty, as indicated in [https://pub.dev/packages/flutter_web_auth](https://pub.dev/packages/flutter_web_auth), on the Web platform an endpoint needs to be created that captures the callback URL and sends it to the application using the JavaScript `postMessage()` method. In the `./web` folder of the project, create an HTML file with the name e.g. `auth.html` with content: +```html + +Authentication complete +

Authentication is complete. If this does not happen automatically, please +close the window. + +``` +Redirection URL passed to the authentication service must be the same as the URL on which the application is running (schema, host, port if necessary) and the path must point to created HTML file, `/auth.html`in this case. The `callbackUrlScheme` parameter of the `authenticate()` method does not take into account, so it is possible to use a schema for native platforms in the code. + +For the Sign in with Apple in web_message response mode, postMessage from [https://appleid.apple.com](https://appleid.apple.com) is also captured, and the authorization object is returned as a URL fragment encoded as a query string (for compatibility with other providers). + +### Step 2: Test Fitbitter + +Once installed, it is time to test drive Fitbitter. In this example, we will use Fitbitter to authenticate our app into Fitbit APIs and simply fetch yesterday's step count. + +#### Preliminary requirement: Register your app + +To be able to perform any operation with the Fitbit APIs, you must register first your application in the developer portal of Fitbit and obtain two IDs, namely the "**OAuth 2.0 Client ID**" and the "**Client Secret**". To do so, you have to follow these steps. + +* Create a Fitbit account, if you do not have one. +* Register a new app at [https://dev.fitbit.com/apps/new](https://dev.fitbit.com/apps/new). + The form will look like this: + ![Fitbit App Registration Form](https://github.com/gcappon/fitbitter/blob/gh-pages/fitbitAppRegistrationForm.png) + +* Choose an "Application Name" (e.g., "Example"). +* Set a brief "Description" (e.g., "Just a simple test of an awesome package.") +* Set the "Application Website". It can be random for the purpose of testing the example so let's put https://www.example.com/. +* Set an "Organization" (e.g., "Myself"). +* Set an "Organization Website". It can be random for the purpose of testing the example so let's put https://www.myself.com/. +* Set a "Terms of Service Url". It can be random for the purpose of testing the example so let's put https://www.myself.com/tos. +* Set an "Privacy Policy Url". It can be random for the purpose of testing the example so let's put https://www.myself.com/pp. +* Set the "Application Type" to "Client". +* Choose a Callback URL" (e.g., "example://fitbit/auth"). +* Choose a "Default Access Type" (e.g., "Read-Only"). +* Check the "I have read and agree to the terms of service" box. +* Click the "Register" button. You should now see the "**OAuth 2.0 Client ID**" and the "**Client Secret**" strings provided by Fitbit. + +#### App authentication + +You are now ready to authorize your application. + +To do that, simply call the asynchronous method `FitbitConnector.authorize()`, within your code, as: + +```dart + FitbitCredentials? fitbitCredentials = + await FitbitConnector.authorize( + clientID: Strings.fitbitClientID, + clientSecret: Strings.fitbitClientSecret, + redirectUri: Strings.fitbitRedirectUri, + callbackUrlScheme: Strings.fitbitCallbackScheme + ); +``` + +This will open a web view where user will be able to input his Fitbit credentials and login. +After the login, the web view will close and the method will return a `FitbitCredentials?` instance that contains the credentials to be used to make requests to the Fitbit Web API via `fitbitter`. In particular, `fitbitCredentials.userID` contains the Fitbit user id of the user that just authorized `fitbitter`, `fitbitCredentials.fitbitAccessToken` contains the Fitbit access token, and `fitbitCredentials.fitbitRefreshToken` contains the Fitbit refresh token. + +::: warning +Since version 2.0.0, `fitbitter` no longer stores the credentials automatically. As such, you, as a developer, must manage such crendentials according to your strategy. +::: + +#### Fetch step count data + +With your app authorized, you are now ready to fetch data from Fitbit. In this example, we will fetch yesterday's step count. + +Using Fitbitter, this is very easy. First instanciate a `FitbitActivityTimeseriesDataManager` of `type: 'steps'`: + +```dart + FitbitActivityTimeseriesDataManager + fitbitActivityTimeseriesDataManager = + FitbitActivityTimeseriesDataManager( + clientID: '', + clientSecret: '', + type: 'steps', + ); +``` + +Then fetch the desired data using the `fetch` method of `FitbitActivityTimeseriesDataManager` with the proper `FitbitActivityTimeseriesAPIURL`: + +```dart +final stepsData = await fitbitActivityTimeseriesDataManager.fetch( + FitbitActivityTimeseriesAPIURL.dayWithResource( + date: DateTime.now().subtract(Duration(days: 1)), + userID: fitbitAccount.id, + resource: fitbitActivityTimeseriesDataManager.type, + fitbitCredentials: fitbitCredentials!, + ) + ) as List; +``` + +That's it! + +::: tip +For more information on Fitbitter functionalities, check out the [Guides](https://gcappon.github.io/fitbitter/guides/) and the Fitbitter [Reference API](https://pub.dev/documentation/fitbitter/latest/) +::: + +## Documentation & Guides + +For more docs and guides please refer to: [https://gcappon.github.io/fitbitter/](https://gcappon.github.io/fitbitter/). + ## Support -If you like my work, feel free to support me with a coffee. +If you like my work, feel free to support me with a coffee. Thanks! [!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/gcappon) diff --git a/example/lib/AndroidManifest.xml b/example/lib/AndroidManifest.xml deleted file mode 100644 index 4ce1aaa..0000000 --- a/example/lib/AndroidManifest.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/pubspec.lock b/example/pubspec.lock index d4250d0..79983d7 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -70,7 +70,7 @@ packages: path: ".." relative: true source: path - version: "2.0.0" + version: "2.0.1" flutter: dependency: "direct main" description: flutter diff --git a/lib/fitbitter.dart b/lib/fitbitter.dart index ca3291c..06522da 100644 --- a/lib/fitbitter.dart +++ b/lib/fitbitter.dart @@ -36,7 +36,7 @@ export 'package:fitbitter/src/managers/fitbitActivityTimeseriesDataManager.dart' export 'package:fitbitter/src/managers/fitbitBreathingRateDataManager.dart'; export 'package:fitbitter/src/managers/fitbitCardioScoreDataManager.dart'; export 'package:fitbitter/src/managers/fitbitDeviceDataManager.dart'; -export 'package:fitbitter/src/managers/fitbitHeartDataManager.dart'; +export 'package:fitbitter/src/managers/fitbitHeartRateDataManager.dart'; export 'package:fitbitter/src/managers/fitbitHeartRateIntradayDataManager.dart'; export 'package:fitbitter/src/managers/fitbitHeartRateVariabilityDataManager.dart'; export 'package:fitbitter/src/managers/fitbitSleepDataManager.dart'; diff --git a/lib/src/data/fitbitCardioScoreData.dart b/lib/src/data/fitbitCardioScoreData.dart index a9294fe..64410b2 100644 --- a/lib/src/data/fitbitCardioScoreData.dart +++ b/lib/src/data/fitbitCardioScoreData.dart @@ -14,15 +14,11 @@ class FitbitCardioScoreData implements FitbitData { /// The value of the data. double? value; - // The type of skin temeperature log created. - String? logType; - /// Default [FitbitCardioScoreData] constructor. FitbitCardioScoreData({ this.userID, this.dateOfMonitoring, this.value, - this.logType, }); /// Generates a [FitbitCardioScoreData] obtained from a json. @@ -31,7 +27,6 @@ class FitbitCardioScoreData implements FitbitData { userID: json['userID'], dateOfMonitoring: Formats.onlyDayDateFormatTicks.parse(json['dateTime']), value: json['value']['vo2Max'], - logType: json['logType'], ); } // fromJson @@ -43,7 +38,6 @@ class FitbitCardioScoreData implements FitbitData { 'value': { 'vo2Max': value, }, - 'logType': logType, }; } // toJson @@ -53,7 +47,6 @@ class FitbitCardioScoreData implements FitbitData { ..write('userID: $userID, ') ..write('dateOfMonitoring: $dateOfMonitoring, ') ..write('value: $value, ') - ..write('logType: $logType') ..write(')')) .toString(); } // toString diff --git a/lib/src/fitbitConnector.dart b/lib/src/fitbitConnector.dart index 428d749..c48f6e9 100644 --- a/lib/src/fitbitConnector.dart +++ b/lib/src/fitbitConnector.dart @@ -81,7 +81,6 @@ class FitbitConnector { final fitbitUrl = FitbitAuthAPIURL.refreshToken( clientID: clientID, clientSecret: clientSecret, - fitbitRefreshToken: fitbitCredentials.fitbitRefreshToken, fitbitCredentials: fitbitCredentials); // Post refresh query to Fitbit API diff --git a/lib/src/managers/fitbitCardioScoreDataManager.dart b/lib/src/managers/fitbitCardioScoreDataManager.dart index 4e8ee6e..477ea18 100644 --- a/lib/src/managers/fitbitCardioScoreDataManager.dart +++ b/lib/src/managers/fitbitCardioScoreDataManager.dart @@ -47,7 +47,6 @@ class FitbitCardioScoreDataManager extends FitbitDataManager { dateOfMonitoring: Formats.onlyDayDateFormatTicks.parse(record['dateTime']), value: record['value']['vo2Max'].toDouble(), - logType: record['logType'], )); } // for entry diff --git a/lib/src/managers/fitbitHeartDataManager.dart b/lib/src/managers/fitbitHeartRateDataManager.dart similarity index 100% rename from lib/src/managers/fitbitHeartDataManager.dart rename to lib/src/managers/fitbitHeartRateDataManager.dart diff --git a/lib/src/urls/fitbitAccountAPIURL.dart b/lib/src/urls/fitbitAccountAPIURL.dart index a0f3c0b..d593e17 100644 --- a/lib/src/urls/fitbitAccountAPIURL.dart +++ b/lib/src/urls/fitbitAccountAPIURL.dart @@ -10,10 +10,14 @@ class FitbitAccountAPIURL extends FitbitAPIURL { /// Default [FitbitAccountAPIURL] constructor. FitbitAccountAPIURL( {required FitbitCredentials? fitbitCredentials, required String url}) - : super(url: url, fitbitCredentials: fitbitCredentials) { - this.url = '${_getBaseURL()}.json'; - this.fitbitCredentials = fitbitCredentials; - } + : super(url: url, fitbitCredentials: fitbitCredentials); + + /// Return a [FitbitAccountAPIURL] from the given [fitbitCredentials]. + factory FitbitAccountAPIURL.withCredentials( + {required FitbitCredentials fitbitCredentials}) { + final url = '${_getBaseURL()}.json'; + return FitbitAccountAPIURL(fitbitCredentials: fitbitCredentials, url: url); + } // FitbitAccountAPIURL.withCredentials /// A private method that generates the base url of a [FitbitAccountAPIURL]. static String _getBaseURL() { diff --git a/lib/src/urls/fitbitAuthAPIURL.dart b/lib/src/urls/fitbitAuthAPIURL.dart index ea1121e..9411568 100644 --- a/lib/src/urls/fitbitAuthAPIURL.dart +++ b/lib/src/urls/fitbitAuthAPIURL.dart @@ -26,11 +26,11 @@ class FitbitAuthAPIURL extends FitbitAPIURL { /// Factory constructor that generates a [FitbitAuthAPIURL] to be used /// to refresh the access token. - factory FitbitAuthAPIURL.refreshToken( - {required FitbitCredentials fitbitCredentials, - required String clientID, - required String clientSecret, - required String fitbitRefreshToken}) { + factory FitbitAuthAPIURL.refreshToken({ + required FitbitCredentials fitbitCredentials, + required String clientID, + required String clientSecret, + }) { // Generate the authorization header Codec stringToBase64 = utf8.fuse(base64); final String authorizationHeader = @@ -40,7 +40,7 @@ class FitbitAuthAPIURL extends FitbitAPIURL { url: '${_getBaseURL()}/token', fitbitCredentials: fitbitCredentials, data: - 'client_id=$clientID&grant_type=refresh_token&refresh_token=$fitbitRefreshToken', + 'client_id=$clientID&grant_type=refresh_token&refresh_token=${fitbitCredentials.fitbitRefreshToken}', authorizationHeader: 'Basic $authorizationHeader', ); } // FitbitAuthAPIURL.refreshToken diff --git a/lib/src/urls/fitbitDeviceAPIURL.dart b/lib/src/urls/fitbitDeviceAPIURL.dart index 9fe5789..882c1b8 100644 --- a/lib/src/urls/fitbitDeviceAPIURL.dart +++ b/lib/src/urls/fitbitDeviceAPIURL.dart @@ -11,10 +11,14 @@ class FitbitDeviceAPIURL extends FitbitAPIURL { /// Default [FitbitDeviceAPIURL] constructor. FitbitDeviceAPIURL( {required FitbitCredentials? fitbitCredentials, required String url}) - : super(url: url, fitbitCredentials: fitbitCredentials) { - this.url = '${_getBaseURL(fitbitCredentials!.userID)}.json'; - this.fitbitCredentials = fitbitCredentials; - } + : super(url: url, fitbitCredentials: fitbitCredentials); + + /// Return a [FitbitDeviceAPIURL] from the given [fitbitCredentials]. + factory FitbitDeviceAPIURL.withCredentials( + {required FitbitCredentials fitbitCredentials}) { + final url = '${_getBaseURL(fitbitCredentials.userID)}.json'; + return FitbitDeviceAPIURL(fitbitCredentials: fitbitCredentials, url: url); + } // FitbitDeviceAPIURL.withCredentials /// A private method that generates the base url of a [FitbitDeviceAPIURL]. static String _getBaseURL(String? userID) { diff --git a/lib/src/urls/fitbitHeartAPIURL.dart b/lib/src/urls/fitbitHeartAPIURL.dart index 0e3fc0e..2226b8c 100644 --- a/lib/src/urls/fitbitHeartAPIURL.dart +++ b/lib/src/urls/fitbitHeartAPIURL.dart @@ -6,70 +6,70 @@ import 'package:fitbitter/src/utils/formats.dart'; import 'package:fitbitter/src/data/fitbitHeartRateData.dart'; -/// [FitbitHeartAPIURL] is a class that expresses multiple factory +/// [FitbitHeartRateData] is a class that expresses multiple factory /// constructors to be used to generate Fitbit Web APIs urls to fetch /// [FitbitHeartRateData]. -class FitbitHeartAPIURL extends FitbitAPIURL { - /// Default [FitbitHeartAPIURL] constructor. - FitbitHeartAPIURL( +class FitbitHeartRateAPIURL extends FitbitAPIURL { + /// Default [FitbitHeartRateData] constructor. + FitbitHeartRateAPIURL( {required FitbitCredentials? fitbitCredentials, required String url}) : super( url: url, fitbitCredentials: fitbitCredentials, ); - /// Generates a [FitbitHeartAPIURL] to get [FitbitHeartData] of a specific day [date]. - factory FitbitHeartAPIURL.day( + /// Generates a [FitbitHeartRateAPIURL] to get [FitbitHeartRateData] of a specific day [date]. + factory FitbitHeartRateAPIURL.day( {required FitbitCredentials fitbitCredentials, required DateTime date}) { String dateStr = Formats.onlyDayDateFormatTicks.format(date); - return FitbitHeartAPIURL( + return FitbitHeartRateAPIURL( url: '${_getBaseURL(fitbitCredentials.userID)}/date/$dateStr/1d.json', fitbitCredentials: fitbitCredentials, ); - } // FitbitHeartAPIURL.day + } // FitbitHeartRateAPIURL.day - /// Generates a [FitbitHeartAPIURL] to get [FitbitHeartData] of a specific date range - /// between [startDate] and [endDate] of a given user [userID]. - factory FitbitHeartAPIURL.dateRange( + /// Generates a [FitbitHeartRateAPIURL] to get [FitbitHeartRateData] of a specific date range + /// between [startDate] and [endDate]. + factory FitbitHeartRateAPIURL.dateRange( {required FitbitCredentials fitbitCredentials, required DateTime startDate, required DateTime endDate}) { String startDateStr = Formats.onlyDayDateFormatTicks.format(startDate); String endDateStr = Formats.onlyDayDateFormatTicks.format(endDate); - return FitbitHeartAPIURL( + return FitbitHeartRateAPIURL( url: '${_getBaseURL(fitbitCredentials.userID)}/date/$startDateStr/$endDateStr.json', fitbitCredentials: fitbitCredentials, ); - } // FitbitHeartAPIURL.dateRange + } // FitbitHeartRateAPIURL.dateRange - /// Generates a [FitbitHeartAPIURL] to get [FitbitHeartData] of a specific week + /// Generates a [FitbitHeartRateAPIURL] to get [FitbitHeartRateData] of a specific week /// ending in [baseDate]. - factory FitbitHeartAPIURL.week( + factory FitbitHeartRateAPIURL.week( {required FitbitCredentials fitbitCredentials, required DateTime baseDate}) { String dateStr = Formats.onlyDayDateFormatTicks.format(baseDate); - return FitbitHeartAPIURL( + return FitbitHeartRateAPIURL( url: '${_getBaseURL(fitbitCredentials.userID)}/date/$dateStr/1w.json', fitbitCredentials: fitbitCredentials, ); - } // FitbitHeartAPIURL.week + } // FitbitHeartRateAPIURL.week - /// Generates a [FitbitHeartAPIURL] to get [FitbitHeartData] of a specific month + /// Generates a [FitbitHeartRateAPIURL] to get [FitbitHeartRateData] of a specific month /// ending in [baseDate]. - factory FitbitHeartAPIURL.month( + factory FitbitHeartRateAPIURL.month( {required FitbitCredentials fitbitCredentials, required DateTime baseDate}) { String dateStr = Formats.onlyDayDateFormatTicks.format(baseDate); - return FitbitHeartAPIURL( + return FitbitHeartRateAPIURL( url: '${_getBaseURL(fitbitCredentials.userID)}/date/$dateStr/1m.json', fitbitCredentials: fitbitCredentials, ); - } // FitbitHeartAPIURL.month + } // FitbitHeartRateAPIURL.month - /// A private method that generates the base url of a [FitbitHeartAPIURL]. + /// A private method that generates the base url of a [FitbitHeartRateAPIURL]. static String _getBaseURL(String? userID) { return 'https://api.fitbit.com/1/user/$userID/activities/heart'; } // _getBaseURL -} // FitbitHeartAPIURL +} // FitbitHeartRateAPIURL diff --git a/lib/src/urls/fitbitSleepAPIURL.dart b/lib/src/urls/fitbitSleepAPIURL.dart index 9537747..3131a54 100644 --- a/lib/src/urls/fitbitSleepAPIURL.dart +++ b/lib/src/urls/fitbitSleepAPIURL.dart @@ -25,7 +25,7 @@ class FitbitSleepAPIURL extends FitbitAPIURL { url: '${_getBaseURL(fitbitCredentials.userID)}/date/$dateStr.json', fitbitCredentials: fitbitCredentials, ); - } // FitbitSleepAPIURL. AndDay + } // FitbitSleepAPIURL.day /// Generates a [FitbitSleepAPIURL] to get [FitbitSleepData] of a specific date range /// between [startDate] and [endDate]. @@ -40,7 +40,7 @@ class FitbitSleepAPIURL extends FitbitAPIURL { '${_getBaseURL(fitbitCredentials.userID)}/date/$startDateStr/$endDateStr.json', fitbitCredentials: fitbitCredentials, ); - } // FitbitSleepAPIURL. AndDateRange + } // FitbitSleepAPIURL.dateRange /// Generates a [FitbitSleepAPIURL] to get the [FitbitSleepData] list. /// before a given day [beforeDate]. Maximum [limit] sleep logs are returned. @@ -55,7 +55,7 @@ class FitbitSleepAPIURL extends FitbitAPIURL { '${_getBaseURL(fitbitCredentials.userID)}/list.json?beforeDate=$beforeDateStr&sort=desc&offset=0&limit=$limit', fitbitCredentials: fitbitCredentials, ); - } // FitbitSleepAPIURL.list AndBeforeDate + } // FitbitSleepAPIURL.listAndBeforeDate /// Generates a [FitbitSleepAPIURL] to get the [FitbitSleepData] list. /// after a given day [afterDate]. Maximum [limit] sleep logs are returned. @@ -70,7 +70,7 @@ class FitbitSleepAPIURL extends FitbitAPIURL { '${_getBaseURL(fitbitCredentials.userID)}/list.json?beforeDate=$afterDateStr&sort=asc&offset=0&limit=$limit', fitbitCredentials: fitbitCredentials, ); - } // FitbitSleepAPIURL.list AndAfterDate + } // FitbitSleepAPIURL.listAndAfterDate /// A private method that generates the base url of a [FitbitSleepAPIURL]. static String _getBaseURL(String? userID) { diff --git a/pubspec.yaml b/pubspec.yaml index c125cc1..1154862 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: fitbitter description: A Flutter package to make your life easier when dealing with Fitbit APIs. -version: 2.0.0 +version: 2.0.1 homepage: https://github.com/gcappon/fitbitter environment: