AssetImage() always picking base asset - flutter

AssetImage() is always picking the base asset instead of the one according to the device pixel ratio. Here's how I'm using it:
class HomeScreen extends StatelessWidget {
#override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(image: DecorationImage(image: AssetImage('assets/home_screen/title.png'))),
)
);
}
}
Here's what I have in pubspec.yaml:
assets:
- assets/home_screen/
- assets/home_screen/2.0x/
- assets/home_screen/3.0x/
I have title.png in each directory above. My device pixel ratio is 2.625, but AssetImage always picks assets/home_screen/title.png, not assets/home_screen/3.0x/title.png

An image asset can refer to one or more resolution-specific variants. Try to specify only the base asset to pubspec.yaml:
assets:
- assets/home_screen/title.png

Related

Flutter (Unable to load asset)

I'm unable to load images to my app although I tried many solutions
my code is
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
#override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
backgroundColor: Colors.amber,
appBar: AppBar(
backgroundColor: Colors.amber[900],
title: const Text("hi"),
),
body: Image(image: AssetImage("images/ab.png"),
),
),
);
}
}
this is my pubspec.yaml
flutter doctor
1- I used $ flutter clean and then $ flutter pub get.
2- I updated flutter SDK.
3- I mention only the folder (images).
4- I used a smaller image.
5- I restarted my laptop.
6- I run my code in another IDE.
but nothing is working for me, so can anyone help me?
thanks in advance
I copied your main.dart code, I created a images folder with a .png file.
I think the problem could be the position of the images folder, you should place it beside the lib folder.
Without seeing the project folder structure I cannot be sure, but if you do it like that your code should work fine.
Here's the pubspec.yaml:
flutter:
assets:
- images/
Here's a screenshot of the your code running:

unable to load Image in local packages

I am developing a local package for my flutter project, it's basically a UI library which includes a lot of image assets.
I don't want to load the assets in the package from my main project.
I want to load the assets in the package itself.
Here's what I did,
asset location: package_name/lib/assets
pubspec.yaml: packages/package_name/assets/bg.png
dart file: packages/package_name/assets/bg.png
Here are the step by step instructions to add image in Flutter:
Step 1: At the root of your project, create a new folder called assets.
Step 2: Inside the root folder, create another folder called images. You can give any name to this folder such as pictures, graphics, etc.
Step 3: Add your images inside the assets/images folder.
Step 4: Provide the image path in pubspec.yaml file as below.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
assets: <-- SEE HERE
- assets/images/lion.png
Step 5: Display image using the Image.asset() widget
u can use tihs idea
var files = Directory("${Directory.current.path.toString()}/lib/assets").listSync(); // this to create list of all file in the path
#override
void initState() {
// TODO: implement initState
print(files.toList()[0].path);// to see the alemint that u have and u //can creat list of all item and reach to them like this above
}
#override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Container(
child: files.isNotEmpty ? Image.file(File('${files.toList() [0].path}'),fit: BoxFit.fill,) : Text(""),
),
),
);
}
do not forget add
import 'dart:io';

How can I display Asset Images on Flutter web?

When I try to display an asset in Flutter Web using the following syntax, no image is shown:
Image.asset(
'assets/image.png',
)
On mobile, the same code will show an image.
The structure is as follows:
assets
image.png
lib
...
pubspec.yaml
In the Pubspec, I declare the asset like this:
flutter:
assets:
- assets/image.png
All assets are stored in an assets directory in Flutter Web, which means that the image asset will be stored like this on web:
assets
assets
image.png
index.html
...
With this knowledge, we can create a widget that handles the behavior for both mobile and web.
Note that we can use Image.network on web because the images are accessed through the network on web by default (that is how web works in general). The path would be yourdomain.com/assets/assets/image.png.
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
class PlatformAwareAssetImage extends StatelessWidget {
const PlatformAwareAssetImage({
Key key,
this.asset,
this.package,
}) : super(key: key);
final String asset;
final String package;
#override
Widget build(BuildContext context) {
if (kIsWeb) {
return Image.network(
'assets/${package == null ? '' : 'packages/$package/'}$asset',
);
}
return Image.asset(
asset,
package: package,
);
}
}
Potentially, this will be changed in future Flutter versions - this is the state of things as of v1.18.0-6.0.pre.82.
For some reason, assets in the web builds are currently placed under another assets/ directory, which results in the path being assets/assets/....
Create a simple function e.g. in lib/utils.dart:
import 'package:flutter/foundation.dart';
String path(str) {
return (kIsWeb) ? 'assets/$str' : str;
}
Wrap any path strings with this function, for example AssetImage(path('images/bg.jpg')).
I find this simpler:
Image.asset("${(kDebugMode && kIsWeb)?"":"assets/"}images/mds_square.png"),
I always need the "assets/" prefix since my "images" folder are in "assets" folder; however, in web debug I need to emit the "assets/" prefix.

Can't show image from asset in flutter

I'm starting to learn flutter and I'm, at the moment, trying to show an image from a file, but it's not showing it and I don't know why. I changed my pubspec.yaml with this:
# To add assets to your application, add an assets section, like this:
assets:
- assets/
My folders are summarized like this:
<project-folder>
- pubspec.yaml
- assets
- images
- d4.png
And I just replaced the base _MyHomePageState class from the base counter example like this:
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title)),
body: Image(image: AssetImage('images/d4.png')),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
The image is not showing and I don't know why. If I replace the AssetImage with a NetworkImage, the image from the link works normally. Does anyone know what I'm missing?
Your asset folder in pubspec.yaml is wrong. Use one of the alternatives bellow:
Use this to import all of the images inside of the images directory
assets:
- assets/images/
Use this to import only the d4.png image file
assets:
- assets/images/d4.png
Then use the complete file path to access the image:
Image.asset('assets/images/d4.png')
In your pubspec.yaml add the following
# To add assets to your application, add an assets section, like this:
assets:
- assets/images/d4.png
Then in your homepage
Image.asset('assets/images/d4.png')

How to add image in Flutter

I am developing Flutter app for the first time. I have an issue adding an image. I have a following questions:
Where to create an images folder?
Where to add assets tag in pubspec.ymal?
Is there any assets folder needed for this?
What I tried:
assets:
- images/lake.jpg
inside pubspec.ymal :
Full file :
name: my_flutter_app
description: A new Flutter application.
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true,
assets:
- images/lake.jpg
Error log :
#/properties/flutter/properties/uses-material-design: type: wanted [boolean] got true,
Error detected in pubspec.yaml:
Error building assets
FAILURE: Build failed with an exception.
* Where:
Script '/home/abc/Downloads/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 435
* What went wrong:
Execution failed for task ':app:flutterBuildDebug'.
> Process 'command '/home/abc/Downloads/flutter/bin/flutter'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
* Get more help at https://help.gradle.org
BUILD FAILED in 1s
Finished with error: Gradle build failed: 1
My main.dart code :
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/material.dart';
// Uncomment lines 7 and 10 to view the visual layout at runtime.
//import 'package:flutter/rendering.dart' show debugPaintSizeEnabled;
void main() {
//debugPaintSizeEnabled = true;
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext context) {
Widget titleSection = new Container(
padding: const EdgeInsets.all(32.0),
child: new Row(
children: [
new Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
new Container(
padding: const EdgeInsets.only(bottom: 8.0),
child: new Text(
'Oeschinen Lake Campground',
style: new TextStyle(
fontWeight: FontWeight.bold,
),
),
),
new Text(
'Kandersteg, Switzerland',
style: new TextStyle(
color: Colors.grey[500],
),
),
],
),
),
new Icon(
Icons.star,
color: Colors.red[500],
),
new Text('41'),
],
),
);
Column buildButtonColumn(IconData icon, String label) {
Color color = Theme.of(context).primaryColor;
return new Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
new Icon(icon, color: color),
new Container(
margin: const EdgeInsets.only(top: 8.0),
child: new Text(
label,
style: new TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.w400,
color: color,
),
),
),
],
);
}
Widget buttonSection = new Container(
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
buildButtonColumn(Icons.call, 'CALL'),
buildButtonColumn(Icons.near_me, 'ROUTE'),
buildButtonColumn(Icons.share, 'SHARE'),
],
),
);
Widget textSection = new Container(
padding: const EdgeInsets.all(32.0),
child: new Text(
'''
Lake Oeschinen lies at the foot of the Blüemlisalp in the Bernese Alps. Situated 1,578 meters above sea level, it is one of the larger Alpine Lakes. A gondola ride from Kandersteg, followed by a half-hour walk through pastures and pine forest, leads you to the lake, which warms to 20 degrees Celsius in the summer. Activities enjoyed here include rowing, and riding the summer toboggan run.
''',
softWrap: true,
),
);
return new MaterialApp(
title: 'Flutter Demo',
home: new Scaffold(
appBar: new AppBar(
title: new Text('Top Lakes'),
),
body: new ListView(
children: [
new Image.asset(
'images/lake.jpg',
width: 600.0,
height: 240.0,
fit: BoxFit.cover,
),
titleSection,
buttonSection,
textSection,
],
),
),
);
}
}
I am referring to this tutorial https://flutter.io/tutorials/layout/
Also, I want to ask if there are any tools for a clean rebuild in a flutter as I can't find any options for this.
How to include images in your app
1. Create an assets/images folder
This should be located in the root of your project, in the same folder as your pubspec.yaml file.
In Android Studio you can right click in the Project view
You don't have to call it assets or images. You don't even need to make images a subfolder. Whatever name you use, though, is what you will register in the pubspec.yaml file.
2. Add your image to the new folder
You can just copy your image into assets/images. The relative path of lake.jpg, for example, would be assets/images/lake.jpg.
3. Register the assets folder in pubspec.yaml
Open the pubspec.yaml file that is in the root of your project.
Add an assets subsection to the flutter section like this:
flutter:
assets:
- assets/images/lake.jpg
If you have multiple images that you want to include then you can leave off the file name and just use the directory name (include the final /):
flutter:
assets:
- assets/images/
Note: Make sure to use the exact number of spaces. That's 2 spaces per indentation.
4. Use the image in code
Get the asset in an Image widget with Image.asset('assets/images/lake.jpg').
The entire main.dart file is here:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Image from assets"),
),
body: Image.asset('assets/images/lake.jpg'), // <--- image
),
);
}
}
5. Restart your app
When making changes to pubspec.yaml I find that I often need to completely stop my app and restart it again, especially when adding assets. Otherwise I get a crash.
Running the app now you should have something like this:
Further reading
See the documentation for how to do things like provide alternate images for different densities.
Videos
The first video here goes into a lot of detail about how to include images in your app. The second video covers more about how to adjust how they look.
Flutter Tutorial - 1/2 Image - Deep Dive
Flutter Tutorial - 2/2 Image - Deep Dive
I think the error is caused by the redundant ,
flutter:
uses-material-design: true, # <<< redundant , at the end of the line
assets:
- images/lake.jpg
I'd also suggest to create an assets folder in the directory that contains the pubspec.yaml file and move images there and use
flutter:
uses-material-design: true
assets:
- assets/images/lake.jpg
The assets directory will get some additional IDE support that you won't have if you put assets somewhere else.
Create images folder in root level of your project.
Drop your image in this folder, it should look like
Go to your pubspec.yaml file, add assets header and pay close attention to all the spaces.
flutter:
uses-material-design: true
# add this
assets:
- images/profile.jpg
Tap on Packages get at the top right corner of the IDE.
Now you can use your image anywhere using
Image.asset("images/profile.jpg")
The problem is in your pubspec.yaml, here you need to delete the last comma.
uses-material-design: true,
To use image in Flutter. Do these steps.
1. Create a Directory inside assets folder named images. As shown in figure below
2. Put your desired images to images folder.
3. Open pubpsec.yaml file . And add declare your images.Like:--
4. Use this images in your code as.
Card(
elevation: 10,
child: Container(
decoration: BoxDecoration(
color: Colors.orangeAccent,
image: DecorationImage(
image: AssetImage("assets/images/dropbox.png"),
fit: BoxFit.fitWidth,
alignment: Alignment.topCenter,
),
),
child: Text("$index",style: TextStyle(color: Colors.red,fontSize: 16,fontFamily:'LangerReguler')),
alignment: Alignment.center,
),
);
An alternative way to put images in your app (for me it just worked that way):
1 - Create an assets/images folder
2 - Add your image to the new folder
3 - Register the assets folder in pubspec.yaml
4 - Use this code:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext context) {
var assetsImage = new AssetImage('assets/images/mountain.jpg'); //<- Creates an object that fetches an image.
var image = new Image(image: assetsImage, fit: BoxFit.cover); //<- Creates a widget that displays an image.
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Climb your mountain!"),
backgroundColor: Colors.amber[600], //<- background color to combine with the picture :-)
),
body: Container(child: image), //<- place where the image appears
),
);
}
}
Create your assets directory the same as lib level
like this
projectName
-android
-ios
-lib
-assets
-pubspec.yaml
then your pubspec.yaml like
flutter:
assets:
- assets/images/
now you can use Image.asset("/assets/images/")
--> Follow Below Steps One OR Multiple Image Insertion.:
-> Create 'assets/images' folder as in project module.
-> put images which you want.
-> use of image using this syntax. ex.
- Image.asset('assets/images/tony.jpg')
-> use image avatar which you want like, circle, square and much more as your need.
-> Open 'pubspec.yaml' file
-> write the code in 'flutter:' section. ex.
-------------------------------
uses-material-design: true
assets:
- assets/images/ // if multiple images you have then
- assets/images/imagename.extension // if single images you have then
-------------------------------
-> click on 'PUB GET' button which occurs on Right side of Screen above.
-> Run App.
-> if you get any issue then
-> Go to file -> Invalid caches/Restart -> Invalid Caches/Restart button
-> Done.
See Below Images to Get a Better idea of Implementation.
•• Here, add image file like below. ••
•• Here, add image file Description in PUBSPEC.YAML file like below. ••
Done.☻♥
When you adding assets directory in pubspec.yaml file give more attention in to spaces
this is wrong
flutter:
assets:
- assets/images/lake.jpg
This is the correct way,
flutter:
assets:
- assets/images/
their is no need to create asset directory and under it images directory and then you put image.
Better is to just create Images directory inside your project where pubspec.yaml exist and put images inside it
and access that images just like as shown in tutorial/documention
assets:
- images/lake.jpg // inside pubspec.yaml
If the image is inside a package dependency, you should also provide the package name, event if you are referencing the image from the same dependency!
Image.asset("assets/pics/events_empty.png", package: "ui_elements"),
Ref:
Asset images in package dependencies
Make sure you create the assets folder in the main directory, not in the lib folder.
you can rather use this to see access to everything inside assets, because there may be folders like images, logo, icon, etc...
create the assets folder in the root of the project
MyProject
android
assets
ios
lib
test
web
windows
.gitignore
pubspec.yaml
and in your pubspec.yaml, there are
assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
replace the last two lines by the 'assets/' to be able to directly access everything inside assets
if you have directly images in assets
assets:
- assets/
or if you have sub folders in assets
assets:
- assets/folder1/
- assets/folder2/
- assets/folder3/
Create an assets/images folder and Add your image to the folder
Register the assets folder in pubspec.yaml
flutter:
assets:
- assets/images/placeholder_circle_image.png
If you have multiple images
flutter:
assets:
- assets/images/
Use the image in code
Image.asset(
'assets/images/item_entry/add_car_video.png',
width: 100,
height: 100,
fit: BoxFit.cover,
cacheWidth:100 * MediaQuery.of(context).devicePixelRatio.round(),
),
Error when comma is at the end of below line
uses-material-design: true,
when the line after assets: indent is not correct it throws below error
If the indent is corrected as shown in below, then error is fixed.
If the asset file is not added then it highlights that with yellowish background but Pub get doesn't throw error but there will be an error during installation.
In short, Code Indent and syntax is important
You can create a folder and reference it as shown