android - 我无法使用解析的整数进行 api 调用
问题描述
所以我正在使用颤振构建一个应用程序,我是颤振新手,需要一些帮助。
因此,对于上下文,我的应用程序连接到一个 REST API,该 API 与一个虚构的电梯公司的 ruby on rails Web 应用程序相关联(用于学习目的),我想要实现的是使用更改电梯的状态我的应用程序中的一个文本字段,我几乎明白了,唯一的事情是每当我像这样进行我的 api 调用时:
class DetailScreen extends StatelessWidget {
// Declare a field that holds the Todo.
final Elevator elevator;
// In the constructor, require a Todo.
DetailScreen({Key key, @required this.elevator}) : super(key: key);
Future _changeStatus(elevator) async {
//Fetch the data from the api
// ignore: non_constant_identifier_names
var id = elevator.id.toString();
var holder = id.toString();
var url = 'https://rocketcrybaby.azurewebsites.net/api/elevators/'+holder;
var response = await http.put(
url, body: {'status': '${_statusController.text}'});
if (_statusController.text != "active"|| _statusController.text != "inactive"){
return "Error not a valid status !";
}
print('Response status: ${response.statusCode}');
print('Response body: ${response.body}');
//print(await http.read('https://example.com/foobar.txt'));
return "sucess";
}
@override
Widget build(BuildContext context) {
// Use the Todo to create the UI.
return Scaffold(
appBar: AppBar(
title: Text("Elevator # " +elevator.id.toString()),
),
body: Center(
child: Center(
child: TextField(
controller: _statusController
),
)
),
floatingActionButton: FloatingActionButton(onPressed: () async => [ await _changeStatus(elevator.id.toString()), print(elevator.status)]),
);
}
它返回给我这个错误:
E/flutter (18441): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: Class 'String' has no instance getter 'id'.
E/flutter (18441): Receiver: "3"
E/flutter (18441): Tried calling: id
我真的不知道该怎么做我尝试了我书中的每一个技巧:/
供参考这里是电梯类
class Elevator {
final String status;
final String model;
final int id;
Elevator({this.status, this.model, this.id}); //Elevator Constructor
factory Elevator.fromJson(Map<String, dynamic> json) { //Parse the infos as Json String
return Elevator(
status: json['status'],
model: json['model'],
id: json['id']
);
}
}
此外,这是我的 api 中电梯的输出
{
"id": 3,
"column_id": 1,
"serial_number": 7204019747089,
"model": "Excelium",
"building_type": "Hybrid",
"status": "Inactive",
"date_service_since": "2018-03-09T00:00:00",
"date_last_inspection": "2019-02-19T00:00:00",
"inspection_certificate": "Yes",
"information": "Dori",
"notes": "Dolores aut et. Ea optio rem. Provident exercitationem ut.",
"created_at": "2020-04-09T20:41:55",
"updated_at": "2020-04-09T20:41:55"
},
解决方案
那是因为您的方法 :Future _changeStatus(elevator) async
实际上需要Elevator elevator
,但您提供elevator.id.toString()
的是字符串。
更改方法参数的类型并在 FAB 的 onPressed 中更改为 await _changeStatus(elevator)
。
推荐阅读
- regex - 在 Python 中查找 http 链接并放在标签之间?
- mysql - 连接超时错误
- node.js - 无法修复 - events.js:183 throw er; // 未处理的“错误”事件
- jquery - 为什么单击子元素时会触发鼠标离开
- c++ - 通过 C++ 模板元编程从数组名推导出数组维数
- android - 在安装下载的 apk 文件时通过 Intent.getData() 错误暴露在应用程序之外
- php - 将 Symfony 项目部署到 App Engine - 错误:文件过多
- java - 使用 Java 在 CSV 中写入非拉丁字符
- angular - 测试覆盖范围不包括任何西装
- c - 无法在 Visual Studio 中打开源文件 err.h?