在Flutter中显示图像一次

时间:2019-11-03 01:32:24

标签: flutter

当我在文件中设置图像并以这样的方式设置图像时,Image.assets出现了问题:

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

以及当我将其放入代码中时:

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

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

运行它,效果很好 但是第二次我运行代码时,它没有显示 这是我得到的错误:

  

I / flutter(4784):BY图像资源服务引起的异常提示   ╞═════════════════════════════════════════════════ ═══我/颤振(   4784):解析图像时引发了以下断言:   I / flutter(4784):无法加载资产: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):   (从dart:async包中删除了7帧)I / flutter(4784):图像   提供者:AssetImage(捆绑:null,名称:“ images / facebook.png”)   I / flutter(4784):映像配置:ImageConfiguration(捆绑:   PlatformAssetBundle#b5447(),devicePixelRatio:1.5,I / flutter(4784):   区域设置:en_US,textDirection:TextDirection.ltr,平台:android)   I /颤振(4784):   ══════════════════════════════════════════════════ ══════════════════════════════════════════════════

6 个答案:

答案 0 :(得分:0)

检查此

assets:
   - images/facebook.png

确保您拥有完全相同的空格

flutter:

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

每个空间都很重要

答案 1 :(得分:0)

我的代码:

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.
    );
  }
}

我的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

答案 2 :(得分:0)

请确保您在pubspec.yaml中使用2或4个空格(避免使用制表符)作为缩进。

您的pubspec.yaml必须是这样

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

不喜欢

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

或这样

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

运行
flutter clean
flutter pub get
在您的终端中

答案 3 :(得分:0)

1)。创建名为images的文件夹 2)。添加要添加的图像 3)。像这样在pubspec中添加 资产:   -images / xyz.png 4)点击Package得到 5)运行该应用程序(先杀死应用程序并运行)。

答案 4 :(得分:0)

这个问题最近发生在我身上。正如@Mohamed Adel回答的那样,您必须保留适当的空格。 您还可以包含整个文件夹eg: images

flutter:

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

如果images文件夹包含子文件夹eg: images/products/

flutter:

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

pubspec.yaml中,使用空格比制表符总是安全的

enter image description here

答案 5 :(得分:0)

步骤1: -创建一个名为资产的目录,如下所示。并将图像添加到此目录。

enter image description here

第2步:

-将您的目录添加到pubspec.yaml。这支持该目录的所有图像。

enter image description here

第3步:

-在终端上运行此命令。

flutter pub get

第4步:

-编写这样的代码。如果要控制图像大小,请使用height和width属性。

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"),
      ),
    );
  }
}

结果:

enter image description here