在flutter中,我使用ListViewBuilder,我得到的_numberOfAlbum计数是27,我可以在屏幕上看到27个项目。当我上下滚动时,屏幕突然变黑,似乎它一直在试图渲染数据。我得到的错误:
The following _TypeError was thrown building FutureBuilder<Album?>(dirty, state: _FutureBuilderState<Album?>#d3ae7):
type 'Null' is not a subtype of type 'Album' in type cast
When the exception was thrown, this was the stack:
#0 _MultiGallerySelectPageState._showAlbumsDialog.<anonymous closure> (package:imagepickerflutter/MultiGallerySelectPage.dart:159:35)
#1 _FutureBuilderState.build (package:flutter/src/widgets/async.dart:612:55)
#2 StatefulElement.build (package:flutter/src/widgets/framework.dart:5198:27)
#3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5086:15)
#4 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#5 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#6 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5068:5)
#7 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5242:11)
我的项目代码:
_showAlbumsDialog(int index) {
Album? item;
return GestureDetector(
onTap: () {
if (item != null) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AlbumGallery(
channel: _channel,
albumId: item?.id,
imagesCount: item?.count)),
);
}
},
child: Card(
elevation: 2.0,
child: FutureBuilder(
future: _getAlbums(index),
builder: (context, snapshot) {
item = snapshot?.data as Album;
if (item != null) {
return Container(
child: Row(
children: [
Expanded(
flex: 1,
child: Container(
width: 40,
height: 200,
child: Image.memory(
item?.data ?? Uint8List(0),
fit: BoxFit.fitHeight,
),
),
),
Expanded(
flex: 2,
child: Container(
padding: EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
item?.title ?? '',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.black),
),
SizedBox(height: 4),
Text(
item?.count.toString() ?? 'No text',
style: TextStyle(
fontSize: 14,
color: Colors.grey,
),
),
],
),
),
),
],
),
decoration: BoxDecoration(
border: Border.all(
color: Colors.black,
width: 2,
style: _isSelected(item?.id ?? '')
? BorderStyle.solid
: BorderStyle.none,
),
),
);
}
return Container();
},
),
),
);
}
ListView生成器的代码:
Widget _buildAlbumsList() {
return ListView.builder(
shrinkWrap: true,
itemCount: _numberOfAlbums,
itemBuilder: (context, index) {
return ListTile(title: _showAlbumsDialog(index));
},
);
}
我试着将_numberOfAlbums设置为静态值,仍然是同样的问题。我不明白这个问题。我是新手。
3条答案
按热度按时间yduiuuwa1#
在Flutter中使用as运算符时,请务必记住以下几点,以确保安全使用:
尽可能使用is运算符进行类型检查,只有在确认类型时才使用as运算符进行类型转换,以避免类型转换错误。
当使用as操作符进行类型转换时,请确保被转换的对象实际上是目标类型,否则将引发TypeError异常。为了避免这种情况,您可以使用as?运算符,如果被转换的对象不是目标类型,则返回null而不是引发异常。
当使用as操作符进行类型转换时,请确保目标类型不可为空,否则将引发TypeError异常。如果目标类型可能是可空的,则可以使用安全类型转换运算符as?.
请尝试:
aij0ehis2#
尝试在类型转换上添加optional here
wz3gfoph3#
这是因为在迭代的某个点snapshot.data是null而不是Album,所以您可以删除另一个控件,如