Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter ListView实现_Flutter - Fatal编程技术网

Flutter ListView实现

Flutter ListView实现,flutter,Flutter,请帮助我或给我一个如何实现上述图像的想法。我计划使用ListView。下面是我的示例代码,但这是在水平滚动 Widget build(BuildContext context) { return Container( height: 210, color: Theme.of(context).primaryColor, padding: EdgeInsets.symmetric(vertical: 10), child: ListView.builder(

请帮助我或给我一个如何实现上述图像的想法。我计划使用ListView。下面是我的示例代码,但这是在水平滚动

Widget build(BuildContext context) {
return Container(
    height: 210,
    color: Theme.of(context).primaryColor,
    padding: EdgeInsets.symmetric(vertical: 10),
    child: ListView.builder(
      itemCount: _foodsList.featuredList.length,
      itemBuilder: (context, index) {
        double _marginLeft = 0;
        (index == 0) ? _marginLeft = 20 : _marginLeft = 0;
        return FoodsCarouselItemWidget(
          heroTag: 'home_food_carousel',
          marginLeft: _marginLeft,
          food: _foodsList.featuredList.elementAt(index),
        );
      },
      scrollDirection: Axis.horizontal,
    ));
}
}

您需要在ListView的itemBuilder属性中构建布局。如果您想将文本放置在图像上,最好的布局小部件是Stack

为了获得颤振布局系统,请参见以下内容:

有关所有可用的布局小部件,请参见:

和堆栈:

类似这样的内容:
newstack(
儿童:[
新定位填充(
孩子:新法代尼玛(
占位符:新AssetImage('placeholder.png'),
图像:新的CachedNetworkImageProvider(照片[int].url),
适合:BoxFit.contain,
对齐:对齐.center,
fadeInDuration:新持续时间(毫秒:200),
fadeInCurve:曲线。线性,
),
),
新定位(
排名:10.0,
左:10.0,
子容器:新容器(
子项:新文本(照片[int]。标题)
),
),
],

)

我已经尽了最大努力实现了同样的目标,但由于时间问题,您可能会发现有些不同

使用的软件包:
https://pub.dev/packages/cached_network_image#-安装选项卡-

这是完整的代码

import'package:cached_network_image/cached_network_image.dart';
进口“包装:颤振/材料.省道”;
类Demo扩展StatefulWidget{
@凌驾
_演示createState()=>_Demo();
}
类_Demo扩展了状态{
小部件foodsCarouselItemWidget(){
返回列(子项:[
尺寸箱(高度:10),
容器(
填充:边缘设置。全部(12),
装饰:盒子装饰(
boxShadow:[
箱形阴影(
颜色:颜色。黑色,
半径:15.0,
)
],
颜色:颜色,白色,
borderRadius:borderRadius.all(半径.圆形(5.0)),
),
子级:行(crossAxisAlignment:crossAxisAlignment.start,子级:<
小部件>[
容器(
身高:130,
宽度:130,
子:堆栈(
儿童:[
CachedNetworkImage(
宽度:150,
身高:130,
图像URL:
"https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcQt46Q_GYs7kSq21kdBlNcD9pZzHVtl8nwNkY5f9GaR3rTbPOMf",
imageBuilder:(上下文,imageProvider)=>容器(
装饰:盒子装饰(
图像:装饰图像(
图像:imageProvider,尺寸:BoxFit.cover),
borderRadius:borderRadius.all(半径圆形(10.0)),
),
),
),
定位(
右:10,,
底部:5,
子对象:行(子对象:[
图标(Icons.playlist\u add\u check,
颜色:彩色。白色,尺码:18),
尺寸箱(宽度:3),
文本(“190”,
样式:TextStyle(颜色:Colors.white,字体大小:12))
])),
],
),
),
尺寸箱(宽度:15),
扩大(
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本(“此处食物名称”,
样式:TextStyle(
颜色:颜色(0xFF4545),
尺码:18,
fontWeight:fontWeight.bold),
尺寸箱(高度:10),
世界其他地区(儿童:[
图标(Icons.location_on,颜色:color(0xff777777),大小:18),
尺寸箱(宽度:5),
扩大(
子项:文本(“在此处添加您的位置”,
样式:TextStyle(
字体大小:13,颜色:颜色(0xff777777)))
]),
尺寸箱(高度:5),
世界其他地区(儿童:[
图标(Icons.local_提供,颜色:颜色(0xFF7777),尺寸:18),
尺寸箱(宽度:5),
扩大(
孩子:文本(“辛辣,美味”,
样式:TextStyle(
字体大小:13,颜色:颜色(0xff777777)))
]),
尺寸箱(高度:15),
世界其他地区(儿童:[
扩大(
弹性:1,
子:容器(
装饰:盒子装饰(
颜色:颜色。红色[900],
边界半径:
边界半径所有(半径圆形(5.0)),
填充:边缘设置。全部(10),
子:文本(
“按钮文本”,
样式:TextStyle(
颜色:颜色,白色,
fontWeight:fontWeight.bold),
textAlign:textAlign.center,
),
)),
尺寸箱(宽度:7),
容器(
装饰:盒子装饰(
边框:border.all(颜色:Colors.red[900]),
borderRadius:borderRadius.all(半径.圆形(5.0)),
填充:边缘设置。全部(5),
儿童:
图标(Icons.bookmark_边框,颜色:Colors.red[900]),
)
])
]))
])),
尺寸箱(高度:10)
]);
}
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';

class Demo extends StatefulWidget {
  @override
  _Demo createState() => _Demo();
}

class _Demo extends State<Demo> {
  Widget foodsCarouselItemWidget() {
    return Column(children: <Widget>[
      SizedBox(height: 10),
      Container(
          padding: EdgeInsets.all(12),
          decoration: BoxDecoration(
            boxShadow: [
              BoxShadow(
                color: Colors.black12,
                blurRadius: 15.0,
              )
            ],
            color: Colors.white,
            borderRadius: BorderRadius.all(Radius.circular(5.0)),
          ),
          child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: <
              Widget>[
            Container(
              height: 130,
              width: 130,
              child: Stack(
                children: <Widget>[
                  CachedNetworkImage(
                    width: 150,
                    height: 130,
                    imageUrl:
                        "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcQt46Q_GYs7kSq21kdBlNcD9pZzHVtl8nwNkY5f9GaR3rTbPOMf",
                    imageBuilder: (context, imageProvider) => Container(
                      decoration: BoxDecoration(
                        image: DecorationImage(
                            image: imageProvider, fit: BoxFit.cover),
                        borderRadius: BorderRadius.all(Radius.circular(10.0)),
                      ),
                    ),
                  ),
                  Positioned(
                      right: 10,
                      bottom: 5,
                      child: Row(children: <Widget>[
                        Icon(Icons.playlist_add_check,
                            color: Colors.white, size: 18),
                        SizedBox(width: 3),
                        Text("190",
                            style: TextStyle(color: Colors.white, fontSize: 12))
                      ])),
                ],
              ),
            ),
            SizedBox(width: 15),
            Expanded(
                child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                  Text("Food title here",
                      style: TextStyle(
                          color: Color(0xff454545),
                          fontSize: 18,
                          fontWeight: FontWeight.bold)),
                  SizedBox(height: 10),
                  Row(children: <Widget>[
                    Icon(Icons.location_on, color: Color(0xff777777), size: 18),
                    SizedBox(width: 5),
                    Expanded(
                        child: Text("Add your location here",
                            style: TextStyle(
                                fontSize: 13, color: Color(0xff777777))))
                  ]),
                  SizedBox(height: 5),
                  Row(children: <Widget>[
                    Icon(Icons.local_offer, color: Color(0xff777777), size: 18),
                    SizedBox(width: 5),
                    Expanded(
                        child: Text("Spicy, Delicious",
                            style: TextStyle(
                                fontSize: 13, color: Color(0xff777777))))
                  ]),
                  SizedBox(height: 15),
                  Row(children: <Widget>[
                    Expanded(
                        flex: 1,
                        child: Container(
                          decoration: BoxDecoration(
                              color: Colors.red[900],
                              borderRadius:
                                  BorderRadius.all(Radius.circular(5.0))),
                          padding: EdgeInsets.all(10),
                          child: Text(
                            "Button Text",
                            style: TextStyle(
                                color: Colors.white,
                                fontWeight: FontWeight.bold),
                            textAlign: TextAlign.center,
                          ),
                        )),
                    SizedBox(width: 7),
                    Container(
                      decoration: BoxDecoration(
                          border: Border.all(color: Colors.red[900]),
                          borderRadius: BorderRadius.all(Radius.circular(5.0))),
                      padding: EdgeInsets.all(5),
                      child:
                          Icon(Icons.bookmark_border, color: Colors.red[900]),
                    )
                  ])
                ]))
          ])),
      SizedBox(height: 10)
    ]);
  }

  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Color(0xfff3f3f3),
        appBar: AppBar(backgroundColor: Colors.red[900], title: Text("DEMO")),
        body: ListView.builder(
          padding: EdgeInsets.symmetric(vertical: 20, horizontal: 20),
          itemCount: 4,
          itemBuilder: (context, index) {
            return foodsCarouselItemWidget();
          },
        ));
  }
}