mirror of
https://github.com/go-vikunja/app
synced 2024-06-14 08:24:18 +00:00
implemented login by webview of frontend
This commit is contained in:
parent
8681a3267e
commit
32cdfea6d0
|
@ -17,7 +17,8 @@
|
||||||
FlutterApplication and put your custom class here. -->
|
FlutterApplication and put your custom class here. -->
|
||||||
<application
|
<application
|
||||||
android:label="Vikunja"
|
android:label="Vikunja"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:usesCleartextTraffic="true">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
|
|
|
@ -13,6 +13,7 @@ class Client {
|
||||||
bool authenticated;
|
bool authenticated;
|
||||||
|
|
||||||
String get base => _base;
|
String get base => _base;
|
||||||
|
String get token => _token;
|
||||||
|
|
||||||
Client(this._token, String base, {this.authenticated = true})
|
Client(this._token, String base, {this.authenticated = true})
|
||||||
: _base = base.endsWith('/api/v1') ? base : '$base/api/v1';
|
: _base = base.endsWith('/api/v1') ? base : '$base/api/v1';
|
||||||
|
|
|
@ -1,10 +1,16 @@
|
||||||
|
import 'dart:developer';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:vikunja_app/api/client.dart';
|
||||||
|
import 'package:vikunja_app/api/user_implementation.dart';
|
||||||
import 'package:vikunja_app/global.dart';
|
import 'package:vikunja_app/global.dart';
|
||||||
|
import 'package:vikunja_app/pages/user/login_webview.dart';
|
||||||
import 'package:vikunja_app/pages/user/register.dart';
|
import 'package:vikunja_app/pages/user/register.dart';
|
||||||
import 'package:vikunja_app/theme/button.dart';
|
import 'package:vikunja_app/theme/button.dart';
|
||||||
import 'package:vikunja_app/theme/buttonText.dart';
|
import 'package:vikunja_app/theme/buttonText.dart';
|
||||||
import 'package:vikunja_app/theme/constants.dart';
|
import 'package:vikunja_app/theme/constants.dart';
|
||||||
import 'package:vikunja_app/utils/validator.dart';
|
import 'package:vikunja_app/utils/validator.dart';
|
||||||
|
import 'package:webview_flutter/webview_flutter.dart';
|
||||||
|
|
||||||
class LoginPage extends StatefulWidget {
|
class LoginPage extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
|
@ -129,7 +135,19 @@ class _LoginPageState extends State<LoginPage> {
|
||||||
builder: (context) => RegisterPage())),
|
builder: (context) => RegisterPage())),
|
||||||
child: VikunjaButtonText('Register'),
|
child: VikunjaButtonText('Register'),
|
||||||
)),
|
)),
|
||||||
],
|
Builder(builder: (context) => FancyButton(
|
||||||
|
onPressed: () {
|
||||||
|
if(_formKey.currentState.validate()) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(builder: (context) =>
|
||||||
|
LoginWithWebView(_serverController.text))).then((client) => _loginUserByClientToken(client));
|
||||||
|
} else {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Please enter your frontend url")));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: VikunjaButtonText("Login with Frontend")))
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -170,4 +188,17 @@ class _LoginPageState extends State<LoginPage> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_loginUserByClientToken(Client client) async {
|
||||||
|
setState(() => _loading = true);
|
||||||
|
try {
|
||||||
|
var newUser = await UserAPIService(client).getCurrentUser();
|
||||||
|
VikunjaGlobal.of(context).changeUser(
|
||||||
|
newUser, token: client.token, base: client.base);
|
||||||
|
} catch (e) {
|
||||||
|
log(e.toString());
|
||||||
|
}
|
||||||
|
setState(() => _loading = false);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
58
lib/pages/user/login_webview.dart
Normal file
58
lib/pages/user/login_webview.dart
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:developer';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:vikunja_app/models/user.dart';
|
||||||
|
import 'package:vikunja_app/api/client.dart';
|
||||||
|
import 'package:webview_flutter/webview_flutter.dart';
|
||||||
|
|
||||||
|
class LoginWithWebView extends StatefulWidget {
|
||||||
|
String frontEndUrl;
|
||||||
|
|
||||||
|
LoginWithWebView(this.frontEndUrl);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<StatefulWidget> createState() => LoginWithWebViewState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class LoginWithWebViewState extends State<LoginWithWebView> {
|
||||||
|
|
||||||
|
WebView webView;
|
||||||
|
WebViewController webViewController;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
webView = WebView(
|
||||||
|
initialUrl: widget.frontEndUrl,
|
||||||
|
javascriptMode: JavascriptMode.unrestricted,
|
||||||
|
onPageFinished: (value) => _handlePageFinished(value),
|
||||||
|
onWebViewCreated: (controller) => webViewController = controller,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(),
|
||||||
|
body: webView
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handlePageFinished(String value) {
|
||||||
|
log("handlePageFinished");
|
||||||
|
if(webView != null)
|
||||||
|
webViewController.runJavascriptReturningResult("JSON.stringify(localStorage);").then((value) {
|
||||||
|
if(value != "null") {
|
||||||
|
value = value.replaceAll("\\", "");
|
||||||
|
value = value.substring(1,value.length-1);
|
||||||
|
var json = jsonDecode(value);
|
||||||
|
if (json["API_URL"] != null && json["token"] != null) {
|
||||||
|
Client client = Client(json["token"], json["API_URL"]);
|
||||||
|
Navigator.pop(context, client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ dependencies:
|
||||||
json_serializable: 6.1.6
|
json_serializable: 6.1.6
|
||||||
petitparser: 4.1.0
|
petitparser: 4.1.0
|
||||||
provider: 6.0.0
|
provider: 6.0.0
|
||||||
|
webview_flutter: 3.0.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user