天道酬勤,学无止境

The argument type 'Object' can't be assigned to the parameter type 'ImageProvider<Object>'

I just updated to Dart2 and Flutter sdk: '>=2.12.0 <3.0.0' and now this if statement breaks:

 decoration: new BoxDecoration(
              shape: BoxShape.circle,
              color: Colors.blueAccent,
              border: Border.all(
                  color: Colors.blueAccent,
                  width: 20.0,
                  style: BorderStyle.solid),
              image: new DecorationImage(
                fit: BoxFit.cover,
                image: myMarkerThumb != 'noImage'
                    ? NetworkImage(myMarkerThumb)
                    : AssetImage('assets/images/noImageAvailable.png'),
              ),
            ),

The argument type 'Object' can't be assigned to the parameter type 'ImageProvider'. ),

I'm just starting with flutter and have no idea where to look else.

评论

Hey this is currently an issue I opened in the flutter repo with dart 2.12.

A simple workaround you could make in the meantime is just to cast the object.


 decoration:  BoxDecoration(
              shape: BoxShape.circle,
              color: Colors.blueAccent,
              border: Border.all(
                  color: Colors.blueAccent,
                  width: 20.0,
                  style: BorderStyle.solid),
              image:  DecorationImage(
                fit: BoxFit.cover,
                image: myMarkerThumb != 'noImage'
                    ? NetworkImage(myMarkerThumb)
                    : AssetImage('assets/images/noImageAvailable.png') as ImageProvider,
              ),
            ),

some one in opened issue solve the problem with casting to image provider

@AbdurrahmanElrayes

and this solution also work for me

image: DecorationImage( 
   image: true ? NetworkImage('someNetWorkLocation.com') : AssetImage('assets/images/noImageAvailable.png') as ImageProvider 
),

For those who used Image.file instead of NetworkImage, the solution should be like below

image: (imageFile != null) ? FileImage(imageFile!) as ImageProvider : AssetImage("assets/xxx.png")

In Dart dynamic was both a top type (supertype of all types) and a bottom type (subtype of all types) depending on the context. This meant it was valid to assign, for example, a function with a parameter of type String to a place that expected a function type with a parameter of dynamic.

However, in Dart 2 using a parameter type other than dynamic (or another top type, such as Object?) results in a compile-time error.

To solve this type error try cast by type parameters

image: DecorationImage( image: true ? NetworkImage('someNetWorkLocation.com') : AssetImage('assets/images/noImageAvailable.png') as ImageProvider ),

make sure that you do like this in the pubspec.yaml file

uses-material-design: true

assets: - assets/images/

because in the default settings the above code will be commented and it will add an extra path for specific images but the above given code will load all images in the assets/images/ folder

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 打字稿错误:“对象”类型的参数不可分配给“{}[]”类型的参数(Typescript error: Argument of type 'Object' is not assignable to parameter of type '{}[]')
    问题 我正在使用 Angular Material 表组件,如下所示: this.userService.getUsers().subscribe((response) => { this.users = new MatTableDataSource(response); }); 它可以工作,但在编译时会引发以下打字稿错误: “Object”类型的参数不可分配给“{}[]”类型的参数。 “对象”类型可分配给很少的其他类型。 您的意思是改用“任何”类型吗? “对象”类型中缺少属性“包含”。 所以我尝试将其更改为: this.users = new MatTableDataSource<any>(response); 但还是同样的错误。 response如下所示: [{ userId: 123, username: 'Tom' }, { userId: 456, username: 'Joe' }] 知道如何摆脱错误吗? 编辑 应该提到如果我这样做: this.users = new MatTableDataSource([response]); 错误消失了,但是表格不起作用,因为格式不是表格所期望的正确格式。 只是注意到这一点,以防万一它揭示了可能是什么原因...... 回答1 “Object”类型的参数不可分配给“{}[]”类型的参数。
  • 在 ES6 中自动将参数设置为实例属性(Automatically set arguments as instance properties in ES6)
    问题 如果您使用@ 作为参数的前缀,CoffeeScript 会自动将参数设置为构造函数中的实例属性。 在 ES6 中是否有任何技巧可以完成相同的操作? 回答1 Felix Kling 的评论概述了最接近此问题的整洁解决方案。 它使用两个 ES6 特性——Object.assign 和对象字面量属性值速记。 这是一个以tree和pot作为实例属性的示例: class ChristmasTree { constructor(tree, pot, tinsel, topper) { Object.assign(this, { tree, pot }); this.decorate(tinsel, topper); } decorate(tinsel, topper) { // Make it fabulous! } } 当然,这并不是你真正想要的; 一方面,您仍然需要重复参数名称。 我尝试编写一个可能更接近的辅助方法…… Object.autoAssign = function(fn, args) { // Match language expressions. const COMMENT = /\/\/.*$|\/\*[\s\S]*?\*\//mg; const ARGUMENT = /([^\s,]+)/g; // Extract constructor arguments
  • Typescript error: Argument of type 'Object' is not assignable to parameter of type '{}[]'
    I'm using the Angular Material table component like so: this.userService.getUsers().subscribe((response) => { this.users = new MatTableDataSource(response); }); It works but when compiling it throws the following typescript error: Argument of type 'Object' is not assignable to parameter of type '{}[]'. The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead? Property 'includes' is missing in type 'Object'. So I tried changing it to: this.users = new MatTableDataSource<any>(response); But still same error. response looks like this: [{ userId: 123
  • Python函数参数(必选、默认、可变、关键字)
    Python函数参数(必选、默认、可变、关键字) 【参考】:https://blog.csdn.net/pql925/article/details/80999086 1. 必选参数 必选参数,即使用普通变量标识符标识形参,没有默认赋值或*星号。 def power2(x): return x*x def power3(x): return x*x*x def power(x,n): return x**n power2(5) ## 25 power3(5) ## 125 power(5,2) ## 25 power(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: power() missing 1 required positional argument: 'n' 每个必选参数,在函数调用时,都必须要指定实参对象,如果未指定或少于必选形参个数,则会报错。 必选参数,必须放在其他类型的参数之前,即形参列表的最前面。 2. 参数传递 调用函数时,可以按位置依照形参顺序依次传递实参,也可以使用形参赋值的格式,将实参与形参绑定。 参数传递的本质是,实参元组到形参元组的赋值。 位置传递,按照形参顺序依次传递实参 形参绑定,通过赋值语句将实参传递给对应的形参 混合传递
  • Argument of type ‘Object’ is not assignable to parameter of type ‘string’ - Ionic Angular
    Trying to parse with JSON but i get this error: Argument of type 'Object' is not assignable to parameter of type 'string'. import { Component, OnInit } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Component({ selector: 'app-uploader', templateUrl: './uploader.page.html', styleUrls: ['./uploader.page.scss'], }) export class UploaderPage implements OnInit { imageURL: string constructor(public http: HttpClient) { } ngOnInit() { } fileChanged(event) { const files = event.target.files const data = new FormData() data.append('file', files[0]) data.append('UPLOADCARE
  • Argument of type 'match' is not assignable to parameter of type any[] - nodejs / mongoose
    My query is running fine in RoboMongo, but when I construct the same in my nodeJs environment I'm getting the exception. Below is my code Repository function public find = async (account: any): Promise<any> => { return PromoTypes.aggregate( { $match: { account: { $in: account } } }, { $group: { _id: '$account', data: { $push: { _id: '$_id', description: '$description', iteration: '$iteration' } } } } ); }; Service file calling the above repo. function AccountService.ts public accountService = async (accountid: string): Promise<any> => { //accounttypes is an array constructed to pass to the
  • “对象”类型的参数不可分配给“字符串”类型的参数 - Ionic Angular(Argument of type ‘Object’ is not assignable to parameter of type ‘string’ - Ionic Angular)
    问题
  • “匹配”类型的参数不能分配给 any[] 类型的参数 - nodejs / mongoose(Argument of type 'match' is not assignable to parameter of type any[] - nodejs / mongoose)
    问题 我的查询在 RoboMongo 中运行良好,但是当我在我的 nodeJs 环境中构建相同的查询时,我收到了异常。 下面是我的代码 存储库功能 public find = async (account: any): Promise<any> => { return PromoTypes.aggregate( { $match: { account: { $in: account } } }, { $group: { _id: '$account', data: { $push: { _id: '$_id', description: '$description', iteration: '$iteration' } } } } ); }; 调用上述 repo 的服务文件。 功能 账户服务.ts public accountService = async (accountid: string): Promise<any> => { //accounttypes is an array constructed to pass to the repo, it has more business logic about construction which I have not included in this code. But the object would be as
  • 通过键,JavaScript组合JSON数组(Combine json arrays by key, javascript)
    问题 我需要结合由两个rest服务提供的两个json数组。 具有相同“ id”的条目属于在一起。 json1 = [{id:1,name:'aaa'}, {id:5,name:'ccc'}, {id:3,name:'bbb'} ]; json2 = [{id:3,parameter1:'x', parameter2:'y', parameter3:'z'}, {id:1,parameter1:'u', parameter2:'v', parameter3:'w'}, {id:5,parameter1:'q', parameter2:'w', parameter3:'e'} ]; 我需要通过以下方式(我的模型在angular2中)在javascript中组合/复制/克隆json数组: json3 = [{id:3,name:'bbb',parameter1:'x', parameter2:'y', parameter3:'z'}, {id:1,name:'aaa', parameter1:'u', parameter2:'v', parameter3:'w'}, {id:5,name:'ccc', parameter1:'q', parameter2:'w', parameter3:'e'} ]; 有没有办法将它们结合起来? 参数名称未完全定义,需要与可变参数向量一起使用。
  • JavaScript是按引用传递还是按值传递语言?(Is JavaScript a pass-by-reference or pass-by-value language?)
    问题 基本类型(数字,字符串等)按值传递,但是对象是未知的,因为它们都可以按值传递(如果我们认为保存对象的变量实际上是对该对象的引用) )和按引用传递(当我们认为对象的变量包含对象本身时)。 尽管最后并没有什么大不了,但我想知道什么是表达通过约定的参数的正确方法。 是否有JavaScript规范的摘录,该摘录定义了与此相关的语义? 回答1 在JavaScript中这很有趣。 考虑以下示例: function changeStuff(a, b, c) { a = a * 10; b.item = "changed"; c = {item: "changed"}; } var num = 10; var obj1 = {item: "unchanged"}; var obj2 = {item: "unchanged"}; changeStuff(num, obj1, obj2); console.log(num); console.log(obj1.item); console.log(obj2.item); 产生输出: 10 changed unchanged 如果obj1根本不是引用,则更改obj1.item对该函数外部的obj1无效。 如果论点是一个适当的参考,那么一切都会改变。 num为100 ,而obj2.item读为"changed" 。 相反,情况是传入的项目是按值传递的
  • {...} 类型的参数不可分配给“从不”类型的参数(Argument of type {...} is not assignable to parameter of type 'never')
    问题 我正在尝试基于另一个具有相同键的类型创建一个类型,其值的类型基于但不等于另一种类型。 它类似于React的setState ,它接受一个值或一个获取当前值并返回一个新值的函数。 经过研究,与此错误相关的所有问题似乎都与缺少类型提示有关。 我已经尝试为所有next 、 current和newTheme[key]变量指定类型。 它没有用。 type Mode = "light" | "dark"; interface Theme { mode: Mode; test: number; } type ThemeUpdate = { [K in keyof Theme]: Theme[K] | ((current: Theme[K]) => Theme[K]) }; const reducer = (currentTheme: Theme, action: Partial<ThemeUpdate>): Theme => { const newTheme: Partial<Theme> = {}; (Object.keys(action) as (keyof Theme)[]).forEach((key: keyof Theme) => { const next = action[key]; const current = currentTheme[key]; newTheme[key
  • 非类型模板参数(Non-type template parameters)
    问题 我知道非类型模板参数应该是一个常数整数表达式。 有人可以解释为什么会这样吗? template <std::string temp> void foo() { // ... } error C2993: 'std::string' : illegal type for non-type template parameter 'temp'. 我知道什么是常数积分表达式。 不允许使用上述代码段中的非常量类型(例如std::string的原因是什么? 回答1 之所以不能执行此操作,是因为在编译期间无法解析和替换非常数表达式。 它们可能会在运行时更改,这将需要在运行时生成新模板,这是不可能的,因为模板是编译时的概念。 这是标准允许非类型模板参数(14.1 [temp.param] p4)的内容: 非类型模板参数应具有以下(可选的,通过cv限定)类型之一: 整数或枚举类型, 指向对象或函数的指针, 对对象的左值引用或对函数的左值引用, 指向成员的指针, std::nullptr_t 。 回答2 那是不允许的。 但是,这是允许的: template <std::string * temp> //pointer to object void f(); template <std::string & temp> //reference to object void g(); 参见C ++
  • Argument of type {...} is not assignable to parameter of type 'never'
    I'm trying to create a type based on another one with the same keys and whose value's type is based on, but not equal to, the another type. It's similar to React's setState, where it accepts either a value or a function that get the current value and returns a new one. After research, all issues related to this error seems related to a lack of type hinting. I already tried to specified the types for all next, current and newTheme[key] variables. It didn't work. type Mode = "light" | "dark"; interface Theme { mode: Mode; test: number; } type ThemeUpdate = { [K in keyof Theme]: Theme[K] | (
  • “响应”类型的参数不能分配给“字符串”类型的参数(Argument of type 'Response' is not assignable to parameter of type 'string')
    问题 我有我正在做的这个项目。 这个想法是从谷歌图书 API 检索书籍,使用 angular 4 我正在努力理解如何阅读 JSON 响应,我仍在学习 Angular。 我在互联网上搜索并在 GitHub google bookstore 上找到了这个源代码 我收到以下错误 Argument of type 'Response' is not assignable to parameter of type 'string'. 对于这条线 let bookResponse = JSON.parse(body); 我不确定我是否以正确的方式做这件事。 感谢你的帮助 下面是我发送 HTTP 请求的方法。 getBooks(searchparam: any){ let par = new HttpParams(); par.set('q', searchparam); return this.httpClient.get('https://www.googleapis.com/books/v1/volumes', { params : new HttpParams().set('q',searchparam) }).map( (response: Response) => { let data = response; return data; } ); } 下面是从 HTTP
  • Argument of type X is not assignable to parameter of type Y. Object literal may only specify known properties, and X does not exist in type Y
    I'm trying to get Leaflet and a plugin to work together in an Ionic 2 project. I've installed and imported Leaflet itself and the leaflet-path-transform plugin, along with the Leaflet type declaration included in DefinatelyTyped. The code all works if I add declare var L: any; to ignore the type declarations. This is the important parts of the page controller (home.ts): var polyline = new L.Polyline( L.GeoJSON.coordsToLatLngs([ [114.14314270019531, 22.49479484975443], [114.21798706054688, 22.524608511026262], [114.20768737792969, 22.524608511026262], [114.20768737792969, 22.536024805886974] ])
  • error TS2345: Argument of type 'OperatorFunction<User, void>' is not assignable to parameter of type 'OperatorFunction<Object, void>'
    I'm new to Angular. How can I solve this problem? I have installed Angular CLI: 11.0.7 and Node: 12.18.4 Error: Error: src/app/_services/account.service.ts:19:7 - error TS2345: Argument of type 'OperatorFunction<User, void>' is not assignable to parameter of type 'OperatorFunction<Object, void>'. The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead? Type 'Object' is missing the following properties from type 'User': username, token 19 map((response: User) => { ~~~~~~~~~~~~~~~~~~~~~~~~~ 20 const user = response; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • “(e: CustomEvent) => void”类型的参数不可分配给“EventListenerOrEventListenerObject”类型的参数(Argument of type '(e: CustomEvent) => void' is not assignable to parameter of type 'EventListenerOrEventListenerObject')
    问题 我有这个自定义事件设置,它适用于 TypeScript 2.5.3 ,但是当我更新到2.6.1出现错误 window.addEventListener('OnRewards', (e: CustomEvent) => { // my code here }) [ts] '(e: CustomEvent) => void' 类型的参数不可分配给 'EventListenerOrEventListenerObject' 类型的参数。 类型 '(e: CustomEvent) => void' 不能分配给类型 'EventListenerObject'。 类型 '(e: CustomEvent) => void' 中缺少属性 'handleEvent'。 我不确定在这里做什么来解决这个问题。 回答1 这是由于 TypeScript v2.6 中添加的 --strictFunctionTypes 编译器标志的行为。 类型为(e: CustomEvent) => void函数不再被视为EventListener的有效实例,它采用Event参数,而不是CustomEvent 。 因此,修复它的一种方法是关闭--strictFunctionTypes 。 另一种方法是传入一个函数,该函数接受一个Event ,然后通过类型保护缩小到CustomEvent : function
  • X 类型的参数不能分配给 Y 类型的参数。对象字面量只能指定已知属性,而 X 在类型 Y 中不存在(Argument of type X is not assignable to parameter of type Y. Object literal may only specify known properties, and X does not exist in type Y)
    问题 我正在尝试让 Leaflet 和一个插件在 Ionic 2 项目中协同工作。 我已经安装并导入了 Leaflet 本身和 Leaflet-path-transform 插件,以及包含在 DefinatelyTyped 中的 Leaflet 类型声明。 如果我添加declare var L: any; 忽略类型声明。 这是页面控制器(home.ts)的重要部分: var polyline = new L.Polyline( L.GeoJSON.coordsToLatLngs([ [114.14314270019531, 22.49479484975443], [114.21798706054688, 22.524608511026262], [114.20768737792969, 22.524608511026262], [114.20768737792969, 22.536024805886974] ]), { weight: 15, draggable: true, transform: true }) .bindPopup("L.Polyline") .addTo(map); polyline.transform.enable(); draggable和transform不是基本 Leaflet 中的有效选项(也不是.transform ),所以我在PROJECT
  • 如果参数的数据类型是对象,如何将我查询的值分配给作为过程中的参数的字符串?(How do I assign the value I queried to a String which is an argument in a procedure if the argument's data type is an Object?)
    问题
  • 为什么将 Perl 6 命名参数限制为一个确定的值使其成为必需值?(Why does constraining a Perl 6 named parameter to a definite value make it a required value?)
    问题 考虑这些都采用单个命名参数的子例程。 命名参数应该是可选的,我没有看到任何可以说有例外的内容。 没有类型限制就没有问题; 命名参数不是必需的。 使用可以接受类型对象(无注释、 :U和:_ )的类型约束没有问题。 Parameter '$quux' of routine 'quux' must be an object instance of type 'Int', not a type object of type 'Int'. Did you forget a '.new'? in sub quux at /Users/brian/Desktop/type.p6 line 16 in block <unit> at /Users/brian/Desktop/type.p6 line 37 对于需要定义值(用:D注释)的类型约束,命名参数不再是可选的。 也就是说,对于任何其他定义,我不必提供值。 使用:D我必须提供一个值。 我宁愿不遗漏:D因为必须定义我想要的值。 从签名文档: 通常,类型约束只检查传递的值是否是正确的类型。 但是,我没有传递任何价值。 我认为这些约束只对作业有影响。 由于我没有明确提供要分配的值,因此我预计不会有任何分配也没有问题。 Rakudo 2017.10 并非如此。 这使我以各种令人讨厌的方式解决此问题。 这与我的问题有关 Perl 6