Listview выдает ошибку при прокрутке

#flutter #dart

#flutter #dart

Вопрос:

Отредактировано: эта ошибка возникает только на IOS-устройствах, на Android проблем нет.

Когда я прокручиваю свой AlertDialog, обнаруживается ошибка RangeError. У меня больше AlertDialogs с обычным текстом, и такой проблемы нет. Во время прокрутки ошибка выдается постоянно. Я знаю, что есть похожие вопросы, но все они используют конструктор и могут определять количество элементов.

                showDialog(
                  context: context,
                  builder: (BuildContext context) {
                    return AlertDialog(
                      elevation: 20,
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(15.0),
                      ),
                      content: Container(
                        width: double.maxFinite,
                        height: 130,
                        child: ListView(children: <Widget>[
                          
                          RichText(
                              text: TextSpan(children: [
                            TextSpan(
                                text: 'Feedback:',
                                style: TextStyle(color: Colors.black)),
                            TextSpan(
                                text: "n",
                                style: TextStyle(color: Colors.black)),
                            WidgetSpan(
                                child: Icon(
                              Icons.email,
                              size: 15,
                            )),
                            TextSpan(
                                text:
                                    '  email@outlook.com'   "n",
                                style: TextStyle(color: Colors.black)),
                            TextSpan(
                                text: "n",
                                style: TextStyle(color: Colors.black)),
                            TextSpan(
                                text: 'Updates:',
                                style: TextStyle(color: Colors.black)),
                            TextSpan(
                                text: "n",
                                style: TextStyle(color: Colors.black)),
                            WidgetSpan(
                                child: Icon(
                              Icons.link,
                              size: 15,
                            )),
                            TextSpan(
                                text: '  ',
                                style: TextStyle(color: Colors.black)),
                            TextSpan(
                                style: TextStyle(
                                  color: Colors.blue,
                                  decoration: TextDecoration.underline,
                                ),
                                text: 'Instagram'   "n",
                                recognizer: TapGestureRecognizer()
                                  ..onTap = () async {
                                    var url =
                                        "https://www.instagram.com/";
                                    if (await canLaunch(url)) {
                                      await launch(url);
                                    } else {
                                      throw "Cannot load Url";
                                    }
                                  }),
                            TextSpan(
                                text: "n",
                                style: TextStyle(color: Colors.black)),
                            TextSpan(
                                text: 'Support',
                                style: TextStyle(color: Colors.black)),
                            TextSpan(
                                text: "n",
                                style: TextStyle(color: Colors.black)),
                            WidgetSpan(
                                child: Icon(
                              Icons.payment,
                              size: 15,
                            )),
                            TextSpan(
                                text: '  ',
                                style: TextStyle(color: Colors.black)),
                            TextSpan(
                                style: TextStyle(
                                  color: Colors.blue,
                                  decoration: TextDecoration.underline,
                                ),
                                text: 'Paypal',
                                recognizer: TapGestureRecognizer()
                                  ..onTap = () async {
                                    var url =
                                        "https://www.paypal.me/";
                                    if (await canLaunch(url)) {
                                      await launch(url);
                                    } else {
                                      throw "Cannot load Url";
                                    }
                                  }),
                          ]))
                        ]),
                      ),
                    );
                  });
 

После ошибки и трассировки стека:

 ======== Exception caught by scheduler library =====================================================
The following RangeError was thrown during a scheduler callback:
RangeError (index): Invalid value: Valid value range is empty: 0

When the exception was thrown, this was the stack: 
#0      List.[] (dart:core-patch/growable_array.dart:177:60)
#1      List.elementAt (dart:core-patch/growable_array.dart:386:16)
#2      RenderParagraph.assembleSemanticsNode (package:flutter/src/rendering/paragraph.dart:921:50)
#3      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:3717:13)
#4      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:3709:16)
...
 

Все остальное работает просто отлично.Спасибо за помощь!

Комментарии:

1. Не уверен, что это происходит. Предложение: поскольку у вас есть только один виджет внутри ListView , попробуйте заменить ListView на SingleChildScrollView .

2. @RohanTaneja Я пробовал это с помощью SingleChildScrollView, но разницы нет… та же ошибка.

3. протестировал ваш фрагмент, он работал так, как ожидалось. вы уверены, что это код, вызывающий ошибку?

4. попробуйте использовать shrinkWrap: true внутри ListView.

5. @RohanTaneja спасибо за тестирование… Я узнал, что ошибка появляется только на устройствах IOS. Почему этот фрагмент работает на Android, но не на IOS?