简体   繁体   English

dio http 获取错误 ArgumentError(无效参数(输入):不得为空)flutter

[英]dio http get error ArgumentError (Invalid argument(s) (input): Must not be null) flutter

I am getting an error here, what could be the issue?我在这里遇到错误,可能是什么问题?

if (input == null) throw new ArgumentError.notNull('input'); if (input == null) throw new ArgumentError.notNull('input'); ArgumentError (Invalid argument(s) (input): Must not be null) ArgumentError(无效参数(输入):不能为空)

can anyone help me here?有人能帮我一下吗?

trying to use DIO flutter package and facing an issue with the get call, i am missing somewhere, not sure what is the issue.尝试使用 DIO flutter package 并面临 get 调用问题,我在某处丢失,不确定是什么问题。

state management is flutter riverpord. state 管理是 flutter riverpord。

Service File:服务档案:

Future<List<DefaultModel>> getDefaults() async {
try {
  final response =
      await _dio.get("https://5f279ddaf5d27e001612e29b.mockapi.io/Default");
  print(response);
  if (response.statusCode == 200) {
    final results = List<Map<String, dynamic>>.from(response.data);
    List<DefaultModel> defaults = results
        .map((defaulteData) => DefaultModel.fromMap(defaulteData))
        .toList(growable: false);

    return defaults;
  } else {
    return null;
  }
} on DioError catch (e) {
  throw GeneralException.fromDioError(e);
}
}

Adding Model File:添加 Model 文件:

import 'dart:convert';

class DefaultModel {
  String id;
  DateTime createdAt;
  String description;
  String memberId;
  String departmentId;
  String reason;
  String taskPriority;
  String impactToMission;
  String stepsToAvoid;
  DateTime defaultDate;
  DateTime updatedDate;
  String hodPrayschit;
  String hodComments;
  DateTime hodDefaultDeadline;
  DateTime sevakAcknowledgeDate;
  String hodId;
  String hrdComments;
  String maulikjiComments;
  String cardType;
  DateTime startDate;
  DateTime endDate;

  DefaultModel(
      {this.id,
      this.createdAt,
      this.description,
      this.memberId,
      this.departmentId,
      this.reason,
      this.taskPriority,
      this.impactToMission,
      this.stepsToAvoid,
      this.defaultDate,
      this.updatedDate,
      this.hodPrayschit,
      this.hodComments,
      this.hodDefaultDeadline,
      this.sevakAcknowledgeDate,
      this.hodId,
      this.hrdComments,
      this.maulikjiComments,
      this.cardType,
      this.startDate,
      this.endDate});

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'createdAt': createdAt.toString(),
      'description': description,
      'memberId': memberId,
      'departmentId': departmentId,
      'reason': reason,
      'taskPriority': taskPriority,
      'impactToMission': impactToMission,
      'stepsToAvoid': stepsToAvoid,
      'defaultDate': defaultDate.toString(),
      'updatedDate': updatedDate.toString(),
      'hodPrayschit': hodPrayschit,
      'hodComments': hodComments,
      'hodDefaultDeadline': hodDefaultDeadline.toString(),
      'sevakAcknowledgeDate': sevakAcknowledgeDate.toString(),
      'hodId': hodId,
      'hrdComments': hrdComments,
      'maulikjiComments': maulikjiComments,
      'cardType': cardType,
      'startDate': startDate.toString(),
      'endDate': endDate.toString(),
    };
  }

  factory DefaultModel.fromMap(Map<String, dynamic> map) {
    if (map == null) return null;

    return DefaultModel(
      id: map['id'],
      createdAt: DateTime.parse(map['created']),
      description: map['description'],
      memberId: map['memberId'],
      departmentId: map['departmentId'],
      reason: map['reason'],
      taskPriority: map['taskPriority'],
      impactToMission: map['impactToMission'],
      stepsToAvoid: map['stepsToAvoid'],
      defaultDate: DateTime.parse(map['defaultDate']),
      updatedDate: DateTime.parse(map['updatedDate']),
      hodPrayschit: map['hodPrayschit'],
      hodComments: map['hodComments'],
      hodDefaultDeadline: DateTime.parse(map['hodDefaultDeadline']),
      sevakAcknowledgeDate: DateTime.parse(map['sevakAcknowledgeDate']),
      hodId: map['hodId'],
      hrdComments: map['hrdComments'],
      maulikjiComments: map['maulikjiComments'],
      cardType: map['cardType'],
      startDate: DateTime.parse(map['startDate']),
      endDate: DateTime.parse(map['endDate']),
    );
  }

  String toJson() => json.encode(toMap());

  List<DefaultModel> defaultFromJson(String jsonData) {
    final data = json.decode(jsonData);
    return List<DefaultModel>.from(
        data.map((item) => DefaultModel.fromJson(item)));
  }

  factory DefaultModel.fromJson(String source) =>
      DefaultModel.fromMap(json.decode(source));
}

Page.dart第dart页

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/all.dart';
import 'package:srmd_timesheet_flutter_app/models/default_model.dart';
import 'package:srmd_timesheet_flutter_app/utils/exception.dart';
import 'package:srmd_timesheet_flutter_app/widgets/app_bar_widget.dart';
import 'package:srmd_timesheet_flutter_app/widgets/badge_layout_widget.dart';
import 'package:srmd_timesheet_flutter_app/services/default_service.dart';
import 'package:srmd_timesheet_flutter_app/widgets/error_body_widget.dart';

final defaultFutureProvider =
    FutureProvider.autoDispose<List<DefaultModel>>((ref) async {
  ref.maintainState = true;

  final defaultService = ref.watch(defaultServiceProvider);
  final prayschits = await defaultService.getDefaults();
  return prayschits;
});

class AllDefaultPage extends ConsumerWidget {
  final String yellowCard = "yellow-card@3x.png";
  final String redCard = "red-card@3x.png";

  @override
  Widget build(BuildContext context, ScopedReader watch) {
    return Scaffold(
      appBar: MyAppBar(
        context,
        titleText: "PAST DEFAULTS",
        isChipLayout: false,
      ),
      body: watch(defaultFutureProvider).when(
        error: (e, s) {
          if (e is GeneralException) {
            return ErrorBody(message: e.message);
          }
          return ErrorBody(message: "Oops, something unexpected happened");
        },
        loading: () => Center(
          child: CircularProgressIndicator(),
        ),
        data: (prayschits) {
          return RefreshIndicator(
            onRefresh: () {
              return context.refresh(defaultFutureProvider);
            },
            child: SingleChildScrollView(
              child: Padding(
                padding: const EdgeInsets.all(22.0),
                child: Container(
                  child: Column(
                    children: prayschits
                        .map((prayschit) => BadgeLayout(cardImage: redCard))
                        .toList(),
                  ),
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

// SizedBox(height: 18.0),

ArgumentError is a runtime error because one of the class properties is not the same as the one from Json. I prefer to use Serializing JSON using code generation libraries. ArgumentError 是一个运行时错误,因为class 属性之一与 Json 中的属性不同。我更喜欢使用代码生成库序列化 JSON。

https://flutter.dev/docs/development/data-and-backend/json#serializing-json-using-code-generation-libraries https://flutter.dev/docs/development/data-and-backend/json#serializing-json-using-code-generation-libraries

Solution : use as operator to know which value type was causing the error.解决方案:使用as运算符来了解导致错误的值类型。

finally, make all properties optional by using Null checking最后,通过使用Null 检查使所有属性可选

class Data {
final String name;

Data(this.name);

 factory Data.fromJson(Map<String, dynamic> json) {
    return Data(
    id: json['name'] == null ? null : json['name'] as String,
     );} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 可迭代 toList() 抛出 - ArgumentError(无效参数(输入):不能为空) - Iterable toList() throws - ArgumentError (Invalid argument(s) (input): Must not be null) 无效参数(输入):不得为 null - Flutter - Invalid argument(s) (input): Must not be null - Flutter 无效参数(输入):不得为 null - Invalid argument(s) (input): Must not be null ArgumentError(无效参数(onError):Future.catchError 的错误处理程序必须返回未来类型的值) - ArgumentError (Invalid argument(s) (onError): The error handler of Future.catchError must return a value of the future's type) Flutter 未处理的异常:无效参数(值):不得为 null - Flutter Unhandled Exception: Invalid argument(s) (value): Must not be null 运行时出现Flutter项目,显示错误无效参数:源不得为null - Flutter project when run showing Error Invalid argument(s): The source must not be null Flutter Web:文件选择器抛出“无效参数(路径):不能为空”错误 - Flutter Web: File Picker throws 'Invalid argument(s) (path): Must not be null' error 未处理的异常:无效参数(值):不得为 null Flutter 2 - Unhandled Exception: Invalid argument(s) (value): Must not be null Flutter 2 Flutter来自ADB的意外故障:无效参数:源不得为空在设备上启动应用程序时出错 - Flutter Unexpected failure from adb: Invalid argument(s): The source must not be null Error launching application on device Json 可序列化 - 无效参数(输入):不得为 null - Json Serializable - Invalid argument(s) (input): Must not be null
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM