diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies new file mode 100644 index 0000000..438bff8 --- /dev/null +++ b/.flutter-plugins-dependencies @@ -0,0 +1 @@ +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"shared_preferences","path":"/Users/shafiqruslan/Documents/FlutterSDK/.pub-cache/hosted/pub.dartlang.org/shared_preferences-2.0.6/","dependencies":[]}],"android":[{"name":"shared_preferences","path":"/Users/shafiqruslan/Documents/FlutterSDK/.pub-cache/hosted/pub.dartlang.org/shared_preferences-2.0.6/","dependencies":[]}],"macos":[{"name":"shared_preferences_macos","path":"/Users/shafiqruslan/Documents/FlutterSDK/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-2.0.0/","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/Users/shafiqruslan/Documents/FlutterSDK/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.0.0/","dependencies":[]},{"name":"shared_preferences_linux","path":"/Users/shafiqruslan/Documents/FlutterSDK/.pub-cache/hosted/pub.dartlang.org/shared_preferences_linux-2.0.0/","dependencies":["path_provider_linux"]}],"windows":[{"name":"path_provider_windows","path":"/Users/shafiqruslan/Documents/FlutterSDK/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.0.1/","dependencies":[]},{"name":"shared_preferences_windows","path":"/Users/shafiqruslan/Documents/FlutterSDK/.pub-cache/hosted/pub.dartlang.org/shared_preferences_windows-2.0.0/","dependencies":["path_provider_windows"]}],"web":[{"name":"shared_preferences_web","path":"/Users/shafiqruslan/Documents/FlutterSDK/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-2.0.0/","dependencies":[]}]},"dependencyGraph":[{"name":"path_provider_linux","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"]}],"date_created":"2021-07-01 19:44:53.554537","version":"2.2.2"} \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index dbf5997..93268b0 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -38,7 +38,7 @@ android { targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } buildTypes { @@ -56,6 +56,6 @@ flutter { dependencies { testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' } diff --git a/android/app/local.properties b/android/app/local.properties new file mode 100644 index 0000000..13d7bfb --- /dev/null +++ b/android/app/local.properties @@ -0,0 +1,8 @@ +## This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +#Thu Jul 01 15:33:13 MYT 2021 +sdk.dir=/Users/shafiqruslan/Library/Android/sdk diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a7491e5..b7ad7f8 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -7,7 +7,6 @@ additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> - - + diff --git a/android/app/src/main/java/com/example/flutter_todo/MainActivity.java b/android/app/src/main/java/com/example/flutter_todo/MainActivity.java index db305c8..c178ef2 100644 --- a/android/app/src/main/java/com/example/flutter_todo/MainActivity.java +++ b/android/app/src/main/java/com/example/flutter_todo/MainActivity.java @@ -1,13 +1,7 @@ package com.example.flutter_todo; -import android.os.Bundle; -import io.flutter.app.FlutterActivity; -import io.flutter.plugins.GeneratedPluginRegistrant; +import io.flutter.embedding.android.FlutterActivity; public class MainActivity extends FlutterActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); - } + } diff --git a/android/gradle.properties b/android/gradle.properties index 2bd6f4f..bb04111 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,2 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true org.gradle.jvmargs=-Xmx1536M diff --git a/android/settings_aar.gradle b/android/settings_aar.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/android/settings_aar.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh index 89c0e03..b2662c6 100755 --- a/ios/Flutter/flutter_export_environment.sh +++ b/ios/Flutter/flutter_export_environment.sh @@ -1,11 +1,14 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=/Users/devin/flutter" -export "FLUTTER_APPLICATION_PATH=/Users/devin/Desktop/Sites/flutter-todo" -export "FLUTTER_TARGET=/Users/devin/Desktop/Sites/flutter-todo/lib/main.dart" +export "FLUTTER_ROOT=/Users/shafiqruslan/Documents/FlutterSDK" +export "FLUTTER_APPLICATION_PATH=/Users/shafiqruslan/Documents/FlutterProjects/boilerplate/flutter_todo" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib/main.dart" export "FLUTTER_BUILD_DIR=build" export "SYMROOT=${SOURCE_ROOT}/../build/ios" -export "FLUTTER_FRAMEWORK_DIR=/Users/devin/flutter/bin/cache/artifacts/engine/ios" export "FLUTTER_BUILD_NAME=0.4.0" export "FLUTTER_BUILD_NUMBER=0.4.0" -export "TRACK_WIDGET_CREATION=true" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=false" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.packages" diff --git a/lib/main.dart b/lib/main.dart index c789bc4..b05ef6f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -13,7 +13,7 @@ import 'package:flutter_todo/views/todos.dart'; void main() { runApp( ChangeNotifierProvider( - builder: (context) => AuthProvider(), + create: (context) => AuthProvider(), child: MaterialApp( initialRoute: '/', routes: { @@ -30,7 +30,6 @@ void main() { class Router extends StatelessWidget { @override Widget build(BuildContext context) { - final authProvider = Provider.of(context); return Consumer( @@ -42,7 +41,7 @@ class Router extends StatelessWidget { return LogIn(); case Status.Authenticated: return ChangeNotifierProvider( - builder: (context) => TodoProvider(authProvider), + create: (context) => TodoProvider(authProvider), child: Todos(), ); default: @@ -51,4 +50,4 @@ class Router extends StatelessWidget { }, ); } -} \ No newline at end of file +} diff --git a/lib/providers/auth.dart b/lib/providers/auth.dart index 180e9c8..f8709c0 100644 --- a/lib/providers/auth.dart +++ b/lib/providers/auth.dart @@ -8,7 +8,6 @@ import 'package:flutter_todo/widgets/notification_text.dart'; enum Status { Uninitialized, Authenticated, Authenticating, Unauthenticated } class AuthProvider with ChangeNotifier { - Status _status = Status.Uninitialized; String _token; NotificationText _notification; @@ -35,14 +34,17 @@ class AuthProvider with ChangeNotifier { _notification = null; notifyListeners(); - final url = "$api/login"; + final url = Uri.parse("$api/login"); Map body = { 'email': email, 'password': password, }; - final response = await http.post(url, body: body,); + final response = await http.post( + url, + body: body, + ); if (response.statusCode == 200) { Map apiResponse = json.decode(response.body); @@ -66,8 +68,9 @@ class AuthProvider with ChangeNotifier { return false; } - Future register(String name, String email, String password, String passwordConfirm) async { - final url = "$api/register"; + Future register(String name, String email, String password, + String passwordConfirm) async { + final url = Uri.parse("$api/register"); Map body = { 'name': name, @@ -81,10 +84,15 @@ class AuthProvider with ChangeNotifier { "message": 'Unknown error.' }; - final response = await http.post( url, body: body, ); + final response = await http.post( + url, + body: body, + ); if (response.statusCode == 200) { - _notification = NotificationText('Registration successful, please log in.', type: 'info'); + _notification = NotificationText( + 'Registration successful, please log in.', + type: 'info'); notifyListeners(); result['success'] = true; return result; @@ -110,16 +118,20 @@ class AuthProvider with ChangeNotifier { } Future passwordReset(String email) async { - final url = "$api/forgot-password"; + final url = Uri.parse("$api/forgot-password"); Map body = { 'email': email, }; - final response = await http.post( url, body: body, ); + final response = await http.post( + url, + body: body, + ); if (response.statusCode == 200) { - _notification = NotificationText('Reset sent. Please check your inbox.', type: 'info'); + _notification = NotificationText('Reset sent. Please check your inbox.', + type: 'info'); notifyListeners(); return true; } @@ -142,12 +154,12 @@ class AuthProvider with ChangeNotifier { logOut([bool tokenExpired = false]) async { _status = Status.Unauthenticated; if (tokenExpired == true) { - _notification = NotificationText('Session expired. Please log in again.', type: 'info'); + _notification = NotificationText('Session expired. Please log in again.', + type: 'info'); } notifyListeners(); SharedPreferences storage = await SharedPreferences.getInstance(); await storage.clear(); } - -} \ No newline at end of file +} diff --git a/lib/services/api.dart b/lib/services/api.dart index a396072..7e381fd 100644 --- a/lib/services/api.dart +++ b/lib/services/api.dart @@ -9,7 +9,6 @@ import 'package:flutter_todo/utils/todo_response.dart'; import 'package:flutter_todo/models/todo.dart'; class ApiService { - AuthProvider authProvider; String token; @@ -30,26 +29,24 @@ class ApiService { */ void validateResponseStatus(int status, int validStatus) { if (status == 401) { - throw new AuthException( "401", "Unauthorized" ); + throw new AuthException("401", "Unauthorized"); } if (status != validStatus) { - throw new ApiException( status.toString(), "API Error" ); + throw new ApiException(status.toString(), "API Error"); } } // Returns a list of todos. - Future getTodos(String status, { String url = '' }) async { + Future getTodos(String status, {String url = ''}) async { // Defaults to the first page if no url is set. if ('' == url) { url = "$api?status=$status"; } final response = await http.get( - url, - headers: { - HttpHeaders.authorizationHeader: 'Bearer $token' - }, + Uri.parse(url), + headers: {HttpHeaders.authorizationHeader: 'Bearer $token'}, ); validateResponseStatus(response.statusCode, 200); @@ -71,13 +68,9 @@ class ApiService { 'status': status, }; - final response = await http.patch( - url, - headers: { - HttpHeaders.authorizationHeader: 'Bearer $token' - }, - body: body - ); + final response = await http.patch(Uri.parse(url), + headers: {HttpHeaders.authorizationHeader: 'Bearer $token'}, + body: body); validateResponseStatus(response.statusCode, 200); } @@ -88,13 +81,9 @@ class ApiService { 'value': text, }; - final response = await http.post( - api, - headers: { - HttpHeaders.authorizationHeader: 'Bearer $token' - }, - body: body - ); + final response = await http.post(Uri.parse(api), + headers: {HttpHeaders.authorizationHeader: 'Bearer $token'}, + body: body); validateResponseStatus(response.statusCode, 201); @@ -103,5 +92,4 @@ class ApiService { int id = apiResponse['id']; return id; } - -} \ No newline at end of file +} diff --git a/lib/views/loading.dart b/lib/views/loading.dart index 3e357aa..169f962 100644 --- a/lib/views/loading.dart +++ b/lib/views/loading.dart @@ -4,14 +4,12 @@ import 'package:provider/provider.dart'; import 'package:flutter_todo/providers/auth.dart'; class Loading extends StatelessWidget { - initAuthProvider(context) async { - Provider.of(context).initAuthProvider(); + Provider.of(context, listen: false).initAuthProvider(); } @override Widget build(BuildContext context) { - initAuthProvider(context); return Scaffold( @@ -28,4 +26,4 @@ class Loading extends StatelessWidget { ), ); } -} \ No newline at end of file +} diff --git a/lib/views/login.dart b/lib/views/login.dart index 761e9d5..6987c74 100644 --- a/lib/views/login.dart +++ b/lib/views/login.dart @@ -45,7 +45,8 @@ class LogInFormState extends State { Future submit() async { final form = _formKey.currentState; if (form.validate()) { - await Provider.of(context).login(email, password); + await Provider.of(context, listen: false) + .login(email, password); } } @@ -64,29 +65,28 @@ class LogInFormState extends State { ), SizedBox(height: 10.0), Consumer( - builder: (context, provider, child) => provider.notification ?? NotificationText(''), + builder: (context, provider, child) => + provider.notification ?? NotificationText(''), ), SizedBox(height: 30.0), TextFormField( - decoration: Styles.input.copyWith( - hintText: 'Email', - ), - validator: (value) { - email = value.trim(); - return Validate.validateEmail(value); - } - ), + decoration: Styles.input.copyWith( + hintText: 'Email', + ), + validator: (value) { + email = value.trim(); + return Validate.validateEmail(value); + }), SizedBox(height: 15.0), TextFormField( - obscureText: true, - decoration: Styles.input.copyWith( - hintText: 'Password', - ), - validator: (value) { - password = value.trim(); - return Validate.requiredField(value, 'Password is required.'); - } - ), + obscureText: true, + decoration: Styles.input.copyWith( + hintText: 'Password', + ), + validator: (value) { + password = value.trim(); + return Validate.requiredField(value, 'Password is required.'); + }), SizedBox(height: 15.0), StyledFlatButton( 'Sign In', @@ -106,8 +106,8 @@ class LogInFormState extends State { style: Styles.p.copyWith(color: Colors.blue[500]), recognizer: TapGestureRecognizer() ..onTap = () => { - Navigator.pushNamed(context, '/register'), - }, + Navigator.pushNamed(context, '/register'), + }, ), ], ), @@ -117,13 +117,12 @@ class LogInFormState extends State { Center( child: RichText( text: TextSpan( - text: 'Forgot Your Password?', - style: Styles.p.copyWith(color: Colors.blue[500]), - recognizer: TapGestureRecognizer() - ..onTap = () => { - Navigator.pushNamed(context, '/password-reset'), - } - ), + text: 'Forgot Your Password?', + style: Styles.p.copyWith(color: Colors.blue[500]), + recognizer: TapGestureRecognizer() + ..onTap = () => { + Navigator.pushNamed(context, '/password-reset'), + }), ), ), ], diff --git a/lib/views/todos.dart b/lib/views/todos.dart index 4ce4aed..a823736 100644 --- a/lib/views/todos.dart +++ b/lib/views/todos.dart @@ -13,12 +13,10 @@ class Todos extends StatefulWidget { } class TodosState extends State { - bool loading = false; String activeTab = 'open'; toggleTodo(BuildContext context, Todo todo) async { - String statusModified = todo.status == 'open' ? 'closed' : 'open'; bool updated = await Provider.of(context).toggleTodo(todo); @@ -37,7 +35,7 @@ class TodosState extends State { } if (mounted) { - Scaffold.of(context).showSnackBar(statusMessage); + ScaffoldMessenger.of(context).showSnackBar(statusMessage); } } @@ -49,25 +47,27 @@ class TodosState extends State { } void loadMore() async { - // If we're already loading return early. if (loading) { return; } - setState(() { loading = true; }); + setState(() { + loading = true; + }); // Loads more items in the activeTab. await Provider.of(context).loadMore(activeTab); // If auth token has expired, widget is disposed and state is not set. if (mounted) { - setState(() { loading = false; }); + setState(() { + loading = false; + }); } } void showAddTaskSheet(context) { - // The addTodo function is passed to the AddTodo widget // because modals do not have access to the Provider. Function addTodo = Provider.of(context).addTodo; @@ -82,29 +82,27 @@ class TodosState extends State { void displayProfileMenu(context) { showModalBottomSheet( - context: context, - builder: (BuildContext context) { - return Container( - child: Wrap( - children: [ - ListTile( - leading: Icon(Icons.exit_to_app), - title: Text('Log out'), - onTap: () { - Provider.of(context).logOut(); - Navigator.pop(context); - }, - ), - ], - ), - ); - } - ); + context: context, + builder: (BuildContext context) { + return Container( + child: Wrap( + children: [ + ListTile( + leading: Icon(Icons.exit_to_app), + title: Text('Log out'), + onTap: () { + Provider.of(context, listen: false).logOut(); + Navigator.pop(context); + }, + ), + ], + ), + ); + }); } @override Widget build(BuildContext context) { - final openTodos = Provider.of(context).openTodos; final closedTodos = Provider.of(context).closedTodos; @@ -149,5 +147,4 @@ class TodosState extends State { ), ); } - } diff --git a/pubspec.lock b/pubspec.lock index d4c7430..43bcc11 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,35 +7,70 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.6.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.2.0" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.15.0" cupertino_icons: dependency: "direct main" description: name: cupertino_icons url: "https://pub.dartlang.org" source: hosted - version: "0.1.2" + version: "1.0.3" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + 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 @@ -46,69 +81,158 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" http: dependency: "direct main" description: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.12.0+2" + version: "0.13.3" http_parser: dependency: transitive description: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "3.1.3" + version: "4.0.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.3" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.5" + version: "0.12.10" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.7" + version: "1.3.0" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" + version: "1.8.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" pedantic: dependency: transitive description: name: pedantic url: "https://pub.dartlang.org" source: hosted - version: "1.8.0+1" - provider: - dependency: "direct main" + version: "1.11.1" + platform: + dependency: transitive description: - name: provider + name: platform url: "https://pub.dartlang.org" source: hosted - version: "3.1.0" - quiver: + version: "3.0.0" + plugin_platform_interface: dependency: transitive description: - name: quiver + name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.0" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.1" + provider: + dependency: "direct main" + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.0" shared_preferences: dependency: "direct main" description: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "0.5.3+4" + version: "2.0.6" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" sky_engine: dependency: transitive description: flutter @@ -120,56 +244,70 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + 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" 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.5" + version: "0.3.0" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.3.0" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.1.0" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.4" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" sdks: - dart: ">=2.3.0 <3.0.0" - flutter: ">=1.5.0 <2.0.0" + dart: ">=2.13.0 <3.0.0" + flutter: ">=1.20.0" diff --git a/pubspec.yaml b/pubspec.yaml index 8644484..6a137ee 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,10 +20,10 @@ dependencies: flutter: sdk: flutter - cupertino_icons: ^0.1.2 - http: ^0.12.0 - shared_preferences: ^0.5.0 - provider: ^3.0.0 + cupertino_icons: ^1.0.3 + http: ^0.13.3 + shared_preferences: ^2.0.6 + provider: ^5.0.0 dev_dependencies: flutter_test: