【问题标题】:Images not showing in GridView even though asset specified in pubspec.yaml Flutter即使在 pubspec.yaml Flutter 中指定了资产,图像也未在 GridView 中显示
【发布时间】:2020-05-16 02:05:06
【问题描述】:

我现在正在开发一个菜单信息亭应用程序,在我的应用程序上加载图像时遇到了一些问题,我确保在我的 pubspec.yaml 中指定了每个图像,但图像仍然没有显示。我得到的错误是: ════════ Exception caught by image resource service ════════════════════════════ Unable to load asset: assets/images/sideDesserts/Dippers with Choco Dip.png ════════════════════════════════════════════════════════════════════════════════

这是我的 pubspec.yaml 包含的内容

# To add assets to your application, add an assets section, like this:
  assets:
    - assets/images/
    - assets/images/sideNav/
    #pizza assets
    - assets/images/pizza/Hawaiian Overload.png
    - assets/images/pizza/Bacon Overload.png
    - assets/images/pizza/All In Overload.png
    - assets/images/pizza/All Beef Overload.png
    - assets/images/pizza/hamandCheese.png
    - assets/images/pizza/Peperroni Classic.png
    - assets/images/pizza/veggies_cheesedouble.png
    - assets/images/pizza/Ham Pineapple Classic.png
    - assets/images/pizza/Cheese Classic.png
    #barkada assets
    - assets/images/barkada/Barkada Bundle A.png
    - assets/images/barkada/Barkada Bundle B.png
    - assets/images/barkada/Barkada Bundle C.png

    #chicken assets        
    - assets/images/chicken/1pc Chicken with Rice.png
    - assets/images/chicken/2pc Chicken Meal with Rice.png
    - assets/images/chicken/Chicken Waves.png
    #combo assets
    - assets/images/combo/Carbonara Chicken Combo.png
    - assets/images/combo/Creamy Bacon Carbonara Value Meal.png
    - assets/images/combo/Lasagna Chicken Combo.png
    - assets/images/combo/Lasagna Supreme Value Meal.png
    - assets/images/combo/Meaty Spaghetti Chicken Combo.png
    - assets/images/combo/Meaty Spaghetti Value Meal.png
    - assets/images/combo/Pizza Value Meal A.png
    - assets/images/combo/Pizza Value Meal B.png
    - assets/images/combo/Pizza Value Meal C.png
    - assets/images/combo/Pizza Loaded Combo D.png
    - assets/images/combo/Pizza Loaded Combo E.png
    #drink assets
    - assets/images/drinks/Choco Slush.png
    - assets/images/drinks/coke pitcher.png    
    - assets/images/drinks/Coke Zero.png
    - assets/images/drinks/Coke.png    
    - assets/images/drinks/Coke Glass.png
    - assets/images/drinks/Ice Tea.png
    - assets/images/drinks/Nestea Glass.png
    - assets/images/drinks/Nestea Pitcher.png    
    - assets/images/drinks/PJ Pitcher.png
    - assets/images/drinks/Pj.png
    - assets/images/drinks/Sprite.png    
    #pasta assets
    - assets/images/pasta/Lasagna Supreme Ala Carte.png
    - assets/images/pasta/Meaty Spaghetti Ala Carte.png
    - assets/images/pasta/Creamy Bacon Carbonara Ala Carte.png
    - assets/images/pasta/Lasagna Supreme Large Pan.png
    - assets/images/pasta/Meaty Spaghetti Large Pan.png
    - assets/images/pasta/Creamy Bacon Carbonara Pan.png
    - assets/images/pasta/Lasagna Supreme Pan.png
    - assets/images/pasta/Meaty Spaghetti Regular Pan.png
    - assets/images/pasta/Creamy Bacon Carbonara Regular Pan.png

    #sides Desserts assets
    - assets/images/sideDesserts/Regular Potato Waves.png
    - assets/images/sideDesserts/Cheesy Bread Sticks with Dip.png
    - assets/images/sideDesserts/Dippers with Choco Dip.png
    - assets/images/sideDesserts/Large Potato Waves.png
    - assets/images/sideDesserts/Plain Rice.png                   

    #logos
    - assets/images/Logos/box Logo.png
    - assets/images/Logos/long logo.png

我还为不同的菜单类型创建了自定义静态列表模型,示例如下:

class BarkadaData {
  String name;
  String imagePath;
  double price;

  BarkadaData({this.imagePath, this.name, this.price});

  static List<BarkadaData> barkadaList = [
    BarkadaData(
        name: 'Barkada Bundle A (for 3)',
        price: 469.00,
        imagePath: 'assets/images/barkada/Barkada Bundle A.png'),
    BarkadaData(
        name: 'Barkada Bundle B (for 4)',
        price: 569.00,
        imagePath: 'assets/images/barkada/Barkada Bundle B.png'),
    BarkadaData(
        name: 'Barkada Bundle C (for 6)',
        price: 969.00,
        imagePath: 'assets/images/barkada/Barkada Bundle C.png'),
  ];
}

最后,我使用 GridView.builder 显示它,我的小部件树如下所示:

                      Container(
                        width: MediaQuery.of(context).size.width * .75,
                        child: GridView.builder(
                          itemCount: barkadaList.length,
                          gridDelegate:
                              SliverGridDelegateWithFixedCrossAxisCount(
                                  crossAxisCount: 3),
                          itemBuilder: (BuildContext context, int index) {
                            return InkWell(
                              onTap: () {
                                print(barkadaList[index].name);
                              },
                              child: Padding(
                                padding: const EdgeInsets.all(8.0),
                                child: Stack(
                                  children: <Widget>[
                                    Container(
                                      width: MediaQuery.of(context).size.width *
                                          .22,
                                      child: Image(
                                        image: AssetImage(
                                            barkadaList[index].imagePath),
                                      ),
                                    ),
                                    Text(
                                      '${barkadaList[index].name}',
                                      style: TextStyle(
                                          fontWeight: FontWeight.w600,
                                          fontSize: 18),
                                      textAlign: TextAlign.center,
                                    )
                                  ],
                                ),
                              ),
                            );
                          },
                        ),
                      )

如您所见,gridview.builder 有效,因为名称正在显示,只有图像不显示。任何帮助将不胜感激

【问题讨论】:

    标签: image flutter dart


    【解决方案1】:

    也许,像这样修复您的 pubspec.yaml。

    来自

    - assets/images/barkada/Barkada Bundle A.png
    

    - 'assets/images/barkada/Barkada Bundle A.png'
    

    【讨论】:

      【解决方案2】:

      重命名您的图像。您的图像名称有空格。在 android 图像中不加载空间名称。所以将您的图像名称 Dippers with Choco Dip 重构为 Dippers_with_Choco_Dip

      【讨论】:

      • 非常感谢! iOS的约定是否相同?如果有空格,资产不会加载吗?
      • IOS 可以支持带“”的镜像名称。因此,对于两个操作系统都支持使用带有“”的名称。 N.B: IOS 也支持带有特殊字符的图像名称,但 android 不支持。
      猜你喜欢
      • 2021-08-13
      • 2021-08-10
      • 1970-01-01
      • 2020-03-13
      • 2021-12-03
      • 2023-04-03
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多