繁体   English   中英

ListView.builder 在 alertDialog 中不起作用

[英]ListView.builder doesn't work in alertDialog

我使用 ListView.builder 来显示图像。 当我在主页中显示它时它是有效的,但是当我在 alertDialog 中使用它时它根本不起作用。 这是我的 alertDialog 代码。

void rateVideo(BuildContext context){
var alertDialog = AlertDialog(
  title: Text("video rate"),
  content: RateClip(),
  actions: <Widget>[
          FlatButton(
              child: Text('ok'),
              onPressed: () {
                //rateVideo(context);
                Navigator.of(context).pop();
              }),
        ],
);
showDialog(context: context,
builder: (BuildContext context){
  return alertDialog;
}
);
}

这段代码是关于我尝试显示图像的 ListView.builder

class RateClip extends StatelessWidget {
//const ActivityClip ({Key key}) : super(key: key);
final List<String> pic = [
 'assets/images/LG5.png',
 'assets/images/stress.png',
 'assets/images/stress.png',
 'assets/images/normal.png',
 'assets/images/happy.png'
];

@override
Widget build(BuildContext context) {
return Container(
    height: 60,
    child: ListView.builder(
        scrollDirection: Axis.horizontal,
        itemCount: pic.length,
        itemBuilder: (context, index) {
          return Container(
              width: 30,
              child: ListView(
                scrollDirection: Axis.horizontal,
                children: <Widget>[
                  InkWell(
                    onTap: () {
                    },
                    child: Image.asset(pic[index].toString(), height: 30, width: 30),
                  )]));
        }));  
       }



       }

这是我的新代码

class RateClip extends StatelessWidget {
//const ActivityClip ({Key key}) : super(key: key);
final List<String> pic = [
'assets/images/LG5.png',
'assets/images/stress.png',
'assets/images/stress.png',
'assets/images/normal.png',
'assets/images/happy.png'
];

@override
Widget build(BuildContext context) {
return Container(
    //margin: const EdgeInsets.only(right: 10, left: 10, top: 200),
    height: 60,
    //width: 40,
    child: ListView.builder(
        scrollDirection: Axis.horizontal,
        itemCount: pic.length,
        itemBuilder: (context, index) {
          return  InkWell(
                    onTap: () {
                    },
                    child: Image.asset(pic[index].toString(), height: 30, width: 30),
                  );
        }));  
        }



       }

从错误中可以看出,它是警报对话框的断言错误。 警告对话框中的元素必须是特定的宽度,您可以在日志中看到。 它根据设备而变化。

因此,要解决您的错误,您必须提供容器的特定宽度,它位于列表视图上方。 更具体地说,这是因为您的列表视图是水平的并将宽度设置为无穷大,这就是它抛出断言错误的原因。 如果是垂直列表视图,那么您必须提供容器的高度。

@override
  Widget build(BuildContext context) {
    return Container(
      width: MediaQuery.of(context).size.width*0.75 // here i set width of container to 75% of screen 
      child: ListView.builder(
        scrollDirection: Axis.horizontal,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM