Flask 使用API密钥和Webview颤振发布请求

Flask 使用API密钥和Webview颤振发布请求,flask,flutter,webview,aws-lambda,http-post,Flask,Flutter,Webview,Aws Lambda,Http Post,我有一个flask应用程序,它曾经从我的Flatter应用程序调用过,创建了一些HTML文件并返回文件名的位置。然后,我的颤振应用程序使用“webview_颤振”包查看该文件。这在本地开发服务器上运行得非常好。当我上传到AWS LAMbda时,我用一些API密钥保护了应用程序。因此,我的问题是,现在如何使用http.post使用此键调用此API,然后使用“webview\u flatter package”和该API\u键查看创建的HTML文件。请帮我解决这个问题。AWS LAMbda的第一部分

我有一个flask应用程序,它曾经从我的Flatter应用程序调用过,创建了一些HTML文件并返回文件名的位置。然后,我的颤振应用程序使用“webview_颤振”包查看该文件。这在本地开发服务器上运行得非常好。当我上传到AWS LAMbda时,我用一些API密钥保护了应用程序。因此,我的问题是,现在如何使用http.post使用此键调用此API,然后使用“webview\u flatter package”和该API\u键查看创建的HTML文件。请帮我解决这个问题。

AWS LAMbda的第一部分

您可以使用软件包
API网关+Lambda的身份验证访问请参阅

代码片段

import 'package:http/http.dart' as http;
import 'package:amazon_cognito_identity_dart/cognito.dart';
import 'package:amazon_cognito_identity_dart/sig_v4.dart';

void main() async {
  final credentials = new CognitoCredentials(
      'ap-southeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', userPool);
  await credentials.getAwsCredentials(session.getIdToken().getJwtToken());

  const endpoint =
      'https://xxxx.execute-api.ap-southeast-1.amazonaws.com/dev';
  final awsSigV4Client = new AwsSigV4Client(
      credentials.accessKeyId, credentials.secretAccessKey, endpoint,
      sessionToken: credentials.sessionToken,
      region: 'ap-southeast-1');

  final signedRequest = new SigV4Request(awsSigV4Client,
      method: 'POST',
      path: '/projects',
      headers: new Map<String, String>.from(
          {'header-1': 'one', 'header-2': 'two'}),
      queryParams: new Map<String, String>.from({'tracking': 'x123'}),
      body: new Map<String, dynamic>.from({'color': 'blue'}));

  http.Response response;
  try {
    response = await http.post(
        signedRequest.url,
        headers: signedRequest.headers, body: signedRequest.body);
  } catch (e) {
    print(e);
  }
  print(response.body);
}
工作演示

完整代码

import 'package:flutter/material.dart';
import 'dart:convert';

import 'package:flutter/services.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:http/http.dart';

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(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      home: HelpScreen(),
    );
  }
}

class HelpScreen extends StatefulWidget {
  @override
  HelpScreenState createState() {
    return HelpScreenState();
  }
}

class HelpScreenState extends State<HelpScreen> {
  WebViewController _controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Help')),
      body: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            Container(
              height: 300,
              child: WebView(
                initialUrl: 'abc',
                javascriptMode: JavascriptMode.unrestricted,
                onWebViewCreated: (WebViewController webViewController) {
                  _controller = webViewController;
                  _loadHtmlFromString();
                },
              ),
            ),
            IconButton(
              icon: const Icon(
                Icons.thumb_up,
                semanticLabel: 'Thumbs up',
              ),
              onPressed: () {
                _loadHtmlFromString();
              },
            ),
          ],
        ),
      ),
    );
  }

  _loadHtmlFromString() async {
    String fileText = '''
    <!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>
<p>My first paragraph.</p>

</body>
</html>
    ''';

    _controller.loadUrl( Uri.dataFromString(
        fileText,
        mimeType: 'text/html',
        encoding: Encoding.getByName('utf-8')
    ).toString());
  }
}
导入“包装:颤振/材料.省道”;
导入“dart:convert”;
导入“包:flifter/services.dart”;
导入“package:webview_flatter/webview_flatter.dart”;
导入“包:http/http.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
//这是应用程序的主题。
//
//尝试使用“flutter run”运行应用程序。您将看到
//应用程序有一个蓝色工具栏。然后,在不退出应用程序的情况下,重试
//将下面的primarySwatch更改为Colors.green,然后调用
//“热重新加载”(在运行“颤振运行”的控制台中按“r”,
//或者只需将更改保存到颤振IDE中的“热重新加载”。
//请注意,计数器没有重置回零;应用程序
//未重新启动。
主样本:颜色。蓝色,
),
主页:帮助屏幕(),
);
}
}
类帮助屏幕扩展StatefulWidget{
@凌驾
HelpScreenState createState(){
返回HelpScreenState();
}
}
类HelpScreenState扩展了状态{
WebViewController\u控制器;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:Text('Help')),
正文:SingleChildScrollView(
子:列(
儿童:[
容器(
身高:300,
孩子:网络视图(
初始URL:'abc',
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:(WebViewController WebViewController){
_控制器=webViewController;
_loadHtmlFromString();
},
),
),
图标按钮(
图标:常量图标(
图标。竖起大拇指,
语义标签:“竖起大拇指”,
),
已按下:(){
_loadHtmlFromString();
},
),
],
),
),
);
}
_loadHtmlFromString()异步{
字符串fileText=“”
我的第一个标题
我的第一段

'''; _controller.loadUrl(Uri.dataFromString( 文件文本, mimeType:'text/html', 编码:encoding.getByName('utf-8') ).toString()); } }
import 'package:flutter/material.dart';
import 'dart:convert';

import 'package:flutter/services.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:http/http.dart';

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(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      home: HelpScreen(),
    );
  }
}

class HelpScreen extends StatefulWidget {
  @override
  HelpScreenState createState() {
    return HelpScreenState();
  }
}

class HelpScreenState extends State<HelpScreen> {
  WebViewController _controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Help')),
      body: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            Container(
              height: 300,
              child: WebView(
                initialUrl: 'abc',
                javascriptMode: JavascriptMode.unrestricted,
                onWebViewCreated: (WebViewController webViewController) {
                  _controller = webViewController;
                  _loadHtmlFromString();
                },
              ),
            ),
            IconButton(
              icon: const Icon(
                Icons.thumb_up,
                semanticLabel: 'Thumbs up',
              ),
              onPressed: () {
                _loadHtmlFromString();
              },
            ),
          ],
        ),
      ),
    );
  }

  _loadHtmlFromString() async {
    String fileText = '''
    <!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>
<p>My first paragraph.</p>

</body>
</html>
    ''';

    _controller.loadUrl( Uri.dataFromString(
        fileText,
        mimeType: 'text/html',
        encoding: Encoding.getByName('utf-8')
    ).toString());
  }
}