Получение токена доступа из Plaid с использованием Webview и Flutter - PullRequest
0 голосов
/ 31 января 2020

В настоящее время я использую пакет flutter_webview_plugin: ^ 0.3.10 + 1 для получения веб-просмотра из пледа. Моя проблема в том, что я пытаюсь настроить слушателя и получить изменения URL. Кажется, он не работает, так как слушатель не получает никаких новых изменений даже после прохождения всего процесса разработки в песочнице. Вот мой код

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PlaidWorkPls(),
    );
  }
}

String authority = 'cdn.plaid.com';
String unencodedPath = '/link/v2/stable/link.html';
Map<String, String> queryParameters = {
  "key": "public key",
  "product": "auth",
  "apiVersion": "v2", // set this to "v1" if using the legacy Plaid API
  "env": "sandbox",
  "clientName": "Test App",
  "selectAccount": "true",
};

class PlaidWorkPls extends StatefulWidget {
  @override
  _PlaidWorkPlsState createState() => _PlaidWorkPlsState();
}

class _PlaidWorkPlsState extends State<PlaidWorkPls> {
  final flutterWebViewPlugin = FlutterWebviewPlugin();
  Uri uri = Uri.https(authority, unencodedPath, queryParameters);
  StreamSubscription<String> _onUrlChanged;
  GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
  StreamSubscription<WebViewStateChanged> _onStateChanged;

  @override
  void initState() {
    super.initState();
    flutterWebViewPlugin.close();
    _onUrlChanged = flutterWebViewPlugin.onUrlChanged.listen((String url) {
      if (mounted) {
        print("Current URL: $url");
      }
    });

    _onStateChanged = flutterWebViewPlugin.onStateChanged
        .listen((WebViewStateChanged state) async {
      if (mounted) {
        print("current state");
        print(state.url);
      }
    });
  }

  @override
  void dispose() {
    flutterWebViewPlugin.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return WebviewScaffold(
      key: scaffoldKey,
      url: uri.toString(),
    );
  }
}

В настоящее время я использую эмулятор Android для проверки этого процесса. Я не знаю, почему я не могу получить новый URL после ввода учетных данных в песочнице. Я могу дать любую другую информацию, если это необходимо.

...