使用Flutter中的Listview.builder时,未显示我的图像

22 浏览
0 Comments

使用Flutter中的Listview.builder时,未显示我的图像

我正在尝试实现一个水平的Listview,它展示了从Flutter image_picker插件中获取的我的图片。

如果我不使用Listview,仅显示单个图像,则可以正常工作。然而,我正在尝试使用多个图像,只要我将它们放置在Listview中,小部件就会显示为黑色。我的Listview代码如下:

          @override
 Widget build(BuildContext context) {
return WillPopScope(
  onWillPop: () async {
    Navigator.pushReplacementNamed(context, 'inventory');
    return false;
  },
  child: Scaffold(
    appBar: AppBar(
      backgroundColor: Colors.green[700],
      title: Text(
        'MyApp',
        textAlign: TextAlign.center,
      ),
      leading: new IconButton(
        icon: new Icon(Icons.arrow_back),
        onPressed: () {
          Navigator.pushReplacementNamed(
              context,
              'inventory');
        },
      ),
      actions: [
        Padding(
          padding: EdgeInsets.only(right: 10.0),
          child: Container(
            width: 50,
            height: 50,
            decoration: BoxDecoration(
              shape: BoxShape.circle,
              color: Colors.white, //remove this when you add image.
            ),
            child: GestureDetector(
              onTap: (){
                Navigator.pushNamed(context,'profile');
              },
              child: Image(
                image:NetworkImage("imageUrl goes here"),
                width: 120,
                height: 120,
                fit: BoxFit.cover,
              ),
            ),
          ),
        )
      ],
    ),
    body: SafeArea(
      child: Column(
        children: [
          pickedFile == null ?
          GestureDetector(
            onTap: () {
              _showMyDialog();
              setState(() {
              });
            },
            child: Container(
              width: 200,
              height: 200,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Click to add a Photo',textAlign: 
TextAlign.center,style: TextStyle(fontSize: 24),),
                  SizedBox(height: 20,),
                  Icon(
                    Icons.add_circle_outline,
                    color: Colors.grey[700],
                    size: 30,
                  ),
                ],
              ),
              margin: EdgeInsets.all(20.0),
              decoration: BoxDecoration(
                  border: Border.all(width: 2,color: Colors.grey),
                  shape: BoxShape.circle
              ),
            ),
          )
              :
          GestureDetector(
              onTap: () {
                _showMyDialog();
                setState(() {
                });
              },
              child: ListView.builder(
                  shrinkWrap: true,
                  scrollDirection: Axis.horizontal,
                  itemCount: _imageFileList!.length,
                  itemBuilder: (BuildContext context, int index) {
 return kIsWeb
                        ? Image.network(_imageFileList![index].path)
                        : Image.file(File(_imageFileList! 
  [index].path));
                  }
              )
  ],
      ),
  ),),
  );
  }
}

我没有展示整个代码,因为页面太长,但是页面的其余部分正常工作。如果我删除Listview builder并使用下面的测试,它会正常工作。我做错了什么?

            child: Row(
              children: [
                        kIsWeb
                          ? Container(
                          child: Image.network(_imageFileList![index].path))
                          : Container(
                          child: Image.file(File(_imageFileList![index].path)));
                    }
                ),
              ],
            ),

请帮忙。

**用我的完整小部件编辑了上面的代码

admin 更改状态以发布 2023年5月24日
0
0 Comments

成功解决了我的问题。这与需要添加的高度约束有关。在这个链接中找到了解决方案:

如何在Flutter中将ListView添加到Column中?

0
0 Comments

要么使用Row,要么使用ListView,不要同时使用两者。

您可以使用List.generate创建一个带有Row的组件:

Row(
  children: List.generate(_imageFileList!.length, 
    (i) => kIsWeb
         ? Container(child: Image.network(_imageFileList![index].path))
         : Container(child: Image.file(File(_imageFileList![index].path))
),

或者使用原来的ListView组件,不需要RowListView可能是您要使用的组件。当内容大于宽度时,Row会溢出,而ListView将在这种情况下充当其自己的ScrollView。

我还建议您仔细检查是否需要那个Expanded部件。通常是在Row(或类似的小部件)内使用的。

0