現在在顫振專案上作業了一段時間,完全沒有注意到它。
我正在從 API 獲取事件作為物件,事件具有的變數之一是 URL,由于某種原因,它是唯一作為“Null”獲取的變數,而不是真正的變數值(郵遞員中的 api 回應和等都很好,并且有真實的網址)。
api_calls.dart:請注意,我故意洗掉了 API url 和令牌
class GetCandEventsByEntityId {
static Future<ApiCallResponse> call({
int? entityId,
String? rakazCode,
String? search,
}) {
final body = '''
{
"token": "",
"entityId": ${entityId},
"rakazCode": ${rakazCode},
"pageNumber": 1,
"rowsPerPage": 300,
"search": "${search}",
}''';
return ApiManager.instance.makeApiCall(
callName: 'GetCandEventsByEntityId',
apiUrl:
'',
callType: ApiCallType.POST,
headers: {},
params: {
'entityId': entityId,
'rakazCode': rakazCode,
'search': search,
},
body: body,
bodyType: BodyType.JSON,
returnBody: true,
);
}
static dynamic rakazUrl(dynamic response) => getJsonField(response,
r'''$..url''',);
static dynamic descEvent(dynamic response) => getJsonField(
response,
r'''$..eventDescription''',
);
static dynamic statusEvent(dynamic response) => getJsonField(
response,
r'''$..status_event''',
);
static dynamic dateEvent(dynamic response) => getJsonField(
response,
r'''$..date_event''',
);
static dynamic resultEvent(dynamic response) => getJsonField(
response,
r'''$..event_result_code''',
);
static dynamic rakazPhone(dynamic response) => getJsonField(response,
r'''$..rakazPhone''',);
static dynamic rakazName(dynamic response) => getJsonField(response,
r'''$..rakazName''',);
static dynamic eventRemark(dynamic response) => getJsonField(response, r'''$..eventRemark''',);
static dynamic eventNum(dynamic response) => getJsonField(response, r'''$..eventno''',);
}
worker_activity_widget.dart:隱藏大部分不相關的行,以關注“可能導致問題”行
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:.../index.dart';
import 'package:loading_animation_widget/loading_animation_widget.dart';
import '../backend/api_requests/api_calls.dart';
import '../components/worker_container_widget.dart';
import '../constants.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../skeleton.dart';
class WorkerActivityWidget extends StatefulWidget {
const WorkerActivityWidget({
Key? key,
this.firstName,
this.lastName,
this.phoneNumber,
this.myUrl,
this.search,
this.entityId,
}) : super(key: key);
final String? firstName;
final String? lastName;
final String? phoneNumber;
final String? myUrl;
final int? entityId;
final String? search;
@override
_WorkerActivityWidgetState createState() => _WorkerActivityWidgetState();
}
class eventModel {
final String dateEvent;
final String statusEvent;
final String descEvent;
final String rakazUrl;
final String rakazPhone;
final String rakazName;
const eventModel({
required this.dateEvent,
required this.statusEvent,
required this.descEvent,
required this.rakazName,
required this.rakazUrl,
required this.rakazPhone,
});
static eventModel fromJson(Map<String, dynamic> json) {
return eventModel(
dateEvent: json['date_event'],
statusEvent: json['status_event'],
descEvent: json['eventDescription'],
rakazName: json['rakazName'].toString(),
rakazUrl: json['url'].toString(),
rakazPhone: json['rakazPhone'].toString(),
);
}
}
class _WorkerActivityWidgetState extends State<WorkerActivityWidget> {
final scaffoldKey = GlobalKey<ScaffoldState>();
List<bool> isSelected = [true, false];
List<eventModel> filteredEvents = [];
bool start = true;
DateTime now = new DateTime.now();
@override
Widget build(BuildContext context) {
var temprakaz = 0;
return FutureBuilder<ApiCallResponse>(
future: GetCandEventsByEntityId.call(
entityId: widget.entityId,
rakazCode: temprakaz.toString(),
search: widget.search,
),
builder: (context, snapshot) { ... }
final listViewGetCandEventsByEntityIdResponse = snapshot.data!;
final data = listViewGetCandEventsByEntityIdResponse
.jsonBody['eventList'] as List;
List<eventModel> events =
data.map((e) => eventModel.fromJson(e)).toList();
沒有 toString() 回傳 eventModel(rakazUrl: json['url'],); 這將是結果:
相關的導致錯誤的小部件是:FutureBuilder FutureBuilder: /lib/worker_pages/worker_activity_widget.dart:88:12
return FutureBuilder<ApiCallResponse>(
future: GetCandEventsByEntityId.call(
entityId: widget.entityId,
rakazCode: temprakaz.toString(),
search: widget.search,
),
拋出例外時,這是堆疊:#0 eventModel.fromJson (worker_pages/worker_activity_widget.dart:60:21)
rakazUrl: json['url'],
#1 _WorkerActivityWidgetState.build..(包:/worker_pages/worker_activity_widget.dart:184:42)
final listViewGetCandEventsByEntityIdResponse = snapshot.data!;
final data = listViewGetCandEventsByEntityIdResponse
.jsonBody['eventList'] as List;
List<eventModel> events =
data.map((e) => eventModel.fromJson(e)).toList();
uj5u.com熱心網友回復:
首先,代碼非常混亂,因此將每個類分隔到不同的頁面 - 使其更易于理解和清晰似乎存在問題圍繞搜索字串。它的值使用不同的語言(在郵遞員中測驗 API 呼叫時這很好),但由于某種原因,顫振中的某些東西使 URL 被獲取為 null。
決定洗掉搜索字串,并在已獲取所有物件時過濾掉物件串列。并且只向用戶顯示過濾后的物件。不是一個理想的解決方案,但總比沒有好
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523726.html
標籤:扑api网址拿来
