#android #flutter #dart #flutter-layout
#Android #flutter #дротик #flutter-layout
Вопрос:
Я получаю ошибку диапазона при запуске моего кода. Я просто хочу показать элементы на моем главном экране, но он показывает ошибку. Пожалуйста, помогите мне. Заранее большое вам спасибо. Я не знаю, откуда я получаю эту ошибку. Вот мой вывод ошибки.
Exception caught by widgets library ═══════════════════════════════════════════════════════
The following RangeError was thrown building HomeScreen(dirty, dependencies: [MediaQuery, _InheritedTheme, _LocalizationsScope-[GlobalKey#4b453]]):
RangeError (index): Invalid value: Not in range 0..3, inclusive: 4
The relevant error-causing widget was:
HomeScreen file:///C:/Project/ur_info/lib/WelcomeScreen/WelcomeScreen.dart:56:45
When the exception was thrown, this was the stack:
#0 List.[] (dart:core-patch/growable_array.dart:146:60)
#1 HomeScreen.build (package:urinfo/Home/home.dart:72:45)
#2 StatelessElement.build (package:flutter/src/widgets/framework.dart:4576:28)
#3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4502:15)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
...
Вот мой код
Home.Dart
import 'package:flutter/widgets.dart';
import 'package:flutter/material.dart';
import 'package:urinfo/Home/items.dart';
import 'Events.dart';
import 'categories.dart';
class HomeScreen extends StatelessWidget {
final url;
final Events events;
const HomeScreen({Key key, this.url, this.events}) : super(key: key);
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return SafeArea(
child: Scaffold(
backgroundColor: Colors.pink[50],
body: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.pink[50]
),
child: Padding(
padding: EdgeInsets.only(left: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(height: size.height*0.05 ),
Center(
child: RichText(
text: TextSpan(
style: Theme.of(context).textTheme.headline5,
children: [
TextSpan(text: "Hello Welcome Back Pratul", style: TextStyle(fontWeight: FontWeight.bold))
]
),
),
),
SizedBox(height: 10),
Center(child: Text("Categories", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20, color: Colors.indigo),)),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Padding(
padding: EdgeInsets.only(top: 10),
child: Row(
children: <Widget>[
Categories (
name: "Btech", imageurl: "assets/icons/Btech.svg",),
Categories (
name: "BA Hons.", imageurl: "assets/icons/Bahons.svg",),
Categories (
name: "Pharmacy", imageurl: "assets/icons/nursing.svg",),
Categories (
name: "Business", imageurl: "assets/icons/Business.svg",),
],
),
),
),
SizedBox(height: size.height*.12,),
Center(child: Text("Upcomming Events", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20, color: Colors.indigo),)),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Padding(
padding: const EdgeInsets.only(top: 15, right: 10),
child: Row(
children: <Widget>[
Events(item: items[items.length]),
SizedBox(width: 15)],
),
),
)
],
),
),
),
),
),
);
}
}
События.Dart
import 'package:flutter/material.dart';
import 'package:urinfo/webview.dart';
import 'items.dart';
class Events extends StatelessWidget {
final Item item;
const Events({Key key, this.item}) : super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (context)=> Webview()));
},
child: Container(
width: 120,
height: 170,
child: Stack(
children: <Widget>[
Container(
height: 150,
decoration: BoxDecoration(
color: item.color,
borderRadius: BorderRadius.circular(20)
),
),
Column(
children: <Widget>[
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20)
),
child: Padding(
padding: const EdgeInsets.only(top: 5, left: 5, right: 5),
child: Image.asset(item.imageurl, fit: BoxFit.cover, width: 100,),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Center(child: Text(item.name, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18, color: Colors.white),)),
)
],
),
],
),
),
);
}
}
Items.dart
import 'package:flutter/material.dart';
class Item {
final String imageurl, name, weburl;
final int id;
final Color color;
Item({this.color, this.imageurl, this.name, this.weburl, this.id});
}
List<Item> items=[
Item(
id: 0,
imageurl: "assets/images/Dexterix.jpg",
name: "Dexterix",
weburl: "https://dexterix.tech/",
color: Colors.black,
),
Item(
id: 1,
imageurl: "assets/images/space apps.jpg",
name: "Space Apps",
weburl: "https://dexterix.tech/",
color: Colors.black,
),
Item(
id: 2,
imageurl:"assets/images/books.jpg",
name: "Books Show",
weburl: "https://dexterix.tech/",
color: Colors.yellow[200],
),
Item(
id: 3,
imageurl: "assets/images/SIH.png",
name: "SIH",
weburl: "https://dexterix.tech/",
color: Colors.white10,
),
];
WelcomeScreen.dart
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:introduction_screen/introduction_screen.dart';
import '../Home/home.dart';
class WelcomeScreen extends StatefulWidget {
@override
_WelcomeScreenState createState() => _WelcomeScreenState();
}
class _WelcomeScreenState extends State<WelcomeScreen> {
List<PageViewModel> getPages() {
return [
PageViewModel(
image: Image.asset("assets/images/Welcom.png"),
title: ('Welcome To Ur Info'),
body: "Your Own Info App",
footer: Text("Lets Get Started"),
decoration: PageDecoration(pageColor: Colors.lightBlue[50])
),
PageViewModel(
image: Image.asset("assets/images/Exams.png"),
title: ('Get Your Exams Details'),
body: "Download your admit cards amp; other details",
footer: Text(""),
decoration: PageDecoration(pageColor: Colors.green[100])
), PageViewModel(
image: Image.asset("assets/images/Events.png"),
title: ('Track all the upcomming Events'),
body: "No need to worry about events",
footer: Text(""),
decoration: PageDecoration(pageColor: Colors.yellow[50])
), PageViewModel(
image: Image.asset("assets/images/study.png"),
title: ('Daily Feeds on Exams amp; Syllabus'),
body: "Provides daily news related to education",
footer: Text(""),
),
];
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: IntroductionScreen(
globalBackgroundColor: Colors.pink[50],
pages: getPages(),
onSkip: (){
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomeScreen()
));
},
onDone: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomeScreen()
));
},
showSkipButton: true,
showNextButton: true,
dotsDecorator: DotsDecorator(
color: Colors.pink,
activeColor: Colors.blueAccent[700],
),
dotsFlex: 1,
skip: Text('Skip'),
next: Text('Next'),
done: Text('Get Started'),
)
),
);
}
}
Комментарии:
1. Не создавайте фрагменты, когда для этого нет цели, и не добавляйте теги, которые не имеют отношения к вашему вопросу.
Ответ №1:
Я нашел трюк, который работает для меня, когда сталкиваюсь с ошибкой RangeError (index): Недопустимое значение: не в диапазоне 0 .. 3 включительно: 4 в Flutter.
По-видимому, случается, что прокрутка, прикрепленная к listview, выполняется слишком быстро, вплоть до превышения длины массива на одну единицу.
Сначала я добавляю ItemCount: элементы.длина, затем в itemBuilder и перед возвратом я вставляю это: if (index> = items.длина) {возвращает const за кулисами (); }
Полный пример:
DisplayItemsList () Widget {
final widget = ListView.builder (
physics: ScrollPhysics (),
reverse: reverse,
shrinkWrap: true,
controller: scrollControllerClientsList,
itemCount:items.length,
itemBuilder: (_, index) {
log ('displayItemsList: itemBuilder: index: $ index');
if (index> = items.length) {
return const Offstage ();
}
return displayOneOiLine (index);
},
);
Ответ №2:
Товары.длина == 4, в то время как списки всегда начинаются с индекса 0. Поэтому он попытается найти элемент с индексом 1 по индексу 4. Я рекомендую использовать элементы.длина — 1.
Комментарии:
1. Спасибо за ваш ответ, но элементы. длина-1 показывает только последний элемент. Все 4 элемента не отображаются.
2. Это потому, что вы отображаете только один элемент. Проверьте виджет ListView, чтобы отобразить их все.
3. Я добавил свой код, не могли бы вы сказать мне, откуда возникает эта ошибка? и какие изменения я могу внести, чтобы устранить ошибку. Спасибо.