【发布时间】:2022-01-04 04:47:50
【问题描述】:
假设有 3 个整数值(红、绿、蓝)和字符串中的结果,执行该值后的预测。我认为问题在于 api 无法读取我在颤振中声明的字符串。由于控制器无法读取整数,因此我很难识别和更改颤振中的数据类型。
main.dart
import 'package:flutter/material.dart';
import 'package:flutter_http_post/rgbModel.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
RgbModel? _rgbcolor;
final TextEditingController rController = TextEditingController();
final TextEditingController gController = TextEditingController();
final TextEditingController bController = TextEditingController();
Future<RgbModel> createRGB(String red, String green, String blue) async {
final response = await http.post(Uri.parse('http://10.0.2.2:8000/predict/'),
body: {"red": red, "green": green, "blue": blue});
if (response.statusCode == 200 || response.statusCode == 422) {
final String responseBody = response.body;
return rgbModelJson(responseBody);
} else {
throw Exception("Failed");
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Container(
padding: EdgeInsets.all(10),
child: Column(
children: [
TextField(
controller: rController,
decoration: InputDecoration(hintText: 'Enter Value R'),
),
TextField(
controller: gController,
decoration: InputDecoration(hintText: 'Enter Value G'),
),
TextField(
controller: bController,
decoration: InputDecoration(hintText: 'Enter Value G'),
),
SizedBox(
height: 10,
),
_rgbcolor == null
? Container()
: Text('The prediction ${_rgbcolor?.color}'),
ElevatedButton(
onPressed: () async {
var rd = rController.text;
var grn = gController.text;
var bl = bController.text;
final RgbModel? usercolor = await createRGB(rd, grn, bl);
setState(() {
_rgbcolor = usercolor;
});
},
child: Text('Post'))
],
),
),
),
);
}
}
rgbModel.dart
import 'dart:convert';
RgbModel rgbModelJson(String str) => RgbModel.fromJson(json.decode(str));
String userModelToJson(RgbModel data) => json.encode(data.toJson());
class RgbModel {
String? color;
String? red;
String? green;
String? blue;
RgbModel({
this.color,
this.red,
this.green,
this.blue,
});
factory RgbModel.fromJson(Map<String, dynamic> json) => RgbModel(
color: json["color"],
red: json["red"].toString(),
green: json["green"].toString(),
blue: json["blue"].toString(),
);
Map<String, dynamic> toJson() => {
"color": color,
"red": red,
"green": green,
"blue": blue,
};
}
在调试控制台 vscode 中不要给出我的代码的错误结论。
不幸的是,颤振返回null
我使用 FastAPI,这是在执行红色、绿色、蓝色值后给出我想要的值的 API 响应。返回的是 rgb 值(“黑色”)
【问题讨论】:
-
问题是你的回复只有
prediction' key, but when convert it torgbModel`模型,你尝试得到color,red,green和blue键。永远是null -
你能解释更多吗,我不明白?
标签: android json flutter api fastapi