From 59d5907b2956fb1625bf87a89807aaeaa1a154ad Mon Sep 17 00:00:00 2001 From: Aleksandr Borisenko Date: Mon, 15 Mar 2021 10:31:38 +0300 Subject: [PATCH] Fixes for API calls --- .gitignore | 67 ++---- android/.gitignore | 17 +- android/app/build.gradle | 20 +- lib/api/client.dart | 28 +-- lib/api/list_implementation.dart | 8 +- lib/global.dart | 2 +- lib/main.dart | 16 +- lib/models/list.dart | 21 +- lib/models/namespace.dart | 2 +- lib/models/user.dart | 4 +- lib/pages/home.dart | 138 ++++++------ lib/pages/list/list.dart | 32 ++- lib/pages/list/list_edit.dart | 4 +- lib/pages/namespace/namespace.dart | 9 +- lib/pages/namespace/namespace_edit.dart | 4 +- lib/pages/user/login.dart | 4 +- pubspec.lock | 270 +++++++++++++++++++++++- pubspec.yaml | 5 +- 18 files changed, 444 insertions(+), 207 deletions(-) diff --git a/.gitignore b/.gitignore index ab3e5ac..0fa6b67 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # Miscellaneous *.class -*.lock *.log *.pyc *.swp @@ -16,62 +15,32 @@ *.iws .idea/ -# Visual Studio Code related -.vscode/ +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ # Flutter/Dart/Pub related **/doc/api/ +**/ios/Flutter/.last_build_id .dart_tool/ .flutter-plugins +.flutter-plugins-dependencies .packages .pub-cache/ .pub/ -build/ -!pubspec.lock -.flutter-plugins-dependencies +/build/ -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java +# Web related +lib/generated_plugin_registrant.dart -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* +# Symbolication related +app.*.symbols -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -ios/fastlane/README.md -ios/fastlane/report.xml -ios/Runner.ipa -ios/Runner.app.dSYM.zip +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/android/.gitignore b/android/.gitignore index 65b7315..0a741cb 100644 --- a/android/.gitignore +++ b/android/.gitignore @@ -1,10 +1,11 @@ -*.iml -*.class -.gradle +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat /local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties diff --git a/android/app/build.gradle b/android/app/build.gradle index 4dd75a2..312d819 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -46,16 +46,16 @@ android { flavorDimensions "deploy" - productFlavors { - fdroid { - dimension "deploy" - signingConfig null - } - unsigned { - dimension "deploy" - signingConfig null - } - } + //productFlavors { + // fdroid { + // dimension "deploy" + // signingConfig null + // } + // unsigned { + // dimension "deploy" + // signingConfig null + // } + //} android.applicationVariants.all { variant -> if (variant.flavorName == "fdroid") { diff --git a/lib/api/client.dart b/lib/api/client.dart index fca43e5..63ef8f3 100644 --- a/lib/api/client.dart +++ b/lib/api/client.dart @@ -26,29 +26,29 @@ class Client { }; Future get(String url) { - return http - .get('${this.base}$url', headers: _headers) - .then(_handleResponse); + return http.get(Uri.parse('${this.base}$url'), + headers: _headers, + ).then(_handleResponse); } Future delete(String url) { - return http - .delete('${this.base}$url', headers: _headers) - .then(_handleResponse); + return http.delete(Uri.parse('${this.base}$url'), + headers: _headers, + ).then(_handleResponse); } Future post(String url, {dynamic body}) { - return http - .post('${this.base}$url', - headers: _headers, body: _encoder.convert(body)) - .then(_handleResponse); + return http.post(Uri.parse('${this.base}$url'), + headers: _headers, + body: _encoder.convert(body), + ).then(_handleResponse); } Future put(String url, {dynamic body}) { - return http - .put('${this.base}$url', - headers: _headers, body: _encoder.convert(body)) - .then(_handleResponse); + return http.put(Uri.parse('${this.base}$url'), + headers: _headers, + body: _encoder.convert(body), + ).then(_handleResponse); } dynamic _handleResponse(http.Response response) { diff --git a/lib/api/list_implementation.dart b/lib/api/list_implementation.dart index 38228d7..4a4e21f 100644 --- a/lib/api/list_implementation.dart +++ b/lib/api/list_implementation.dart @@ -22,7 +22,13 @@ class ListAPIService extends APIService implements ListService { @override Future get(int listId) { - return client.get('/lists/$listId').then((map) => TaskList.fromJson(map)); + return client.get('/lists/$listId').then((map) { + if (map.containsKey('id')) { + return client.get("/lists/$listId/tasks").then((tasks) => TaskList.fromJson( + map, tasksJson: tasks)); + } + return TaskList.fromJson(map); + }); } @override diff --git a/lib/global.dart b/lib/global.dart index 3886075..52e56c6 100644 --- a/lib/global.dart +++ b/lib/global.dart @@ -84,7 +84,7 @@ class VikunjaGlobalState extends State { _currentUser = null; }); }).catchError((err) { - Scaffold.of(context).showSnackBar(SnackBar( + ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('An error occured while logging out!'), )); }); diff --git a/lib/main.dart b/lib/main.dart index c3d0704..482b901 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,22 +3,32 @@ import 'package:vikunja_app/global.dart'; import 'package:vikunja_app/pages/home.dart'; import 'package:vikunja_app/pages/user/login.dart'; import 'package:vikunja_app/theme/theme.dart'; +import 'package:alice/alice.dart'; void main() => runApp(VikunjaGlobal( child: new VikunjaApp(home: HomePage()), login: new VikunjaApp(home: LoginPage()))); -class VikunjaApp extends StatelessWidget { +class VikunjaApp extends StatefulWidget { final Widget home; - const VikunjaApp({Key key, this.home}) : super(key: key); + VikunjaApp({Key key, this.home}) : super(key: key); + + @override + _VikunjaAppState createState() => _VikunjaAppState(); +} + +class _VikunjaAppState extends State { + Alice alice = Alice(showNotification: true); + @override Widget build(BuildContext context) { return new MaterialApp( + navigatorKey: alice.getNavigatorKey(), title: 'Vikunja', theme: buildVikunjaTheme(), darkTheme: buildVikunjaDarkTheme(), - home: this.home, + home: this.widget.home, ); } } diff --git a/lib/models/list.dart b/lib/models/list.dart index 4578c4d..1721a1e 100644 --- a/lib/models/list.dart +++ b/lib/models/list.dart @@ -9,23 +9,24 @@ class TaskList { final DateTime created, updated; final List tasks; - TaskList( - {@required this.id, - @required this.title, - this.description, - this.owner, - this.created, - this.updated, - this.tasks}); + TaskList({ + @required this.id, + @required this.title, + this.description, + this.owner, + this.created, + this.updated, + this.tasks, + }); - TaskList.fromJson(Map json) + TaskList.fromJson(Map json, {tasksJson}) : id = json['id'], owner = User.fromJson(json['owner']), description = json['description'], title = json['title'], updated = DateTime.parse(json['updated']), created = DateTime.parse(json['created']), - tasks = (json['tasks'] == null ? [] : json['tasks'] as List) + tasks = (tasksJson == null ? [] : tasksJson as List) ?.map((taskJson) => Task.fromJson(taskJson)) ?.toList(); diff --git a/lib/models/namespace.dart b/lib/models/namespace.dart index e851761..19f9bb5 100644 --- a/lib/models/namespace.dart +++ b/lib/models/namespace.dart @@ -21,7 +21,7 @@ class Namespace { id = json['id'], created = DateTime.parse(json['created']), updated = DateTime.parse(json['updated']), - owner = User.fromJson(json['owner']); + owner = json['owner'] == null ? null : User.fromJson(json['owner']); toJSON() => { "created": created?.toIso8601String(), diff --git a/lib/models/user.dart b/lib/models/user.dart index 56e21fa..f39b3c3 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -15,9 +15,7 @@ class User { String avatarUrl(BuildContext context) { return VikunjaGlobal.of(context).client.base + - "/" + - this.username + - "/avatar"; + "/avatar/${this.username}"; } } diff --git a/lib/pages/home.dart b/lib/pages/home.dart index 0879f16..8bea3fe 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -1,28 +1,26 @@ import 'dart:async'; -import 'package:flutter/material.dart'; import 'package:after_layout/after_layout.dart'; - +import 'package:flutter/material.dart'; import 'package:vikunja_app/components/AddDialog.dart'; import 'package:vikunja_app/components/ErrorDialog.dart'; +import 'package:vikunja_app/global.dart'; +import 'package:vikunja_app/models/namespace.dart'; import 'package:vikunja_app/pages/namespace/namespace.dart'; import 'package:vikunja_app/pages/namespace/namespace_edit.dart'; import 'package:vikunja_app/pages/placeholder.dart'; -import 'package:vikunja_app/global.dart'; -import 'package:vikunja_app/models/namespace.dart'; class HomePage extends StatefulWidget { @override - State createState() => new HomePageState(); + State createState() => HomePageState(); } class HomePageState extends State with AfterLayoutMixin { List _namespaces = []; - Namespace get _currentNamespace => - _selectedDrawerIndex >= 0 && _selectedDrawerIndex < _namespaces.length - ? _namespaces[_selectedDrawerIndex] - : null; + Namespace get _currentNamespace => _selectedDrawerIndex >= 0 && _selectedDrawerIndex < _namespaces.length + ? _namespaces[_selectedDrawerIndex] + : null; int _selectedDrawerIndex = -1; bool _loading = true; bool _showUserDetails = false; @@ -34,23 +32,19 @@ class HomePageState extends State with AfterLayoutMixin { Widget _namespacesWidget() { List namespacesList = []; - _namespaces - .asMap() - .forEach((i, namespace) => namespacesList.add(new ListTile( - leading: const Icon(Icons.folder), - title: new Text(namespace.title), - selected: i == _selectedDrawerIndex, - onTap: () => _onSelectItem(i), - ))); + _namespaces.asMap().forEach((i, namespace) => namespacesList.add(ListTile( + leading: const Icon(Icons.folder), + title: Text(namespace.title), + selected: i == _selectedDrawerIndex, + onTap: () => _onSelectItem(i), + ))); return this._loading ? Center(child: CircularProgressIndicator()) : RefreshIndicator( child: ListView( padding: EdgeInsets.zero, - children: ListTile.divideTiles( - context: context, tiles: namespacesList) - .toList()), + children: ListTile.divideTiles(context: context, tiles: namespacesList).toList()), onRefresh: _loadNamespaces, ); } @@ -71,9 +65,9 @@ class HomePageState extends State with AfterLayoutMixin { Widget build(BuildContext context) { var currentUser = VikunjaGlobal.of(context).currentUser; - return new Scaffold( + return Scaffold( appBar: AppBar( - title: new Text(_currentNamespace?.title ?? 'Vikunja'), + title: Text(_currentNamespace?.title ?? 'Vikunja'), actions: _currentNamespace == null ? null : [ @@ -84,59 +78,62 @@ class HomePageState extends State with AfterLayoutMixin { MaterialPageRoute( builder: (context) => NamespaceEditPage( namespace: _currentNamespace, - )))) + ) + ) + ) + ), ], ), - drawer: new Drawer( - child: new Column(children: [ - new UserAccountsDrawerHeader( - accountEmail: - currentUser?.email == null ? null : Text(currentUser.email), - accountName: - currentUser?.username == null ? null : Text(currentUser.username), - onDetailsPressed: () { - setState(() { - _showUserDetails = !_showUserDetails; - }); - }, - currentAccountPicture: currentUser == null - ? null - : CircleAvatar( - backgroundImage: NetworkImage(currentUser.avatarUrl(context)), - ), - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/graphics/hypnotize.png"), - repeat: ImageRepeat.repeat, - colorFilter: ColorFilter.mode( - Theme.of(context).primaryColor, BlendMode.multiply)), - ), - ), - new Builder( - builder: (BuildContext context) => Expanded( - child: _showUserDetails - ? _userDetailsWidget(context) - : _namespacesWidget())), - new Align( - alignment: FractionalOffset.bottomCenter, - child: Builder( - builder: (context) => ListTile( - leading: const Icon(Icons.add), - title: const Text('Add namespace...'), - onTap: () => _addNamespaceDialog(context), + drawer: Drawer( + child: Column(children: [ + UserAccountsDrawerHeader( + accountEmail: currentUser?.email == null ? null : Text(currentUser.email), + accountName: currentUser?.username == null ? null : Text(currentUser.username), + onDetailsPressed: () { + setState(() { + _showUserDetails = !_showUserDetails; + }); + }, + currentAccountPicture: currentUser == null + ? null + : CircleAvatar( + backgroundImage: NetworkImage(currentUser.avatarUrl(context)), + ), + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/graphics/hypnotize.png"), + repeat: ImageRepeat.repeat, + colorFilter: ColorFilter.mode(Theme.of(context).primaryColor, BlendMode.multiply), + ), ), ), - ), - ])), + Builder( + builder: (BuildContext context) => + Expanded( + child: _showUserDetails ? _userDetailsWidget(context) : _namespacesWidget(), + ) + ), + Align( + alignment: FractionalOffset.bottomCenter, + child: Builder( + builder: (context) => ListTile( + leading: const Icon(Icons.add), + title: const Text('Add namespace...'), + onTap: () => _addNamespaceDialog(context), + ), + ), + ), + ]), + ), body: _getDrawerItemWidget(_selectedDrawerIndex), ); } _getDrawerItemWidget(int pos) { if (pos == -1) { - return new PlaceholderPage(); + return PlaceholderPage(); } - return new NamespacePage(namespace: _namespaces[pos]); + return NamespacePage(namespace: _namespaces[pos]); } _onSelectItem(int index) { @@ -149,22 +146,17 @@ class HomePageState extends State with AfterLayoutMixin { context: context, builder: (_) => AddDialog( onAdd: (name) => _addNamespace(name, context), - decoration: new InputDecoration( - labelText: 'Namespace', hintText: 'eg. Personal Namespace'), + decoration: InputDecoration(labelText: 'Namespace', hintText: 'eg. Personal Namespace'), )); } _addNamespace(String name, BuildContext context) { - VikunjaGlobal.of(context) - .namespaceService - .create(Namespace(id: null, title: name)) - .then((_) { + VikunjaGlobal.of(context).namespaceService.create(Namespace(id: null, title: name)).then((_) { _loadNamespaces(); - Scaffold.of(context).showSnackBar(SnackBar( + ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('The namespace was created successfully!'), )); - }).catchError((error) => showDialog( - context: context, builder: (context) => ErrorDialog(error: error))); + }).catchError((error) => showDialog(context: context, builder: (context) => ErrorDialog(error: error))); } Future _loadNamespaces() { diff --git a/lib/pages/list/list.dart b/lib/pages/list/list.dart index 6a943c3..f882b46 100644 --- a/lib/pages/list/list.dart +++ b/lib/pages/list/list.dart @@ -24,8 +24,7 @@ class _ListPageState extends State { @override void initState() { - _list = TaskList( - id: widget.taskList.id, title: widget.taskList.title, tasks: []); + _list = TaskList(id: widget.taskList.id, title: widget.taskList.title, tasks: []); super.initState(); } @@ -39,7 +38,7 @@ class _ListPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: new Text(_list.title), + title: Text(_list.title), actions: [ IconButton( icon: Icon(Icons.edit), @@ -48,7 +47,10 @@ class _ListPageState extends State { MaterialPageRoute( builder: (context) => ListEditPage( list: _list, - )))) + ) + ) + ), + ), ], ), body: !this._loading @@ -56,9 +58,7 @@ class _ListPageState extends State { child: _list.tasks.length > 0 ? ListView( padding: EdgeInsets.symmetric(vertical: 8.0), - children: ListTile.divideTiles( - context: context, tiles: _listTasks()) - .toList(), + children: ListTile.divideTiles(context: context, tiles: _listTasks()).toList(), ) : Center(child: Text('This list is empty.')), onRefresh: _loadList, @@ -66,7 +66,8 @@ class _ListPageState extends State { : Center(child: CircularProgressIndicator()), floatingActionButton: Builder( builder: (context) => FloatingActionButton( - onPressed: () => _addItemDialog(context), child: Icon(Icons.add)), + onPressed: () => _addItemDialog(context), child: Icon(Icons.add), + ), )); } @@ -88,10 +89,7 @@ class _ListPageState extends State { } Future _loadList() { - return VikunjaGlobal.of(context) - .listService - .get(widget.taskList.id) - .then((list) { + return VikunjaGlobal.of(context).listService.get(widget.taskList.id).then((list) { setState(() { _loading = false; _list = list; @@ -104,14 +102,14 @@ class _ListPageState extends State { context: context, builder: (_) => AddDialog( onAdd: (name) => _addItem(name, context), - decoration: new InputDecoration( - labelText: 'Task Name', hintText: 'eg. Milk'))); + decoration: InputDecoration(labelText: 'Task Name', hintText: 'eg. Milk'), + ), + ); } _addItem(String name, BuildContext context) { var globalState = VikunjaGlobal.of(context); - var newTask = Task( - id: null, title: name, owner: globalState.currentUser, done: false); + var newTask = Task(id: null, title: name, owner: globalState.currentUser, done: false); setState(() => _loadingTasks.add(newTask)); globalState.taskService.add(_list.id, newTask).then((task) { setState(() { @@ -120,7 +118,7 @@ class _ListPageState extends State { }).then((_) { _loadList(); setState(() => _loadingTasks.remove(newTask)); - Scaffold.of(context).showSnackBar(SnackBar( + ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('The task was added successfully!'), )); }); diff --git a/lib/pages/list/list_edit.dart b/lib/pages/list/list_edit.dart index b151e96..88a0e65 100644 --- a/lib/pages/list/list_edit.dart +++ b/lib/pages/list/list_edit.dart @@ -101,12 +101,12 @@ class _ListEditPageState extends State { VikunjaGlobal.of(context).listService.update(updatedList).then((_) { setState(() => _loading = false); - Scaffold.of(context).showSnackBar(SnackBar( + ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('The list was updated successfully!'), )); }).catchError((err) { setState(() => _loading = false); - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Something went wrong: ' + err.toString()), action: SnackBarAction( diff --git a/lib/pages/namespace/namespace.dart b/lib/pages/namespace/namespace.dart index 07f6f87..19776a7 100644 --- a/lib/pages/namespace/namespace.dart +++ b/lib/pages/namespace/namespace.dart @@ -56,11 +56,8 @@ class _NamespacePageState extends State color: Colors.white, size: 36.0)), ), onDismissed: (direction) { - _removeList(ls).then((_) => Scaffold.of( - context) - .showSnackBar(SnackBar( - content: - Text("${ls.title} removed")))); + _removeList(ls).then((_) => ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text("${ls.title} removed")))); }, ))).toList(), ) @@ -120,7 +117,7 @@ class _NamespacePageState extends State .then((_) { setState(() {}); _loadLists(); - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('The list was successfully created!'), ), diff --git a/lib/pages/namespace/namespace_edit.dart b/lib/pages/namespace/namespace_edit.dart index b77abb8..7e5fde2 100644 --- a/lib/pages/namespace/namespace_edit.dart +++ b/lib/pages/namespace/namespace_edit.dart @@ -107,12 +107,12 @@ class _NamespaceEditPageState extends State { .update(updatedNamespace) .then((_) { setState(() => _loading = false); - Scaffold.of(context).showSnackBar(SnackBar( + ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('The namespace was updated successfully!'), )); }).catchError((err) { setState(() => _loading = false); - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Something went wrong: ' + err.toString()), action: SnackBarAction( diff --git a/lib/pages/user/login.dart b/lib/pages/user/login.dart index fbcae00..8d307fb 100644 --- a/lib/pages/user/login.dart +++ b/lib/pages/user/login.dart @@ -24,7 +24,7 @@ class _LoginPageState extends State { padding: const EdgeInsets.all(16.0), child: Builder( builder: (BuildContext context) => Form( - autovalidate: true, + autovalidateMode: AutovalidateMode.always, key: _formKey, child: Center( child: Column( @@ -122,7 +122,7 @@ class _LoginPageState extends State { 'Login failed! Please check your server url and credentials. ' + ex.toString()), actions: [ - FlatButton( + TextButton( onPressed: () => Navigator.pop(context), child: const Text('Close')) ], diff --git a/pubspec.lock b/pubspec.lock index 111c151..1ef1efe 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,7 +7,14 @@ packages: name: after_layout url: "https://pub.dartlang.org" source: hosted - version: "1.0.7" + version: "1.0.7+2" + alice: + dependency: "direct main" + description: + name: alice + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.12" archive: dependency: transitive description: @@ -29,6 +36,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.5.0" + better_player: + dependency: transitive + description: + name: better_player + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.61" boolean_selector: dependency: transitive description: @@ -50,6 +64,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.0" + chopper: + dependency: transitive + description: + name: chopper + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.6" clock: dependency: transitive description: @@ -78,6 +99,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.5" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.2" cupertino_icons: dependency: "direct main" description: @@ -85,6 +113,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.2" + dio: + dependency: transitive + description: + name: dio + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.10" fake_async: dependency: transitive description: @@ -92,6 +127,20 @@ packages: 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.0.0" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" flutter: dependency: "direct main" description: flutter @@ -104,18 +153,51 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.8.1" + flutter_local_notifications: + dependency: transitive + description: + name: flutter_local_notifications + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.1+2" + flutter_local_notifications_platform_interface: + dependency: transitive + description: + name: flutter_local_notifications_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0+1" flutter_secure_storage: dependency: "direct main" description: name: flutter_secure_storage url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.1.0" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_widget_from_html_core: + dependency: transitive + description: + name: flutter_widget_from_html_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.2+1" + html: + dependency: transitive + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0+4" http: dependency: "direct main" description: @@ -137,6 +219,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.19" + import_js_library: + dependency: transitive + description: + name: import_js_library + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.3" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.4" matcher: dependency: transitive description: @@ -151,6 +254,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.0" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7" + open_file: + dependency: transitive + description: + name: open_file + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + package_info: + dependency: transitive + description: + name: package_info + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.3+4" path: dependency: transitive description: @@ -158,6 +282,41 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0" + path_provider: + dependency: transitive + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.27" + 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: @@ -165,6 +324,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.11.0" + permission_handler: + dependency: transitive + description: + name: permission_handler + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.0+2" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" petitparser: dependency: transitive description: @@ -172,6 +345,48 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.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.1.0" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.25.0" + sensors: + dependency: transitive + description: + name: sensors + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.2+6" + share: + dependency: transitive + description: + name: share + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.5+4" sky_engine: dependency: transitive description: flutter @@ -219,6 +434,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.2.19" + timezone: + dependency: transitive + description: + name: timezone + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.1" typed_data: dependency: transitive description: @@ -233,6 +455,48 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + wakelock: + dependency: transitive + description: + name: wakelock + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.1+1" + wakelock_platform_interface: + dependency: transitive + description: + name: wakelock_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0+1" + wakelock_web: + dependency: transitive + description: + name: wakelock_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0+3" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" xml: dependency: transitive description: @@ -248,5 +512,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=2.12.0-29.10.beta <3.0.0" + dart: ">=2.12.0 <3.0.0" flutter: ">=1.26.0-17.6.pre" diff --git a/pubspec.yaml b/pubspec.yaml index e57c224..4f0f2a2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,9 +10,10 @@ dependencies: flutter: sdk: flutter cupertino_icons: 1.0.2 - flutter_secure_storage: 4.0.0 + flutter_secure_storage: 4.1.0 http: 0.12.2 - after_layout: 1.0.7 + after_layout: 1.0.7+2 + alice: ^0.1.12 dev_dependencies: flutter_test: