这是我遇到的错误
╡小工具图书馆的例外情况提示 ╞═════════════════════════════════════════════════ ══════════ 在构建StreamBuilder(dirty,state:时抛出以下NoSuchMethodError: _StreamBuilderBaseState
#0ddea): 吸气剂“部门”在null上被调用。 接收方:空尝试致电:部门 相关的引起错误的小部件是: StreamBuilder
这是代码。我要开发一个在线noticebord。这些代码在新的dart更新之前可以正常工作。在我进行更新之后,它会出现上述错误。请给我一种解决方法
approvenotice.dart
Widget build(BuildContext context) {
return StreamProvider<List<Notice>>.value(
value: NoticeService().notices,
child: Scaffold(
appBar: AppBar(
elevation: 0.0,
title: Text('Aprove Notices',
style: TextStyle(
fontFamily: 'Montserrat',
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
backgroundColor: Colors.blue[800],
actions: <Widget>[
IconButton(
icon: Icon(Icons.search, color: Colors.white,),
onPressed: (){}
),
],
),
body:UnApprovedNotices() ,
UnapproveNotices.dart
class UnApprovedNotices extends StatefulWidget {
@override
_UnApprovedNoticesState createState() => _UnApprovedNoticesState();
}
class _UnApprovedNoticesState extends State<UnApprovedNotices> {
@override
Widget build(BuildContext context) {
final notices = Provider.of<List<Notice>>(context) ?? [];
return StreamBuilder<List<Notice>>(
stream: NoticeService().notices,
builder: (context, snapshot) {
if(snapshot.hasData){
return GridView.builder (
itemCount: notices.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 1),
// ignore: missing_return
itemBuilder: (context,index){
return SingleNotice(
notice:notices[index]
);
}
}
);
}else{
return(Text('No List'));
}
}
尽管在Firestore中有记录,但它显示“ No List”并给出上述错误。
答案 0 :(得分:0)
该错误是由在空值上调用department
属性引起的,这意味着,
您尝试调用类似user.department
之类的方法,但不幸的是user
为空。
我认为,您由于未正确处理AsyncSnapshot
而引起麻烦。
为了正确实现快照数据,您需要处理AsyncSnapshot
拥有的每个状态。
if (snapshot.hasError) {
// Return Widget to display error
// snapshot.error will be not nil.
return ErrorWidget(snapshot.error);
} else {
if (snapshot.connectionState == ConnectionState.waiting) {
// snapshot is waiting for data
// Generally we could use this to show `CircularProgressIndicator`
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasData) {
// Snapshot will contains particular data.
// get this value by snapshot.data
return DataWidget(snapshot.data);
}
}
注意:未测试代码。希望这有助于一般实施。如果需要对ConnectionState
的更多控制,请执行switch语句。
在flutter文档中了解更多信息:StreamBuilder类。