FirebaseAnimatedList itemBuilder错误

时间:2018-03-01 23:38:15

标签: dart flutter

我目前正在浏览Flutter Firebase代码框here

我已按照所有步骤操作,但在尝试使用itemBuilder小部件的FirebaseAnimatedList时遇到两个错误。

错误1

sort: (a, b) => b.key.compareTo(a.key)

相关
  

函数表达式类型'(动态,动态)→动态'不是'(DataSnapshot,DataSnapshot)→int'类型。这意味着它的参数或返回类型与预期的不匹配。请考虑更改参数类型或返回的类型。

我是否需要将(a,b)转换为DataSnapshot

错误2

itemBuilder的{​​{1}}相关联。

  

参数类型'(BuildContext,DataSnapshot,Animation,int)→dynamic'无法分配给参数类型'(BuildContext,DataSnapshot,Animation)→Widget'。

在这种情况下,似乎需要传入索引,并且FirebaseAnimatedList返回错误的类型。我不确定如何解决这些问题。

以下是我的代码。

构建ChatMessage

的函数
ChatScreenState

@override Widget build(BuildContext context) { return new Scaffold( appBar: AppBar( title: Text('friendlychat'), ), body: Column( children: <Widget>[ Flexible( child: FirebaseAnimatedList( query: reference, sort: (a, b) => b.key.compareTo(a.key), padding: EdgeInsets.all(8.0), reverse: true, itemBuilder: (BuildContext context, DataSnapshot snapshot, Animation<double> animation, int index) { return ChatMessage(snapshot: snapshot, animation: animation); }, ), ), Divider(height: 1.0), Container( decoration: BoxDecoration(color: Theme.of(context).cardColor), child: _buildTextComposer(), ) ], )); } class

ChatMessage

更新了class ChatMessage extends StatelessWidget { ChatMessage({this.snapshot, this.animation}); final DataSnapshot snapshot; final Animation animation; @override Widget build(BuildContext context) { return SizeTransition( sizeFactor: CurvedAnimation(parent: animation, curve: Curves.easeOut), axisAlignment: 0.0, child: Container( margin: EdgeInsets.symmetric(vertical: 10.0), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Container( margin: EdgeInsets.only(right: 16.0), child: CircleAvatar( backgroundImage: NetworkImage(snapshot.value['senderPhotoUrl'])), ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Text(snapshot.value['senderName'], style: Theme.of(context).textTheme.subhead), Container( margin: EdgeInsets.only(top: 5.0), child: Text(snapshot.value['text']), ), ], ), ), ], ), )); } } 的代码:

FirebaseAnimatedList

2 个答案:

答案 0 :(得分:3)

这是因为扑腾测试版使用Dart-2,默认情况下确保最大类型安全

解决错误1: 变化

}

(a, b) => b.key.compareTo(a.key)

解决错误2: 变化

(Datasnapshot a, Datasnapshot b) => b.key.compareTo(a.key)功能

中删除int index

并在itemBuilder函数中new之后添加return个关键字。

希望有所帮助!

答案 1 :(得分:0)

itemBuilder有一个名为index的额外参数。

typedef小部件FirebaseAnimatedListItemBuilder(   BuildContext上下文,   DataSnapshot快照,   动画动画   整数索引 );

因此,只需在“动画”之后添加“,_”即可解决该问题。