Flutter 代码,截断 API 并且无法获取完整的 json 数据

问题描述 投票:0回答:1

描述

当我尝试使用调用中的 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)),
                                            );
                                          }
                                        },
                                      ),
                                    ],
                                  ),
                                ),
                              ),
                            ],
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
flutter dart
1个回答
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 中不可能在不知道键的情况下直接从映射中读取特定值。映射旨在将特定键与其相应的值相关联。

© www.soinside.com 2019 - 2024. All rights reserved.