diff --git a/android/app/src/main/kotlin/fr/astrolabe/astronote_app/MainActivity.kt b/android/app/src/main/kotlin/fr/astrolabe/astronote_app/MainActivity.kt
index 77f35ec..4a41156 100644
--- a/android/app/src/main/kotlin/fr/astrolabe/astronote_app/MainActivity.kt
+++ b/android/app/src/main/kotlin/fr/astrolabe/astronote_app/MainActivity.kt
@@ -1,69 +1,7 @@
package fr.astrolabe.astronote_app
-import android.content.BroadcastReceiver
-import android.os.Bundle
-import android.content.Context
-import android.content.Intent
-import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
-import io.flutter.embedding.engine.FlutterEngine
-import io.flutter.plugin.common.EventChannel
-import io.flutter.plugin.common.EventChannel.EventSink
-import io.flutter.plugin.common.MethodChannel
-import io.flutter.plugins.GeneratedPluginRegistrant
+
class MainActivity : FlutterActivity() {
-
- private val CHANNEL = "https://demo.endi.coop"
- private val EVENTS = "https://demo.endi.coop/login?nextpage=%2F"
- private var startString: String? = null
- private var linksReceiver: BroadcastReceiver? = null
-
- override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
- GeneratedPluginRegistrant.registerWith(flutterEngine)
-
- MethodChannel(flutterEngine.dartExecutor, CHANNEL).setMethodCallHandler { call, result ->
- if (call.method == "initialLink") {
- if (startString != null) {
- result.success(startString)
- }
- }
- }
-
- EventChannel(flutterEngine.dartExecutor, EVENTS).setStreamHandler(
- object : EventChannel.StreamHandler {
- override fun onListen(args: Any?, events: EventSink) {
- linksReceiver = createChangeReceiver(events)
- }
-
- override fun onCancel(args: Any?) {
- linksReceiver = null
- }
- }
- )
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- val intent = getIntent()
- startString = intent.data?.toString()
- }
-
- override fun onNewIntent(intent: Intent) {
- super.onNewIntent(intent)
- if (intent.action === Intent.ACTION_VIEW) {
- linksReceiver?.onReceive(this.applicationContext, intent)
- }
- }
-
- fun createChangeReceiver(events: EventSink): BroadcastReceiver? {
- return object : BroadcastReceiver() {
- override fun onReceive(context: Context, intent: Intent) { // assuming intent.getAction() is Intent.ACTION_VIEW
- val dataString = intent.dataString
- ?: events.error("UNAVAILABLE", "Link unavailable", null)
- events.success(dataString)
- }
- }
- }
}
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 5b7006a..c4146a0 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -41,9 +41,6 @@
UIViewControllerBasedStatusBarAppearance
- com.apple.developer.associated-domains
-
- applinks:demo.endi.coop
-
+
diff --git a/lib/bloc.dart b/lib/bloc.dart
deleted file mode 100644
index 211aa1d..0000000
--- a/lib/bloc.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-import 'dart:async';
-
-import 'package:flutter/services.dart';
-
-abstract class Bloc {
- void dispose();
-}
-
-class DeepLinkBloc extends Bloc {
- //Event Channel creation
- static const stream =
- const EventChannel('https://demo.endi.coop/login?nextpage=%2F');
-
- //Method channel creation
- static const platform = const MethodChannel('https://demo.endi.coop');
-
- StreamController _stateController = StreamController();
-
- Stream get state => _stateController.stream;
-
- Sink get stateSink => _stateController.sink;
-
- //Adding the listener into contructor
- DeepLinkBloc() {
- //Checking application start by deep link
- startUri().then(_onRedirected);
- //Checking broadcast stream, if deep link was clicked in opened appication
- stream.receiveBroadcastStream().listen((d) => _onRedirected(d));
- }
-
- _onRedirected(String uri) {
- // Throw deep link URI into the BloC's stream
- stateSink.add(uri);
- }
-
- @override
- void dispose() {
- _stateController.close();
- }
-
- Future startUri() async {
- try {
- return platform.invokeMethod('initialLink');
- } on PlatformException catch (e) {
- return "Failed to Invoke: '${e.message}'.";
- }
- }
-}
diff --git a/lib/endi.dart b/lib/endi.dart
deleted file mode 100644
index 3f73abc..0000000
--- a/lib/endi.dart
+++ /dev/null
@@ -1,165 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-import 'bloc.dart';
-import 'package:url_launcher/url_launcher.dart';
-import 'package:flushbar/flushbar.dart';
-
-class EndiLog extends StatefulWidget {
- @override
- _EndiLogState createState() => _EndiLogState();
-}
-
-class _EndiLogState extends State {
- TextStyle style = TextStyle(fontFamily: 'Varela Round', fontSize: 20.0);
-
- @override
- Widget build(BuildContext context) {
- DeepLinkBloc _bloc = Provider.of(context);
- return StreamBuilder(
- stream: _bloc.state,
- builder: (context, snapshot) {
- if (!snapshot.hasData) {
- return Container(
- child: Center(child: Text('No deep link was used ')));
- } else {
- return SingleChildScrollView(
- child: Container(
- height: MediaQuery.of(context).size.height,
- color: Colors.white,
- child: Padding(
- padding: EdgeInsets.all(50),
- child: Column(
- children: [
-// SizedBox(height: 40),
- _logoApp(),
- _titleApp(),
- SizedBox(height: 80),
- _emailField(),
- SizedBox(height: 30),
- _passwordField(),
- SizedBox(height: 50),
- _logButton(),
- SizedBox(height: 70),
- _enDIUrl(),
- SizedBox(height: 5),
- _astrolabeUrl()
- ],
- ),
- ),
- ),
- );
- }
- });
- }
-
- Widget _logoApp() {
- return SizedBox(
- height: 100.0,
- child: Image.asset(
- "assets/astrolabe_logo.jpg",
- ),
- );
- }
-
- Widget _titleApp() {
- return Text(
- "AstroNotes",
- style: style.copyWith(color: Colors.black, fontSize: 40),
- );
- }
-
- Widget _emailField() {
- return TextField(
- style: style,
- keyboardType: TextInputType.emailAddress,
- decoration: InputDecoration(
- contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
- labelText: "E-mail",
- border:
- OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
- );
- }
-
- Widget _passwordField() {
- return TextField(
- style: style,
- obscureText: true,
- decoration: InputDecoration(
- contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
- labelText: "Mot de passe",
- border:
- OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
- );
- }
-
- Widget _logButton() {
- return Material(
- elevation: 5.0,
- borderRadius: BorderRadius.circular(30.0),
- color: Color(0xFF4A148C),
- child: MaterialButton(
-// minWidth: MediaQuery.of(context).size.width,
- padding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
- onPressed: () {},
- child: Text("Connexion",
- textAlign: TextAlign.center,
- style: style.copyWith(
- color: Colors.white, fontWeight: FontWeight.bold)),
- ));
- }
-
- void showErrorFlushbar(BuildContext context) {
- Flushbar(
- message: "Impossible d'ouvrir le lien",
- backgroundColor: Colors.red[300],
- duration: Duration(seconds: 3),
- // Show it with a cascading operator
- )..show(context);
- }
-
- void _launchLinkEnDI() async {
- const url = "https://endi.coop";
-
- if (await canLaunch(url)) {
- await launch(url);
- } else {
- showErrorFlushbar(context);
- }
- }
-
- void _launchLinkAstrolabe() async {
- const url = "https://astrolabe.coop";
-
- if (await canLaunch(url)) {
- await launch(url);
- } else {
- showErrorFlushbar(context);
- }
- }
-
- Widget _enDIUrl() {
- return InkWell(
- onTap: _launchLinkEnDI,
- child: Text(
- "En collaboration avec enDI",
- style: style.copyWith(
- color: Colors.black,
- fontSize: 15,
- decoration: TextDecoration.underline),
- ),
- );
- }
-
- Widget _astrolabeUrl() {
- return InkWell(
- onTap: _launchLinkAstrolabe,
- child: Text(
- "Développé par Astrolabe",
- style: style.copyWith(
- color: Colors.black,
- fontSize: 15,
- decoration: TextDecoration.underline),
- ),
- );
- }
-}
diff --git a/lib/main.dart b/lib/main.dart
index d572967..00ac518 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,22 +1,16 @@
+import 'package:astronote_app/screens/sign_in_screen.dart';
import 'package:flutter/material.dart';
-import 'bloc.dart';
-import 'package:provider/provider.dart';
-import 'endi.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
- // This widget is the root of your application.
@override
Widget build(BuildContext context) {
- DeepLinkBloc _bloc = DeepLinkBloc();
-
return MaterialApp(
- debugShowCheckedModeBanner: false,
- home: Scaffold(
- body: Provider(
- create: (context) => _bloc,
- dispose: (context, bloc) => bloc.dispose(),
- child: EndiLog())));
+ theme: ThemeData(
+ fontFamily: 'Varela Round',
+ ),
+ home: LoginScreen()
+ );
}
}
diff --git a/lib/models/companies.dart b/lib/models/companies.dart
new file mode 100644
index 0000000..413e489
--- /dev/null
+++ b/lib/models/companies.dart
@@ -0,0 +1,18 @@
+class Companies {
+ int id;
+ String name;
+
+ Companies({this.id, this.name});
+
+ Companies.fromJson(Map json) {
+ id = json['id'];
+ name = json['name'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['id'] = this.id;
+ data['name'] = this.name;
+ return data;
+ }
+}
\ No newline at end of file
diff --git a/lib/models/datas.dart b/lib/models/datas.dart
new file mode 100644
index 0000000..b8608d3
--- /dev/null
+++ b/lib/models/datas.dart
@@ -0,0 +1,33 @@
+import 'package:astronote_app/models/companies.dart';
+
+class Datas {
+ String lastname;
+ List companies;
+ String firstname;
+ String civilite;
+
+ Datas({this.lastname, this.companies, this.firstname, this.civilite});
+
+ Datas.fromJson(Map json) {
+ lastname = json['lastname'];
+ if (json['companies'] != null) {
+ companies = new List();
+ json['companies'].forEach((v) {
+ companies.add(new Companies.fromJson(v));
+ });
+ }
+ firstname = json['firstname'];
+ civilite = json['civilite'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['lastname'] = this.lastname;
+ if (this.companies != null) {
+ data['companies'] = this.companies.map((v) => v.toJson()).toList();
+ }
+ data['firstname'] = this.firstname;
+ data['civilite'] = this.civilite;
+ return data;
+ }
+}
\ No newline at end of file
diff --git a/lib/models/sign_in_api.dart b/lib/models/sign_in_api.dart
new file mode 100644
index 0000000..594a07b
--- /dev/null
+++ b/lib/models/sign_in_api.dart
@@ -0,0 +1,28 @@
+import 'package:astronote_app/models/datas.dart';
+
+class Api {
+ String status;
+ String api;
+ String id;
+ Datas datas;
+
+ Api ({this.status, this.api, this.id, this.datas});
+
+ Api.fromJson(Map json) {
+ status = json['status'];
+ api = json['api'];
+ id = json['id'];
+ datas = json['datas'] != null ? new Datas.fromJson(json['datas']) : null;
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['status'] = this.status;
+ data['api'] = this.api;
+ data['id'] = this.id;
+ if (this.datas != null) {
+ data['datas'] = this.datas.toJson();
+ }
+ return data;
+ }
+}
\ No newline at end of file
diff --git a/lib/providers/sign_in.dart b/lib/providers/sign_in.dart
new file mode 100644
index 0000000..2c81a03
--- /dev/null
+++ b/lib/providers/sign_in.dart
@@ -0,0 +1,52 @@
+import 'dart:convert';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/widgets.dart';
+import 'package:http/http.dart' as http;
+
+class SignIn with ChangeNotifier {
+ String cookie;
+
+ Future login(String url, String email, String password) async {
+ String urlApi = url + '/api/v1/login';
+
+ Map headers = {
+ "X-Requested-With": "XMLHttpRequest",
+ "Content-Type": "application/json",
+ };
+ var body = json.encode({"login": email, "password": password});
+
+ final response = await http.post(urlApi, headers: headers, body: body);
+ if (response.statusCode == 200) {
+ // If the server did return a 200 OK response,
+ // then parse the JSON.
+ print(response.headers['set-cookie']);
+ cookie = response.headers['set-cookie'];
+ //TODO : return http.get + company_choice_screen root
+ recoverUserData(urlApi);
+ // If the server did not return a 200 OK response,
+ // then throw an exception.
+ //TODO: error message ?
+ }
+
+// final responseJson = json.decode(response.body);
+ }
+
+ Future recoverUserData(String url) async {
+ Map headers = {"X-Requested-With": "XMLHttpRequest","Cookie":cookie};
+
+ final response = await http.get(url, headers: headers);
+
+ if (response.statusCode == 200) {
+ // If the server did return a 200 OK response,
+ // then parse the JSON.
+ print(response.headers['datas']);
+ } else {
+ // If the server did not return a 200 OK response,
+ // then throw an exception.
+ }
+// final responseJson = json.decode(response.body);
+//
+// print(responseJson);
+ }
+}
diff --git a/lib/screens/company_choice_screen.dart b/lib/screens/company_choice_screen.dart
new file mode 100644
index 0000000..e69de29
diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart
new file mode 100644
index 0000000..e69de29
diff --git a/lib/screens/sign_in_screen.dart b/lib/screens/sign_in_screen.dart
new file mode 100644
index 0000000..a58b4e1
--- /dev/null
+++ b/lib/screens/sign_in_screen.dart
@@ -0,0 +1,85 @@
+import 'package:flutter/material.dart';
+import 'file:///D:/AndroidStudioProjects/astronote_app/lib/widgets/footer_sign_in_widget.dart';
+
+import 'file:///D:/AndroidStudioProjects/astronote_app/lib/widgets/form_sign_in_widget.dart';
+import 'package:astronote_app/widgets/header_sign__in_widget.dart';
+
+class LoginScreen extends StatefulWidget {
+ @override
+ _LoginScreenState createState() => _LoginScreenState();
+}
+
+class _LoginScreenState extends State {
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: Container(
+// width: double.infinity,
+ child: SingleChildScrollView(
+ padding: EdgeInsets.only(
+ left: MediaQuery.of(context).size.height * 0.07,
+ right: MediaQuery.of(context).size.height * 0.07),
+// scrollDirection: Axis.vertical,
+ child: Column(
+ children: [
+ HeaderLogWidget(),
+ SizedBox(height: MediaQuery.of(context).size.height * 0.08),
+ FormLogWidget(),
+ SizedBox(height: MediaQuery.of(context).size.height * 0.08),
+ FooterLogWidget(),
+ SizedBox(height: MediaQuery.of(context).size.height * 0.05),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+
+// Widget _enDIUrl() {
+// return InkWell(
+// onTap: _enDIUrl,
+// child: Text(
+// "En collaboration avec enDI",
+// style: style.copyWith(
+// color: Colors.black,
+// fontSize: 15.0,
+// decoration: TextDecoration.underline),
+// ),
+// );
+// }
+//
+// Widget _astrolabeUrl() {
+// return InkWell(
+// onTap: _launchLinkAstrolabe,
+// child: Text(
+// "Développé par Astrolabe",
+// style: style.copyWith(
+// color: Colors.black,
+// fontSize: 15,
+// decoration: TextDecoration.underline),
+// ),
+// );
+// }
+//
+//
+//
+// void launchLinkEnDI() async {
+// const urlEndi = "hhuh";
+//
+// if (await canLaunch(urlEndi)) {
+// await launch(urlEndi);
+// } else {
+//
+// }
+// }
+//
+// void _launchLinkAstrolabe() async {
+// const url = "https://astrolabe.coop";
+//
+// if (await canLaunch(url)) {
+// await launch(url);
+// } else {
+//
+// }
+// }
+}
diff --git a/lib/widgets/footer_sign_in_widget.dart b/lib/widgets/footer_sign_in_widget.dart
new file mode 100644
index 0000000..8c6b887
--- /dev/null
+++ b/lib/widgets/footer_sign_in_widget.dart
@@ -0,0 +1,66 @@
+import 'package:flutter/material.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+class FooterLogWidget extends StatelessWidget {
+ final TextStyle style = TextStyle(fontFamily: 'Varela Round', fontSize: 20.0);
+
+
+ @override
+ Widget build(BuildContext context) {
+ return Center(
+ child: Column(
+ children: [
+ _enDIUrl(),
+ SizedBox(height: 5),
+ _astrolabeUrl()
+ ],
+ ),
+ );
+ }
+
+ Widget _enDIUrl() {
+ return InkWell(
+ onTap: _launchLinkEnDI,
+ child: Text(
+ "En collaboration avec enDI",
+ style: style.copyWith(
+ color: Colors.black,
+ fontSize: 15.0,
+ decoration: TextDecoration.underline),
+ ),
+ );
+ }
+
+ Widget _astrolabeUrl() {
+ return InkWell(
+ onTap: _launchLinkAstrolabe,
+ child: Text(
+ "Développé par Astrolabe",
+ style: style.copyWith(
+ color: Colors.black,
+ fontSize: 15,
+ decoration: TextDecoration.underline),
+ ),
+ );
+ }
+
+ void _launchLinkEnDI() async {
+ const urlEndi = "https://endi.coop";
+
+ if (await canLaunch(urlEndi)) {
+ await launch(urlEndi);
+ } else {
+ //TODO : error message
+ }
+ }
+
+ void _launchLinkAstrolabe() async {
+ const url = "https://astrolabe.coop";
+
+ if (await canLaunch(url)) {
+ await launch(url);
+ } else {
+ //TODO : error message
+ }
+ }
+}
diff --git a/lib/widgets/form_sign_in_widget.dart b/lib/widgets/form_sign_in_widget.dart
new file mode 100644
index 0000000..2ff2e79
--- /dev/null
+++ b/lib/widgets/form_sign_in_widget.dart
@@ -0,0 +1,109 @@
+import 'package:flutter/material.dart';
+
+import 'package:flutter/widgets.dart';
+import 'package:astronote_app/providers/sign_in.dart';
+
+class FormLogWidget extends StatefulWidget {
+ @override
+ _FormLogWidgetState createState() => _FormLogWidgetState();
+}
+
+class _FormLogWidgetState extends State {
+ TextStyle style = TextStyle(fontFamily: 'Varela Round', fontSize: 20.0);
+
+ bool _obscurePassword = true;
+ final GlobalKey _formKey = GlobalKey();
+ bool _isLoading = false;
+
+ TextEditingController urlController = new TextEditingController();
+ TextEditingController emailController = new TextEditingController();
+ TextEditingController passwordController = new TextEditingController();
+
+
+ @override
+ Widget build(BuildContext context) {
+ return Form(
+ key: _formKey,
+ child: Column(
+ children: [
+ _urlFormField(),
+ SizedBox(height: MediaQuery.of(context).size.height * 0.03),
+ _emailFormField(),
+ SizedBox(height: MediaQuery.of(context).size.height * 0.03),
+ _passwordFormField(),
+ SizedBox(height: MediaQuery.of(context).size.height * 0.07),
+ _logButton()
+ ],
+ ),
+ );
+ }
+
+ Widget _urlFormField() {
+ return TextFormField(
+ controller: urlController,
+ style: style,
+ keyboardType: TextInputType.url,
+ decoration: InputDecoration(
+ contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
+ labelText: "Lien enDI",
+ suffixIcon: Icon(Icons.link,color: Colors.indigo[900]),
+ border:
+ OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
+ );
+ }
+
+ Widget _emailFormField() {
+ return TextFormField(
+ controller: emailController,
+ style: style,
+ keyboardType: TextInputType.emailAddress,
+ decoration: InputDecoration(
+ contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
+ labelText: "E-mail",
+ suffixIcon: Icon(Icons.mail,color: Colors.indigo[900]),
+ border:
+ OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
+ );
+ }
+
+ Widget _passwordFormField() {
+ return TextFormField(
+ controller: passwordController,
+ style: style,
+ obscureText: _obscurePassword,
+ decoration: InputDecoration(
+ contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
+ labelText: "Mot de passe",
+ suffixIcon: IconButton(
+ icon: Icon(
+ _obscurePassword ? Icons.visibility : Icons.visibility_off,color: Colors.indigo[900]),
+ onPressed: () {
+ setState(() => _obscurePassword = !_obscurePassword);
+ }),
+ border:
+ OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
+ );
+ }
+
+ Widget _logButton() {
+ return Material(
+ elevation: 3.0,
+ borderRadius: BorderRadius.circular(30.0),
+ color: Colors.indigo[900],
+ child: MaterialButton(
+// minWidth: MediaQuery.of(context).size.width,
+ padding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
+ onPressed: () {
+ setState(() {
+ _isLoading = true;
+ });
+ SignIn().login(urlController.text, emailController.text, passwordController.text);
+ },
+ child: Text("Connexion",
+ textAlign: TextAlign.center,
+ style: style.copyWith(
+ color: Colors.white, fontWeight: FontWeight.bold)),
+ )
+ );
+ }
+}
diff --git a/lib/widgets/header_sign__in_widget.dart b/lib/widgets/header_sign__in_widget.dart
new file mode 100644
index 0000000..7fe1488
--- /dev/null
+++ b/lib/widgets/header_sign__in_widget.dart
@@ -0,0 +1,29 @@
+import 'package:flutter/material.dart';
+
+class HeaderLogWidget extends StatelessWidget {
+ final TextStyle style = TextStyle(fontFamily: 'Varela Round', fontSize: 20.0);
+
+ @override
+ Widget build(BuildContext context) {
+ return Center(
+ child: Container(
+ margin: EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.09),
+ child: Column(
+ children: [_astrolabeLogo(), SizedBox(height: 5.0), _appTitle(context)],
+ ),
+ ),
+ );
+ }
+
+ Widget _astrolabeLogo() {
+ return Image.asset(
+ "assets/astrolabe_logo.jpg",
+ );
+ }
+
+ Widget _appTitle(BuildContext context) {
+ return Text("AstroNotes",
+ style:
+ style.copyWith(color: Colors.black, fontSize: 40));
+ }
+}
diff --git a/pubspec.lock b/pubspec.lock
index 9176334..f579648 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -64,6 +64,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "5.2.1"
flushbar:
dependency: "direct main"
description:
@@ -86,6 +93,20 @@ packages:
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.2"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.1.4"
image:
dependency: transitive
description:
@@ -93,6 +114,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.12"
+ intl:
+ dependency: transitive
+ description:
+ name: intl
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.16.1"
matcher:
dependency: transitive
description:
@@ -121,6 +149,27 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.4"
+ path_provider_linux:
+ dependency: transitive
+ description:
+ name: path_provider_linux
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.0.1+2"
+ path_provider_platform_interface:
+ dependency: transitive
+ description:
+ name: path_provider_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.2"
+ pedantic:
+ dependency: transitive
+ description:
+ name: pedantic
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.9.0"
petitparser:
dependency: transitive
description:
@@ -128,6 +177,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
+ platform:
+ dependency: transitive
+ description:
+ name: platform
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.2.1"
platform_detect:
dependency: transitive
description:
@@ -142,6 +198,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
+ process:
+ dependency: transitive
+ description:
+ name: process
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.0.13"
provider:
dependency: "direct main"
description:
@@ -163,6 +226,41 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
+ shared_preferences:
+ dependency: "direct main"
+ description:
+ name: shared_preferences
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.5.8"
+ shared_preferences_linux:
+ dependency: transitive
+ description:
+ name: shared_preferences_linux
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.0.2+1"
+ shared_preferences_macos:
+ dependency: transitive
+ description:
+ name: shared_preferences_macos
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.0.1+10"
+ 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"
sky_engine:
dependency: transitive
description: flutter
@@ -259,6 +357,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
+ xdg_directories:
+ dependency: transitive
+ description:
+ name: xdg_directories
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.0"
xml:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index a08acdd..61212d9 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -23,9 +23,12 @@ environment:
dependencies:
flutter:
sdk: flutter
- provider: ^4.3.1
- flushbar: ^1.10.4
url_launcher: ^5.5.0
+ flushbar: ^1.10.4
+ http: ^0.12.2
+ provider: ^4.3.1
+ shared_preferences: ^0.5.8
+
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.