ListView.builder не работает в alertDialog - PullRequest
0 голосов
/ 13 апреля 2020

Я использую 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),
                  )]));
        }));  
       }



       }

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Как видно из ошибки, это ошибка подтверждения диалога предупреждения. Элемент в диалоге оповещения должен быть указан c width, который вы можете увидеть в журнале. оно меняется в зависимости от устройства.

Поэтому, чтобы решить вашу ошибку, вы должны указать конкретную c ширину контейнера, которая находится над списком. Чтобы быть более точным c, это потому, что ваш просмотр списка горизонтален и устанавливает ширину в бесконечность, и именно поэтому он выдает ошибку подтверждения. Если это был вертикальный просмотр списка, вы должны указать высоту контейнера.

@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,
0 голосов
/ 13 апреля 2020

вот мой новый код

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),
                  );
        }));  
        }



       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...