我对Flutter 翼还是个新手. 有没有办法通过网络视图登录我们的应用程序?

例如,在第一个页面中有一个网页视图,我们可以在其中进行登录.我们登录后,这款应用程序会把我们带到第二个页面,我们可以在那里做其他事情.

推荐答案

在我的应用程序中,我使用instagram隐式身份验证,这意味着在webview中登录用户并从重定向url获取令牌.我用flutter_webview_plugin

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

class LoginScreen extends StatefulWidget {
  @override
  _LoginScreenState createState() => new _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");
          if (url.startsWith(Constants.redirectUri)) {
            RegExp regExp = new RegExp("#access_token=(.*)");
            this.token = regExp.firstMatch(url)?.group(1);
            print("token $token");

            saveToken(token);
            Navigator.of(context).pushNamedAndRemoveUntil(
                "/home", (Route<dynamic> route) => false);
            flutterWebviewPlugin.close();
          }
        });
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    String loginUrl = "someservise.com/auth";

    return new WebviewScaffold(
        url: loginUrl,
        appBar: new AppBar(
          title: new Text("Login to someservise..."),
        ));
  }
}

Flutter相关问答推荐

我可以在iOS设备上使用Ffltter实现Google Pay按钮吗?

Flutter BLoC et workmanager:如何创建独特的仓库初始化模式?

IsScrollable为True时如何删除Flutter 选项卡栏左侧填充

在Flutter 中更改扩展瓷砖的高度

Flutter 文件拾取器Android SingleInstance模式它返回的文件路径为空

上传的图像不能在FireBase中预览.S档案类型为空白,摆动

如何使自动焦点位于已经有一些文本的 TextField 的第一行?

Select 文本时如何更改 Flutter 中的光标 colored颜色 ?

Flutter:如何在 bottomsheet 中创建一个日期 Select 器,如下图所示

我想在文本结束后显示分隔线.它会在第一行、第二行或第三行结束

面对Flutter 中的行和列问题

如何在两个不同的路由(屏幕)之间正确设置 BlocProvider?

应用程序和应用程序内的 webview 之间的单点登录

如何从 Flutter Slider Widget 中移除发光效果?

flutter 创建一个带有 2 个图标的按钮

Riverpod 在使用冻结副本更新状态时触发重建,即使没有任何更改

Flutter RawMaterialButton 常量相对大小

try 为两个下拉值添加共享首选项,但在 Flutter 上显示错误断言失败:?

根据索引/变量更改小部件的 colored颜色

如何将图像网络装箱到具有边界半径的容器中