当我尝试使用调用中的 API 时,代码 截断 api Json 以及我用于启用和禁用小部件视图的条件的 json 正文部分不存在。我尝试检查 API,但它返回了所有 json 数据,我尝试制作一个示例页面,这次 API 是完整的,并且文本中没有被截断。我如何在我的代码中解决这个问题?
问题不在于API,而在于代码,不知何故节省了一半的API,而我无法使用我需要的API部分
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/pages/widgetssss/a_u_t_hwidgets/cieid/cieid_widget.dart';
import '/pages/widgetssss/a_u_t_hwidgets/cns/cns_widget.dart';
import '/pages/widgetssss/a_u_t_hwidgets/credenziali/credenziali_widget.dart';
import '/pages/widgetssss/a_u_t_hwidgets/spid/spid_widget.dart';
import 'landing_page_model.dart';
class LandingPageWidget extends StatefulWidget {
const LandingPageWidget({Key? key}) : super(key: key);
@override
State<LandingPageWidget> createState() => _LandingPageWidgetState();
}
class _LandingPageWidgetState extends State<LandingPageWidget> {
late LandingPageModel _model;
final scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
_model = createModel(context, () => LandingPageModel());
WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {}));
}
@override
void dispose() {
_model.dispose();
super.dispose();
}
// Fetch data da API
Future<Map<String, dynamic>> fetchData() async {
final response = await http.get(Uri.parse('https://gateway.simeal-dev.maggioli.cloud/api/utilizzo-istanze/property-portale/dev'));
if (response.statusCode == 200) {
return json.decode(response.body) as Map<String, dynamic>;
} else {
throw Exception('Errore durante la chiamata API');
}
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () => _model.unfocusNode.canRequestFocus
? FocusScope.of(context).requestFocus(_model.unfocusNode)
: FocusScope.of(context).unfocus(),
child: Scaffold(
key: scaffoldKey,
backgroundColor: FlutterFlowTheme.of(context).secondaryBackground,
body: Row(
mainAxisSize: MainAxisSize.max,
children: [
Expanded(
flex: 6,
child: Container(
width: 100.0,
height: double.infinity,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [
FlutterFlowTheme.of(context).primary,
Colors.white,
],
stops: const [0.0, 1.0],
begin: const AlignmentDirectional(0.87, -1.0),
end: const AlignmentDirectional(-0.87, 1.0),
),
),
alignment: const AlignmentDirectional(0.0, -1.0),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0,
70.0,
0.0,
32.0,
),
child: Container(
width: 200.0,
height: 70.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.0),
),
alignment: const AlignmentDirectional(0.0, 0.0),
child: Text(
'SiMeal',
style: FlutterFlowTheme.of(context)
.displaySmall
.override(
fontFamily: 'Titillium Web',
color: Colors.white,
letterSpacing: 0.0,
),
),
),
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
width: double.infinity,
constraints: const BoxConstraints(
maxWidth: 570.0,
),
decoration: BoxDecoration(
color: FlutterFlowTheme.of(context).primaryBackground,
boxShadow: const [
BoxShadow(
blurRadius: 4.0,
color: Color(0x33000000),
offset: Offset(
0.0,
2.0,
),
),
],
borderRadius: BorderRadius.circular(12.0),
),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Align(
alignment: const AlignmentDirectional(0.0, 0.0),
child: Padding(
padding: const EdgeInsets.all(32.0),
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Inizia',
textAlign: TextAlign.center,
style: FlutterFlowTheme.of(context)
.displaySmall
.override(
fontFamily: 'Titillium Web',
letterSpacing: 0.0,
),
),
Padding(
padding: const EdgeInsetsDirectional.fromSTEB(
0.0,
12.0,
0.0,
24.0,
),
child: Text(
'Per accedere seleziona il comune di appartenenza',
textAlign: TextAlign.center,
style: FlutterFlowTheme.of(context)
.labelLarge
.override(
fontFamily: 'Readex Pro',
letterSpacing: 0.0,
),
),
),
FutureBuilder<Map<String, dynamic>>(
future: fetchData(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else if (snapshot.hasError) {
return Center(
child: Text('Error: ${snapshot.error}'),
);
} else if (!snapshot.hasData) {
return const Center(
child: Text('No data available'),
);
} else {
final jsonData = snapshot.data!;
final bool abilitaSPID =
jsonData['abilitaSPID'] == 'SI';
final bool abilitaCIEID =
jsonData['abilitaCIEID'] == 'SI';
final bool abilitaCNS =
jsonData['abilitaCNS'] == 'SI';
return Column(
mainAxisSize: MainAxisSize.max,
children: [
if (abilitaSPID)
wrapWithModel(
model: _model.spidModel,
updateCallback: () => setState(() {}),
child: const SpidWidget(),
),
if (abilitaCIEID)
wrapWithModel(
model: _model.cieidModel,
updateCallback: () => setState(() {}),
child: const CieidWidget(),
),
if (abilitaCNS)
wrapWithModel(
model: _model.cnsModel,
updateCallback: () => setState(() {}),
child: const CnsWidget(),
),
wrapWithModel(
model: _model.credenzialiModel,
updateCallback: () => setState(() {}),
child: const CredenzialiWidget(),
),
].divide(const SizedBox(height: 20.0)),
);
}
},
),
],
),
),
),
],
),
),
),
],
),
),
),
),
],
),
),
);
}
}
您的响应有内部映射,尝试使用此方法访问键值:
{
"10f6593b-20ac-4feb-85b3-4359084cb69f" : {
"b996eedc-fcf8-4002-8b86-33a4be8b258b" : {
...
}
}
}
更新代码
//Existing code
final bool abilitaSPID = jsonData['abilitaSPID'] == 'SI';
final bool abilitaCIEID = jsonData['abilitaCIEID'] == 'SI';
final bool abilitaCNS = jsonData['abilitaCNS'] == 'SI';
//Update with this code
final bool abilitaSPID = jsonData["10f6593b-20ac-4feb-85b3-4359084cb69f"]
["b996eedc-fcf8-4002-8b86-33a4be8b258b"]
["abilitaSPID"] == 'SI';
final bool abilitaCIEID = jsonData["10f6593b-20ac-4feb-85b3-4359084cb69f"]
["b996eedc-fcf8-4002-8b86-33a4be8b258b"]
["abilitaCIEID"] == 'SI';
final bool abilitaCNS = jsonData["10f6593b-20ac-4feb-85b3-4359084cb69f"]
["b996eedc-fcf8-4002-8b86-33a4be8b258b"]
["abilitaCNS"] == 'SI';
在 Dart 中不可能在不知道键的情况下直接从映射中读取特定值。映射旨在将特定键与其相应的值相关联。