Firebase 建筑生成器(脏)引发了以下RangeError:
背景: 我正在尝试创建一个带有flatter的动态滑块,它将获得Firebase url,用于形成漫画的图像,并将其放入Firebase 建筑生成器(脏)引发了以下RangeError:,firebase,flutter,dart,Firebase,Flutter,Dart,背景: 我正在尝试创建一个带有flatter的动态滑块,它将获得Firebase url,用于形成漫画的图像,并将其放入旋转木马,我处理了空返回和空返回,但它一直在我的应用程序中显示无效索引的错误 错误: ════════ Exception caught by widgets library ═══════════════════════════════════════════════════════ The following RangeError was thrown building B
旋转木马
,我处理了空返回和空返回,但它一直在我的应用程序中显示无效索引的错误
错误:
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following RangeError was thrown building Builder(dirty):
RangeError (index): Invalid value: Valid value range is empty: 0
The relevant error-causing widget was:
Builder file:///Users/murilopazzini/Documents/Projs/SchoolsOut_Dev/schools_out/lib/components/hqSlider.dart:55:24
When the exception was thrown, this was the stack:
#0 List.[] (dart:core-patch/growable_array.dart:149:60)
#1 _hqSliderState.build.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:schools_out/components/hqSlider.dart:72:61)
#2 Builder.build (package:flutter/src/widgets/basic.dart:6757:41)
#3 StatelessElement.build (package:flutter/src/widgets/framework.dart:4291:28)
#4 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4223:15)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
════════ widgets库捕获到异常═══════════════════════════════════════════════════════
建筑生成器(脏)引发了以下RangeError:
RangeError(索引):无效值:有效值范围为空:0
导致错误的相关小部件是:
建设者file:///Users/murilopazzini/Documents/Projs/SchoolsOut_Dev/schools_out/lib/components/hqSlider.dart:55:24
引发异常时,这是堆栈:
#0列表。[](dart:core patch/Growtable_阵列。dart:149:60)
#1_hqSliderState.构建。。。(包装:学校/部件/总部滑道.省道:72:61)
#2 Builder.build(包:flatter/src/widgets/basic.dart:6757:41)
#3.statelement.build(包:flatter/src/widgets/framework.dart:4291:28)
#4 ComponentElement.performRebuild(包:flatter/src/widgets/framework.dart:4223:15)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
霍姆·达特
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:schools_out/pages/comicsPage.dart';
import 'package:schools_out/components/hqSlider.dart';
import 'package:schools_out/entities/comics.dart';
import 'package:schools_out/entities/comicsPage.dart';
class Homepage extends StatefulWidget {
@override
_HomepageState createState() => _HomepageState();
}
class _HomepageState extends State<Homepage>
with SingleTickerProviderStateMixin {
Animation animation;
AnimationController animationController;
@override
void initState() {
// super.initState();
animationController =
new AnimationController(duration: Duration(seconds: 200), vsync: this);
animation =
IntTween(begin: 0, end: photos.length - 1).animate(animationController)
..addListener(() {
setState(() {
index = animation.value;
});
});
animationController.repeat(period: Duration(seconds: 20));
}
int index = 0;
List<String> photos = [
'https://i.ibb.co/kc1mjTW/abduc-a-o-55-1.png',
'https://i.ibb.co/nmFdgs8/abduc-a-o-55-2.jpg'
];
@override
void dispose() {
// TODO: implement dispose
super.dispose();
animationController.dispose();
}
@override
Widget build(BuildContext context) {
ComicsList(Comics clist) => InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ComicsReadingPage(
comics: clist,
)),
);
},
child: PopularHq(
image: clist.pages[0].image,
name: clist.name,
));
bestm(BMovies movie) => HqWidget(
image: movie.Image,
);
final comics_scroll = Container(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
physics: BouncingScrollPhysics(),
child: Row(
children: comicsList.map((cl) => ComicsList(cl)).toList(),
),
),
);
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
iconTheme: new IconThemeData(color: Colors.blueGrey[600]),
centerTitle: true,
title: Text(
"Schools Out",
style: TextStyle(color: Colors.blueGrey[600], fontSize: 28),
),
backgroundColor: Colors.white,
// leading:Icon(Icons.notifications,color: Colors.red,) ,
// toolbarOpacity: 0,
),
drawer: new Drawer(
child: ListView(
children: <Widget>[
new UserAccountsDrawerHeader(
accountName: new Text('Test User'),
accountEmail: new Text('testemail@test.com'),
currentAccountPicture: new CircleAvatar(
backgroundImage: new NetworkImage('http://i.pravatar.cc/300'),
),
),
new ListTile(
title: new Text('Test Navigation'),
onTap: () {
Navigator.of(context).pop();
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) => new Homepage()));
},
),
],
),
),
body: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: <Widget>[
Container(
color: Colors.white,
child: Column(
children: <Widget>[
ImageData(photos[index]),
// TopMovies()
],
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
// crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"HQ's",
style: TextStyle(
fontWeight: FontWeight.w900,
fontSize: 16,
color: Colors.blueGrey),
),
SizedBox(
width: 180,
),
],
),
),
hqSlider(),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
// crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Tirinhas",
style: TextStyle(
fontWeight: FontWeight.w900,
fontSize: 16,
color: Colors.blueGrey),
),
SizedBox(
width: MediaQuery.of(context).size.width * 0.65,
),
Text(
"See All",
style: TextStyle(
fontWeight: FontWeight.w900,
fontSize: 16,
color: Colors.blueGrey),
)
],
),
),
comics_scroll
],
),
));
}
}
class ImageData extends StatelessWidget {
String image;
ImageData(this.image);
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
height: 180,
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage(image),
fit: BoxFit.cover,
),
borderRadius: BorderRadius.circular(8.0)),
child: Align(
alignment: Alignment.bottomCenter,
),
);
}
}
class HqWidget extends StatelessWidget {
final String image;
HqWidget({Key key, this.image});
@override
Widget build(BuildContext context) {
// TODO: implement build
return Padding(
padding: const EdgeInsets.all(8.0),
child: ClipOval(
child: Container(
height: 60,
width: 60,
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage(image),
fit: BoxFit.cover,
),
borderRadius: BorderRadius.circular(12.0),
boxShadow: [
BoxShadow(
offset: Offset(0.5, 1.0),
blurRadius: 5,
color: Colors.white)
]),
),
),
);
}
}
////////////////////////////////////////////
class PopularHq extends StatelessWidget {
String image, name;
PopularHq({this.image, this.name});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: InkWell(
child: Column(
children: <Widget>[
Container(
height: 140,
width: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage(image),
fit: BoxFit.cover,
),
borderRadius: BorderRadius.circular(6.0),
boxShadow: [
BoxShadow(
offset: Offset(0.5, 1.0),
blurRadius: 5,
color: Colors.white)
]),
),
Container(
//width: 100,
//height: 40,
child: Text(
name,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w600,
color: Colors.white),
),
),
],
),
),
);
}
}
////////////////////////////////////////////
final List<Comics> comicsList = [
Comics('Teste', 1, [
ComicsPage('https://i.ibb.co/nmFdgs8/abduc-a-o-55-2.jpg', 1),
ComicsPage('https://i.ibb.co/kc1mjTW/abduc-a-o-55-1.png', 2),
]),
Comics('Teste 2', 2, [
ComicsPage('https://i.ibb.co/nmFdgs8/abduc-a-o-55-2.jpg', 1),
ComicsPage('https://i.ibb.co/kc1mjTW/abduc-a-o-55-1.png', 2),
]),
Comics('Teste 3', 3, [
ComicsPage('https://i.ibb.co/nmFdgs8/abduc-a-o-55-2.jpg', 1),
ComicsPage('https://i.ibb.co/kc1mjTW/abduc-a-o-55-1.png', 2),
]),
];
class BMovies {
String Image;
int Boxc;
BMovies(this.Image);
}
import'package:firebase_auth/firebase_auth.dart';
进口“包装:颤振/材料.省道”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“package:schools_out/pages/ComicPage.dart”;
导入“包:学校/组件/总部滑道.省道”;
导入“package:schools_out/entities/comics.dart”;
导入“包:schools_out/entities/ComicPage.dart”;
类主页扩展了StatefulWidget{
@凌驾
_HomepageState createState()=>\u HomepageState();
}
类_HomepageState扩展状态
使用SingleTickerProviderStateMixin{
动画;
动画控制器;
@凌驾
void initState(){
//super.initState();
动画控制器=
新的AnimationController(持续时间:持续时间(秒数:200),vsync:this);
动画=
IntTween(开始:0,结束:photos.length-1)。动画(animationController)
…addListener(){
设置状态(){
索引=animation.value;
});
});
重复(周期:持续时间(秒:20));
}
int指数=0;
列出照片=[
'https://i.ibb.co/kc1mjTW/abduc-a-o-55-1.png',
'https://i.ibb.co/nmFdgs8/abduc-a-o-55-2.jpg'
];
@凌驾
无效处置(){
//TODO:实现dispose
super.dispose();
animationController.dispose();
}
@凌驾
小部件构建(构建上下文){
漫画列表(漫画客户端)=>InkWell(
onTap:(){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>ComicReadingPage(
漫画:克莱斯特,
)),
);
},
儿童:PopularHq(
图像:clist.pages[0]。图像,
姓名:clist.name,
));
bestm(BMovies电影)=>HqWidget(
影像:电影,影像,
);
最终漫画卷=容器(
子:SingleChildScrollView(
滚动方向:轴水平,
物理:弹跳CrollPhysics(),
孩子:排(
子项:ComicList.map((cl)=>ComicList(cl)).toList(),
),
),
);
返回脚手架(
背景颜色:Colors.white,
appBar:appBar(
iconTheme:new IconThemeData(颜色:Colors.blueGrey[600]),
标题:对,
标题:正文(
“学校出局”,
样式:TextStyle(颜色:Colors.blueGrey[600],字体大小:28),
),
背景颜色:Colors.white,
//前导:图标(图标。通知,颜色:Colors.red,),
//不透明度:0,
),
抽屉:新抽屉(
子:ListView(
儿童:[
新用户帐户DrawerHeader(
accountName:新文本(“测试用户”),
accountEmail:新文本('testemail@test.com'),
currentAccountPicture:新CircleAvatar(
背景图片:新的网络图片('http://i.pravatar.cc/300'),
),
),
新ListTile(
标题:新文本(“测试导航”),
onTap:(){
Navigator.of(context.pop();
导航器。推(
上下文
新材料路线(
生成器:(BuildContext context)=>new Homepage());
},
),
],
),
),
正文:SingleChildScrollView(
物理:弹跳CrollPhysics(),
子:列(
儿童:[
容器(
颜色:颜色,白色,
子:列(
儿童:[
图像数据(照片[索引]),
//热门电影()
],
),
),
填充物(
填充:常数边集全部(8.0),
孩子:排(
//crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
“总部”,
样式:TextStyle(
fontWeight:fontWeight.w900,
尺寸:16,
颜色:颜色。蓝灰色),
),
大小盒子(
宽度:180,
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:schools_out/pages/comicsPage.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:schools_out/entities/comicsPage.dart';
import 'package:schools_out/entities/comics.dart';
import 'dart:async';
class hqSlider extends StatefulWidget {
@override
_hqSliderState createState() => _hqSliderState();
}
class _hqSliderState extends State<hqSlider> {
Future getComics() async {
var firestore = Firestore.instance;
QuerySnapshot qn = await firestore.collection("comics").getDocuments();
return qn.documents;
}
@override
Widget build(BuildContext context) {
List<Comics> hqList = new List<Comics>();
return FutureBuilder(
future: getComics(),
builder: (_, snapshot) {
if (snapshot.data == null) {
return Center(
child: Text("Loading ..."),
);
} else if(snapshot.data.length > 0){
hqList.clear();
List<ComicsPage> pagesForThisHq = new List<ComicsPage>();
snapshot.data.forEach((element) {
element.data['pages'].forEach((page) {
pagesForThisHq.add(ComicsPage(page['image'].toString(), page['page']));
});
hqList.add(
Comics(element.data['name'], element.data['edition'], pagesForThisHq));
pagesForThisHq.clear();
});
return CarouselSlider(
autoPlay: true,
viewportFraction: 0.9,
aspectRatio: 2.4,
enlargeCenterPage: false,
items: hqList.map((hq) {
return Builder(
builder: (BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: GestureDetector(onTap: () {
Navigator.push<Widget>(
context,
MaterialPageRoute(
builder: (context) => ComicsReadingPage(
comics: hq,
),
),
);
}),
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage(hq.pages[0].image),
fit: BoxFit.cover),
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
offset: Offset(0.2, 1.0),
blurRadius: 2,
color: Colors.grey)
]),
),
);
},
);
//////
}).toList());
} else {
return Center(
child: Text("No Content ..."),
);
}
},
);
}
}
import 'package:schools_out/entities/comicsPage.dart';
class Comics {
List<ComicsPage> pages;
String name;
int edition;
Comics(this.name, this.edition, this.pages);
}
class ComicsPage {
String image;
int page;
ComicsPage(this.image, this.page);
}
pagesForThisHq.clear();