因此,主页只是一个按钮,它路由到一个名为"LoginScreen()“的类,然后显示网页。这就是您在代码中看到的。作为一个整体,我对flutter和编程相当陌生,所以请解释一下,好像我不知道我在做什么。
另一个注意事项是,我不确定将身份验证和令牌检索的逻辑应用于何处。即在where视图所在的主页或登录页面中
import 'dart:async';
import 'package:flutter_appauth/flutter_appauth.dart';
import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
import 'package:flutter/services.dart';
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
final flutterWebviewPlugin = new FlutterWebviewPlugin();
StreamSubscription _onDestroy;
StreamSubscription<String> _onUrlChanged;
StreamSubscription<WebViewStateChanged> _onStateChanged;
String token;
@override
void dispose() {
// Every listener should be canceled, the same should be done with this stream.
_onDestroy.cancel();
_onUrlChanged.cancel();
_onStateChanged.cancel();
flutterWebviewPlugin.dispose();
super.dispose();
}
@override
void initState() {
super.initState();
//flutterWebviewPlugin.close();
// Add a listener to on destroy WebView, so you can make came actions.
_onDestroy = flutterWebviewPlugin.onDestroy.listen((_) {
print("destroy");
});
_onStateChanged =
flutterWebviewPlugin.onStateChanged.listen((WebViewStateChanged state) {
print("onStateChanged: ${state.type} ${state.url}");
});
// Add a listener to on url changed
_onUrlChanged = flutterWebviewPlugin.onUrlChanged.listen((String url) {
if (mounted) {
setState(() {
print("URL changed: $url");
//flutterWebviewPlugin.close();
});
}
});
}
@override
Widget build(BuildContext context) {
String url = "http://login/page";
return WebviewScaffold(
appBar: AppBar(
title: Text("Login"),
),
url: url,
withZoom: false,
);
}
}
webview可以工作,但我不知道如何实现逻辑
发布于 2019-04-16 23:15:35
你做这件事的方式完全错误。Flutter旨在提供一种更容易构建的本机体验。您正在使用一种比本地编程更高级的技术,并使其依赖于一种较少的技术,即在本地应用程序中包装webviews。我会提出以下建议。如果你能实现它们的话。
如果你不能改变api并且真的想包装你的应用程序(我不推荐这样做),那么就不要使用Flutter。Flutter's webview非常有限(它仍在开发人员预览中,因为它依赖于将原生视图添加到元素树中,这是一个即将推出的功能)。使用一种迎合网站包装并提供内置支持的技术。如果你是编程新手,这将会让你非常困惑,所以使用一些迎合你想要做的事情。
我推荐使用以下技术:
我知道这可能不是你想要的答案,但根据你的问题,你要解决这个问题会困难得多。请尝试遵循我列出的第一点,您的开发体验将会更好,您的解决方案也将在简单性方面受益。
https://stackoverflow.com/questions/55709389
复制相似问题