#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?