android - Flutter中如何使用文本字段数据并通过api调用计算?
问题描述
实际上,今天我决定制作一个爱情计算器,为此我学习了颤振中的 http 调用,但现在我被困在一个点上,我不知道如何继续前进。
import 'package:AllInOneCalci/Post.dart';
import 'package:AllInOneCalci/customAppBar.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:async';
class LoveCalUI extends StatelessWidget {
@override
Widget build(BuildContext context) {
var AppBarHeight = MediaQuery.of(context).size.height;
return Scaffold(
appBar: customAppBar(
height: (AppBarHeight / 3) * 0.4,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.only(top: 18.0),
child: Text(
'All In One Cali',
style: TextStyle(
color: Colors.black,
fontSize: 35.0,
fontFamily: 'DancingScript',
fontWeight: FontWeight.bold),
),
),
],
),
),
body: CustomFetchData(),
);
}
}
class CustomFetchData extends StatefulWidget {
@override
_CustomFetchDataState createState() => _CustomFetchDataState();
}
class _CustomFetchDataState extends State<CustomFetchData> {
Future<Post> getData() async {
final response =
await http.get('https://love-calculator.p.rapidapi.com/getPercentage?fname=John&sname=Alice');
if (response.statusCode == 200) {
return Post.fromJson(json.decode(response.body));
} else {
throw Exception('Failed to load api');
}
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
child: FutureBuilder<Post>(
future: getData(),
builder: (BuildContext context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: Text('Please Wait while its loading...'));
} else {
if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else {
return Center(
child: Text('${snapshot.data}'),
);
}
}
})),
],
);
}
@override
// ignore: must_call_super
void initState() {
getData();
}
}
这是一个lovecalculator 类,我在其中编写所有内容。如果有任何 NEWS 网站,数据是从 api 调用中获取的,那么这将非常容易。
但我希望我在文本字段中输入两个名称,并且该过程现在通过 api 计算,即逻辑是在后端编写的,我想将该逻辑提取到我的代码中(),因为我必须输入名称。你能帮我吗。我在这里给出了那个 api 参考。如果有人可以帮助我,那将是非常支持的。
解决方案
我假设您已经可以使用文本字段控制器并提取文本。您需要在请求中包含的内容是包含重要关键信息的标头。
如果你看这里,你可以找到几种语言请求示例的参考(例如我使用 Swift 作为参考)。您可以在下面看到如何在 Flutter 中执行此操作:
在你的pubspec.yaml
http: ^0.12.2
在您的.dart
文件中,您需要导入
import 'dart:convert';
import 'package:http/http.dart' as http;
你还需要选择一个调用函数的地方,在我的例子中,它是默认 Flutter 启动项目中的一个按钮:
Map<String, String> requestHeaders = {
'x-rapidapi-host': 'love-calculator.p.rapidapi.com',
'x-rapidapi-key': 'insert your API key from website',
};
void _getNames({String name1, String name2}) async {
final response = await http.get(
'https://love-calculator.p.rapidapi.com/getPercentage?fname=$name1&sname=$name2',
// Send authorization headers to the backend.
headers: requestHeaders,
);
final responseJson = json.decode(response.body);
print(responseJson);
}
推荐阅读
- .net - .Net 任务调度程序行为
- apache-spark - 如何根据键值对 RDD 中的值(元组)进行过滤
- javascript - 在纯javascript中模拟真正的人类鼠标点击?
- html - WeasyPrint 将 HTML 转换为 PDF 未能生成完美的结果
- react-native - 反应原生 ScrollView onScroll 事件
- qt - VS 2017 错误 C2665 'qHash':30 个重载中没有一个可以转换所有参数类型
- javascript - 获取导入组件的高度
- vega - 分组标记的轴位置不正确
- django - 如何过滤 django 内联形式的查询集?
- android - Dialogflow Api 中的 URL 编码问题