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

67.1k Views Asked by At

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'. ),

enter image description here

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

8

There are 8 best solutions below

2
croxx5f On

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,
              ),
            ),

3
Amir On

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 
),
0
David The Wise On

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

0
Phor Joon Huang On

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")
1
Anurag Tiwari On

Use as ImageProvider after the end of the statement.

For example:

image: myMarkerThumb != 'noImage'
     ? NetworkImage(myMarkerThumb)
     : AssetImage('assets/images/noImageAvailable.png')
     as ImageProvider,
0
LazzyCoderr On

Use Image.asset("URL").image to avoid static type casting "as ImageProvider". In the Future, maybe static type cast cause some errors.

Container(
  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) : 
      Image.asset('assets/images/noImageAvailable.png').image,
    ),
  ),
)
0
Azizur Rahaman On

If you are using Image widget this will solve it:

imageObj!.image
0
Amr Elwekeel On

A simple workaround you could make in the meantime :

   decoration: BoxDecoration(
          image:const DecorationImage(
          image: AssetImage('assets/images/any.png'),
          fit: BoxFit.fitWidth),
          color: MyColors.yellow,
          borderRadius: 
          BorderRadius.circular(10)
          ),