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