草庐IT

dart - Flutter http 错误类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型 'Map<String, String>' 的子类型

coder 2023-07-23 原文

我使用 flutter http 包创建了简单的发布请求。但是我在发送请求时遇到了以下错误。

E/flutter ( 9479): [ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled exception:
E/flutter ( 9479): type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, String>'
E/flutter ( 9479): #0      ApiRequester.sendLoginRequest (package:fitness_lanka/api_requester.dart:56:16)
E/flutter ( 9479): <asynchronous suspension>
E/flutter ( 9479): #1      LoginWidgets.buildLoginButton.<anonymous closure> (package:fitness_lanka/widgets/login_widgets.dart:82:62)
E/flutter ( 9479): #2      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter ( 9479): #3      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter ( 9479): #4      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 9479): #5      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter ( 9479): #6      TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
E/flutter ( 9479): #7      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)
E/flutter ( 9479): #8      PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
E/flutter ( 9479): #9      PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
E/flutter ( 9479): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:143:19)
E/flutter ( 9479): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
E/flutter ( 9479): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 9479): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
E/flutter ( 9479): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)
E/flutter ( 9479): #15     _invoke1 (dart:ui/hooks.dart:153:13)
E/flutter ( 9479): #16     _dispatchPointerDataPacket (dart:ui/hooks.dart:107:5)

下面是我用来发送post请求的函数。

static Future<LoginData> sendLoginRequest(
      String email, String password) async {
    var headers = {'Accept': 'application/json'};
    var body = {
      'email': email,
      'password': password,
    };
    http.Response response = await http.post(
      "https://fitness-lanka-laravel.herokuapp.com/api/user/login",
      headers: headers,
      body: body,
    );
    return LoginData.fromResponse(response);
  }

我将 flutter 从 v0.8.2 升级到了 v0.9.4。在将 flutter 升级到最新版本之前,它运行良好。

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, v0.9.4, on Microsoft Windows [Version 10.0.17134.345], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK 28.0.2)
[√] Android Studio (version 3.2)
[√] IntelliJ IDEA Community Edition (version 2018.2)
[√] VS Code (version 1.28.1)
[√] Connected devices (1 available)

• No issues found!

-----更新-----

我将 flutter 降级到 v0.8.2。现在我遇到了不同的错误。

E/flutter (24516): [ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled exception:
E/flutter (24516): NoSuchMethodError: The getter 'length' was called on null.
E/flutter (24516): Receiver: null
E/flutter (24516): Tried calling: length
E/flutter (24516): #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:48:5)
E/flutter (24516): #1      _Uri._uriEncode (dart:core/runtime/liburi_patch.dart:44:23)
E/flutter (24516): #2      Uri.encodeQueryComponent (dart:core/uri.dart:1092:17)
E/flutter (24516): #3      mapToQuery.<anonymous closure> (package:http/src/utils.dart:19:22)
E/flutter (24516): #4      CastMap.forEach.<anonymous closure> (dart:_internal/cast.dart:286:8)
E/flutter (24516): #5      __InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin.forEach (dart:collection/runtime/libcompact_hash.dart:365:8)
E/flutter (24516): #6      CastMap.forEach (dart:_internal/cast.dart:285:13)
E/flutter (24516): #7      mapToQuery (package:http/src/utils.dart:17:7)
E/flutter (24516): #8      Request.bodyFields= (package:http/src/request.dart:128:17)
E/flutter (24516): #9      BaseClient._sendUnstreamed (package:http/src/base_client.dart:165:17)
E/flutter (24516): <asynchronous suspension>
E/flutter (24516): #10     BaseClient.post (package:http/src/base_client.dart:56:5)
E/flutter (24516): #11     post.<anonymous closure> (package:http/http.dart:70:34)
E/flutter (24516): #12     _withClient (package:http/http.dart:167:20)
E/flutter (24516): <asynchronous suspension>
E/flutter (24516): #13     post (package:http/http.dart:70:3)
E/flutter (24516): #14     ApiRequester.sendLoginRequest (package:fitness_lanka/api_requester.dart:55:36)
E/flutter (24516): <asynchronous suspension>
E/flutter (24516): #15     LoginWidgets.buildLoginButton.<anonymous closure> (package:fitness_lanka/widgets/login_widgets.dart:84:62)
E/flutter (24516): #16     _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:503:14)
E/flutter (24516): #17     _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:558:30)
E/flutter (24516): #18     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter (24516): #19     TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter (24516): #20     TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
E/flutter (24516): #21     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)
E/flutter (24516): #22     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
E/flutter (24516): #23     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
E/flutter (24516): #24     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:143:19)
E/flutter (24516): #25     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
E/flutter (24516): #26     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)
E/flutter (24516): #27     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
E/flutter (24516): #28     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)
E/flutter (24516): #29     _invoke1 (dart:ui/hooks.dart:142:13)
E/flutter (24516): #30     _dispatchPointerDataPacket (dart:ui/hooks.dart:99:5)

最佳答案

以下代码对我有用:)

  static Future<LoginData> sendLoginRequest(
      String email, String password) async {
    // Encode the string [uri] using percent-encoding to make it
    // safe for literal use as a full URI.
    String url = Uri.encodeFull('https://fitness-lanka-laravel.herokuapp.com/api/user/login');

    // headers should be a subtype of Map<String, String>
    Map<String, String> headers = {
      "Accept": "application/json",
      "Content-Type": "application/json",
    };

    // convert body to a JSON string
    String body = json.encode(
      {
        'email': email,
        'password': password,
      },
    );

    // now it's safe to send the request
    http.Response response = await http.post(
      url,
      body: body,
      headers: headers,
    );
    return LoginData.fromResponse(response);
  }

如果有人在 json.encode(body) 遇到错误

请添加导入:import 'dart:convert';

关于dart - Flutter http 错误类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型 'Map<String, String>' 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52879304/

有关dart - Flutter http 错误类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型 'Map<String, String>' 的子类型的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  5. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  6. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  9. ruby - 检查方法参数的类型 - 2

    我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)

  10. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

随机推荐