使用Flutter中的Listview.builder时,未显示我的图像
使用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日
要么使用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
组件,不需要Row
。 ListView
可能是您要使用的组件。当内容大于宽度时,Row
会溢出,而ListView
将在这种情况下充当其自己的ScrollView。
我还建议您仔细检查是否需要那个Expanded
部件。通常是在Row
(或类似的小部件)内使用的。