2
votes

I have a problem with flutter Image.assets, when I set image in the file and set it in the asset like that :

`flutter: uses-material-design: true assets:

  • images/facebook.png`

and when I put it in my code :

Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Image.asset(
          "images/facebook.png"

        ),
        Text(
          '$_counter',
          style: Theme.of(context).textTheme.display1,
        ),
      ],
    ),
  ),

and run it , it works well but the second time I run code , it not displaying and this the error I get :

I/flutter ( 4784): ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════ I/flutter ( 4784): The following assertion was thrown while resolving an image: I/flutter ( 4784): Unable to load asset: AssetManifest.json . . . I/flutter ( 4784): #381 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:969:5) I/flutter ( 4784): #382 RenderObjectToWidgetAdapter.attachToRenderTree. (package:flutter/src/widgets/binding.dart:915:17) I/flutter ( 4784): #383 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2328:19) I/flutter ( 4784): #384 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:914:13) I/flutter ( 4784): #385 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:795:7) I/flutter ( 4784): #386 runApp (package:flutter/src/widgets/binding.dart:845:7) I/flutter ( 4784): #387 main (package:flutter_app/main.dart:4:16) I/flutter ( 4784): #388 _runMainZoned.. (dart:ui/hooks.dart:229:25) I/flutter ( 4784): #393 _runMainZoned. (dart:ui/hooks.dart:221:5) I/flutter ( 4784): #394
_startIsolate. (dart:isolate-patch/isolate_patch.dart:305:19) I/flutter ( 4784): #395 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12) I/flutter ( 4784): (elided 7 frames from package dart:async) I/flutter ( 4784): Image provider: AssetImage(bundle: null, name: "images/facebook.png") I/flutter ( 4784): Image configuration: ImageConfiguration(bundle: PlatformAssetBundle#b5447(), devicePixelRatio: 1.5, I/flutter ( 4784): locale: en_US, textDirection: TextDirection.ltr, platform: android) I/flutter ( 4784): ════════════════════════════════════════════════════════════════════════════════════════════════════

6

6 Answers

1
votes

check this

assets:
   - images/facebook.png

make sure you have same spaces exactly like this

flutter:

[2 whitespaces or 1 tab]assets:
[4 whitespaces or 2 tabs]- images/facebook.png

every space matters

0
votes

my code:

import 'package:flutter/material.dart';
import 'dart:io';
import 'package:image_picker/image_picker.dart';
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'myApp'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  File imageFile;
  int _counter = 0;
  Color red = Colors.red;
   _incrementCounter() async{
     var picture = await ImagePicker.pickImage(source: ImageSource.camera);

    this.setState(() {
      // This call to setState tells the Flutter framework that something has
      // changed in this State, which causes it to rerun the build method below
      // so that the display can reflect the updated values. If we changed
      // _counter without calling setState(), then the build method would not be
      // called again, and so nothing would appear to happen.
      imageFile = picture;
      _counter++;
      print("work");
    });
  }

  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    //
    // The Flutter framework has been optimized to make rerunning build methods
    // fast, so that you can just rebuild anything that needs updating rather
    // than having to individually change instances of widgets.
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Image.asset(
              "images/facebook.png"

            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

my pubspec.yaml:

name: flutter_app
description: A new Flutter application.

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  image_picker:


  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter


# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter.
flutter:
  uses-material-design: true
  assets:
   - images/

  # An image asset can refer to one or more resolution-specific "variants", see
  # https://flutter.dev/assets-and-images/#resolution-aware.

  # For details regarding adding assets from package dependencies, see
  # https://flutter.dev/assets-and-images/#from-packages

  # To add custom fonts to your application, add a fonts section here,
  # in this "flutter" section. Each entry in this list should have a
  # "family" key with the font family name, and a "fonts" key with a
  # list giving the asset and other descriptors for the font. For
  # example:
  # fonts:
  #   - family: Schyler
  #     fonts:
  #       - asset: fonts/Schyler-Regular.ttf
  #       - asset: fonts/Schyler-Italic.ttf
  #         style: italic
  #   - family: Trajan Pro
  #     fonts:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.dev/custom-fonts/#from-packages
0
votes

Be sure you are using 2 or 4 spaces (avoid tabs) as indentation in your pubspec.yaml.

Your pubspec.yaml must be like this

flutter:
  uses-material-design: true
  assets:
    - images/facebook.png

not like this

flutter:
  uses-material-design: true
  assets:
      - images/facebook.png # error

or like this

flutter:
  uses-material-design: true
  assets:
  - images/facebook.png # also error

run
flutter clean
flutter pub get
in your terminal

0
votes

1).create folder named images 2).add image that you want to add 3).add in pubspec like this assets: - images/xyz.png 4)click on Package get 5) run the app(first kill app and run).

0
votes

This issue occurred to me recently. As @Mohamed Adel answered, you have to keep the proper whitespaces. You can also include an entire folder eg: images

flutter:

[2 whitespaces]assets:
[4 whitespaces]- images/

If the images folder has subfolders eg: images/products/

flutter:

[2 whitespaces]assets:
[4 whitespaces]- images/products

In pubspec.yaml it's always safe to use whitespaces than tabs

enter image description here

0
votes

Step 1: -Create one directory named assets as below shown. And add images to this directory.

enter image description here

Step 2:

-Add your directory to the pubspec.yaml.This is support for all the images for this directory.

enter image description here

Step 3:

-Run this command on the terminal.

flutter pub get

Step 4:

-Write code like this. If you want to control image size then use the height and width property.

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Image.asset("assets/facebook.png"),
      ),
    );
  }
}

Result:

enter image description here