我正在try 构建一个Ffltter应用程序,它使用OAuth连接到另一个网站上的用户帐户.这需要导航到站点的OAuth页面,用户可以在那里输入他们的凭据,然后在用户返回时解析发送回应用程序的代码.

所以我的问题是:

  1. 如何导航到OAuth网页?

我已经计算出,我可以导航到内部路由,如下所示:

Navigator.of(context).pushNamed('/some_page');

但是如果我想转到像https://coolsite.com/oauth/authorize这样的外部页面呢?

我如何做到这一点(a)通过在本地web浏览器中打开URL,以及(b)通过应用程序内web视图?

  1. 身份验证后,我应该将用户重定向到哪个URL,以便他们返回到应用程序,以及如何解析响应?

似乎有两种方式:

(a) 让用户重定向到一个空白页面,该页面的URL和标题中包含授权代码.如果使用这种方法,我如何解析页面或URL?

(B)将用户重定向到某种方案,如my-dart-app://coolsite-oauth?code=xyz.如果使用此方法,我如何注册方案,cool site-OAuth是否会映射到我在呼叫new MaterialApp时指定的路由或其他地方?我将如何解析查询参数呢?

推荐答案

您可以使用Activity服务触发导航:

import 'package:flutter/services.dart';

void launchUrl(String url) {
  Intent intent = new Intent()
    ..action = 'android.intent.action.VIEW'
    ..url = url;
  activity.startActivity(intent);
}

目前还没有一种方法可以在Flatter中接收导航,但这是我们想要添加的内容.我创建这个问题是为了跟踪这个功能请求:https://github.com/flutter/flutter/issues/357

Dart相关问答推荐

如何在将构造函数参数赋给最终变量和传递给超级构造函数之前操作它?

什么相当于 dart 中的 JAVA ThreadLocal?

Dart 中 ThemeData 类的 copyWith() 方法

Dart 包版本如何工作以及我应该如何对我的 Flutter 插件进行版本控制?

我需要在使用之前将我的 Dart 包发布到 pub.dartlang.org 吗?

如何在 Flutter 中找出 URL 的有效性?

Flutter:如何同步使用 SharedPreferences?

如何使我的Flitter应用程序的导航抽屉(Navigation Drawer)透明?

为http POST请求从Flutter上的TextFormField捕获数据

不要将 PageView 居中 - Flutter

谷歌dart Regions?

Flutter插件和Flutter模块之间有什么区别?

如何在Flutter中正确显示Snackbar?

如何判断两张 map 的省道是否相等

如何从目录中获取文件列表并将其传递给ListView?

不推荐使用AnteStorStateofType,请改用findAncestorStateOfType

Dart 交互/访问数据库

Dart - 如何在每次测试之后或之前运行函数?

如何提高数据与二进制数据转换的 Dart 性能?

判断dart中的字符串是否为数字