更新聊天数据模型

master
laiiihz 5 years ago
parent 9a7f6237d7
commit 8d9e4a7a92

@ -207,19 +207,19 @@ class _LiveBlurPageState extends State<LiveBlurPage> {
],
),
rHBox(50),
_isAttention
? SizedBox()
: MaterialButton(
height: rSize(40),
minWidth: rSize(209),
child: Text(
'关注',
style: TextStyle(
color: Colors.white,
fontSize: rSP(18),
),
),
onPressed: () {
MaterialButton(
height: rSize(40),
minWidth: rSize(209),
child: Text(
_isAttention ? '已关注' : '关注',
style: TextStyle(
color: Colors.white,
fontSize: rSP(18),
),
),
onPressed: _isAttention
? () {}
: () {
setState(() {
_isAttention = true;
});
@ -228,19 +228,23 @@ class _LiveBlurPageState extends State<LiveBlurPage> {
{'followUserId': widget.streamModel.userId},
);
},
color: Color(0xFFDB2D2D),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(rSize(20)),
),
),
rHBox(16),
Text(
'关注主播,不错过更多精彩内容',
style: TextStyle(
color: Color(0xFF999999),
fontSize: rSP(12),
color: _isAttention
? Colors.red.withOpacity(0.4)
: Color(0xFFDB2D2D),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(rSize(20)),
),
),
rHBox(16),
_isAttention
? SizedBox()
: Text(
'关注主播,不错过更多精彩内容',
style: TextStyle(
color: Color(0xFF999999),
fontSize: rSP(12),
),
),
],
),
),

@ -11,9 +11,11 @@ import 'package:recook/manager/http_manager.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/pages/live/live_stream/live_blur_page.dart';
import 'package:recook/pages/live/live_stream/live_pick_goods_page.dart';
import 'package:recook/pages/live/live_stream/live_stream_view_page.dart';
import 'package:recook/pages/live/live_stream/live_users_view.dart';
import 'package:recook/pages/live/live_stream/pick_view/pick_cart.dart';
import 'package:recook/pages/live/live_stream/show_goods_list.dart';
import 'package:recook/pages/live/live_stream/widget/live_chat_box.dart';
import 'package:recook/pages/live/models/live_exit_model.dart';
import 'package:recook/pages/live/models/live_resume_model.dart';
import 'package:recook/pages/live/models/live_stream_info_model.dart';
@ -57,7 +59,7 @@ class _LivePageState extends State<LivePage> {
bool _isStream = false;
LiveStreamInfoModel _streamInfoModel;
TencentGroupTool group;
List<MessageEntity> chatObjects = [];
List<ChatObj> chatObjects = [];
ScrollController _scrollController = ScrollController();
int nowExplain = 0;
List<GroupMemberEntity> _groupMembers = [];
@ -358,8 +360,11 @@ class _LivePageState extends State<LivePage> {
physics: AlwaysScrollableScrollPhysics(
parent: BouncingScrollPhysics()),
itemBuilder: (context, index) {
return _buildChatBox(
chatObjects[index].sender, chatObjects[index].note);
return LiveChatBox(
sender: chatObjects[index].name,
note: chatObjects[index].message,
userEnter: chatObjects[index].enterUser,
);
},
itemCount: chatObjects.length,
),
@ -449,9 +454,7 @@ class _LivePageState extends State<LivePage> {
context: context,
builder: (context) {
return LiveUsersView(
avatars: _groupMembers
.map((e) => e.userProfile.faceUrl)
.toList(),
members: _groupMembers,
usersId: _groupMembers.map((e) => e.user).toList(),
);
},
@ -531,56 +534,6 @@ class _LivePageState extends State<LivePage> {
return LiveStreamInfoModel.fromJson(resultData.data['data']);
}
_buildChatBox(String sender, String note) {
final Color color = Color.fromRGBO(
180 + Random().nextInt(55),
180 + Random().nextInt(55),
180 + Random().nextInt(55),
1,
);
return Align(
alignment: Alignment.centerLeft,
child: ClipRRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
child: Container(
child: Text.rich(
TextSpan(children: [
TextSpan(
text: '$sender:',
style: TextStyle(
color: color,
fontSize: rSP(13),
),
),
TextSpan(
text: note,
style: TextStyle(
color: Colors.white,
fontSize: rSP(13),
),
),
]),
maxLines: 5,
),
margin: EdgeInsets.symmetric(vertical: rSize(5 / 2)),
padding: EdgeInsets.symmetric(
horizontal: rSize(10),
vertical: rSize(4),
),
constraints: BoxConstraints(
maxWidth: rSize(200),
),
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.1),
borderRadius: BorderRadius.circular(rSize(16)),
),
),
),
),
);
}
parseMessage(ListenerTypeEnum type, params) {
print('ListenerTypeEnum$type');
print(params);
@ -620,7 +573,11 @@ class _LivePageState extends State<LivePage> {
}
}
} else {
chatObjects.insertAll(0, messageEntities);
chatObjects.insertAll(
0,
messageEntities.map(
(e) => ChatObj(e.userInfo.nickName, e.note),
));
_scrollController.animateTo(
-50,
duration: Duration(milliseconds: 300),
@ -641,25 +598,15 @@ class _LivePageState extends State<LivePage> {
if (params is String) {
dynamic parseParams = jsonDecode(params);
if (parseParams['tipsType'] == 'Join') {
showToastWidget(
Container(
margin: EdgeInsets.all(rSize(15)),
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: rSize(10)),
height: rSize(26),
decoration: BoxDecoration(
color: Color(0xFFDC5353),
borderRadius: BorderRadius.circular(rSize(13)),
),
child: Text(
'${parseParams['opUser']}来了',
style: TextStyle(
color: Colors.white,
fontSize: rSP(13),
),
),
),
position: ToastPosition.top,
chatObjects.insert(
0,
ChatObj(parseParams['opUserInfo']['nickName'], '来了',
enterUser: true),
);
_scrollController.animateTo(
-50,
duration: Duration(milliseconds: 300),
curve: Curves.easeInOutCubic,
);
} else if (parseParams['tipsType'] == 'Quit') {
//exit

@ -12,6 +12,7 @@ import 'package:recook/pages/live/live_stream/live_blur_page.dart';
import 'package:recook/pages/live/live_stream/live_report_view.dart';
import 'package:recook/pages/live/live_stream/live_users_view.dart';
import 'package:recook/pages/live/live_stream/show_goods_list.dart';
import 'package:recook/pages/live/live_stream/widget/live_chat_box.dart';
import 'package:recook/pages/live/models/live_stream_info_model.dart';
import 'package:recook/pages/live/sub_page/user_home_page.dart';
import 'package:recook/pages/live/tencent_im/tencent_im_tool.dart';
@ -205,7 +206,8 @@ class _LiveStreamViewPageState extends State<LiveStreamViewPage> {
if (parseParams['tipsType'] == 'Join') {
chatObjects.insert(
0,
ChatObj(parseParams['opUser'], '来了', enterUser: true),
ChatObj(parseParams['opUserInfo']['nickName'], '来了',
enterUser: true),
);
_scrollController.animateTo(
@ -329,9 +331,7 @@ class _LiveStreamViewPageState extends State<LiveStreamViewPage> {
context: context,
builder: (context) {
return LiveUsersView(
avatars: _groupMembers
.map((e) => e.userProfile.faceUrl)
.toList(),
members: _groupMembers,
usersId:
_groupMembers.map((e) => e.user).toList(),
);
@ -387,9 +387,10 @@ class _LiveStreamViewPageState extends State<LiveStreamViewPage> {
physics: BouncingScrollPhysics(
parent: AlwaysScrollableScrollPhysics()),
itemBuilder: (context, index) {
return _buildChatBox(
chatObjects[index].name,
chatObjects[index].message,
return LiveChatBox(
sender: chatObjects[index].name,
note: chatObjects[index].message,
userEnter: chatObjects[index].enterUser,
);
},
itemCount: chatObjects.length,
@ -750,57 +751,6 @@ class _LiveStreamViewPageState extends State<LiveStreamViewPage> {
),
);
}
_buildChatBox(
String sender,
String note, {
bool userEnter = false,
}) {
final Color color = Color.fromRGBO(
180 + Random().nextInt(55),
180 + Random().nextInt(55),
180 + Random().nextInt(55),
1,
);
return Align(
alignment: Alignment.centerLeft,
child: Container(
child: Text.rich(
TextSpan(children: [
TextSpan(
text: '$sender:',
style: TextStyle(
color: color,
fontSize: rSP(13),
),
),
TextSpan(
text: note,
style: TextStyle(
color: Colors.white,
fontSize: rSP(13),
),
),
]),
maxLines: 20,
),
margin: EdgeInsets.symmetric(vertical: rSize(5 / 2)),
padding: EdgeInsets.symmetric(
horizontal: rSize(10),
vertical: rSize(4),
),
constraints: BoxConstraints(
maxWidth: rSize(200),
),
decoration: BoxDecoration(
color: userEnter
? Colors.pink.withOpacity(0.5)
: Colors.black.withOpacity(0.1),
borderRadius: BorderRadius.circular(rSize(16)),
),
),
);
}
}
class ChatObj {

@ -2,11 +2,12 @@ import 'package:flutter/material.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:tencent_im_plugin/entity/group_member_entity.dart';
class LiveUsersView extends StatefulWidget {
final List<GroupMemberEntity> members;
final List<String> usersId;
final List<String> avatars;
LiveUsersView({Key key, @required this.usersId, @required this.avatars})
LiveUsersView({Key key, @required this.members, @required this.usersId})
: super(key: key);
@override
@ -66,7 +67,6 @@ class _LiveUsersViewState extends State<LiveUsersView> {
child: ListView.builder(
controller: controller,
itemBuilder: (BuildContext context, int index) {
final name = users[index]['name'];
final fans = users[index]['fans'];
return Padding(
padding: EdgeInsets.symmetric(
@ -81,14 +81,15 @@ class _LiveUsersViewState extends State<LiveUsersView> {
child: FadeInImage.assetNetwork(
placeholder:
R.ASSETS_PLACEHOLDER_NEW_1X1_A_PNG,
image: widget.avatars[index],
image: Api.getImgUrl(widget
.members[index].userProfile.faceUrl),
width: rSize(34),
height: rSize(34),
),
),
rWBox(10),
Text(
'$name',
'${widget.members[index].userProfile.nickName}',
style: TextStyle(
color: Colors.white,
fontSize: rSP(14),

@ -0,0 +1,64 @@
import 'dart:math';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:recook/constants/header.dart';
class LiveChatBox extends StatelessWidget {
final String sender;
final String note;
final bool userEnter;
const LiveChatBox({Key key, this.sender, this.note, this.userEnter = false})
: super(key: key);
@override
Widget build(BuildContext context) {
final Color color = Color.fromRGBO(
180 + Random().nextInt(55),
180 + Random().nextInt(55),
180 + Random().nextInt(55),
1,
);
return Container(
padding: EdgeInsets.symmetric(vertical: rSize(5 / 2)),
alignment: Alignment.centerLeft,
child: ClipRRect(
borderRadius: BorderRadius.circular(rSize(16)),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
child: Container(
child: Text.rich(
TextSpan(children: [
TextSpan(
text: '$sender:',
style: TextStyle(
color: color,
fontSize: rSP(13),
),
),
TextSpan(
text: note,
style: TextStyle(
color: Colors.white,
fontSize: rSP(13),
),
),
]),
maxLines: 20,
),
padding: EdgeInsets.symmetric(
horizontal: rSize(10),
vertical: rSize(4),
),
constraints: BoxConstraints(
maxWidth: rSize(200),
),
color: userEnter ?? false
? Colors.pink.withOpacity(0.3)
: Colors.black.withOpacity(0.1),
),
),
),
);
}
}
Loading…
Cancel
Save