You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.7 KiB
85 lines
2.7 KiB
import 'package:bytedesk_kefu/blocs/message_bloc/bloc.dart';
|
|
import 'package:bytedesk_kefu/model/message.dart';
|
|
import 'package:bytedesk_kefu/model/thread.dart';
|
|
import 'package:bytedesk_kefu/ui/channel/page/channel_detail_page.dart';
|
|
import 'package:bytedesk_kefu/ui/widget/empty_widget.dart';
|
|
import 'package:bytedesk_kefu/ui/widget/loading_widget.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:flutter_easyrefresh/easy_refresh.dart';
|
|
|
|
class ChannelPage extends StatefulWidget {
|
|
final Thread? thread;
|
|
|
|
ChannelPage({Key? key, @required this.thread}) : super(key: key);
|
|
|
|
@override
|
|
_ChannelPageState createState() => _ChannelPageState();
|
|
}
|
|
|
|
class _ChannelPageState extends State<ChannelPage> {
|
|
List<Message> _messageList = [];
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text(widget.thread!.nickname!),
|
|
),
|
|
body: MultiBlocListener(
|
|
listeners: [
|
|
BlocListener<MessageBloc, MessageState>(listener: (context, state) {
|
|
if (state is LoadChannelMessageSuccess) {
|
|
setState(() {
|
|
_messageList = state.messageList!;
|
|
});
|
|
}
|
|
})
|
|
],
|
|
child: EasyRefresh.custom(
|
|
controller: EasyRefreshController(),
|
|
header: PhoenixHeader(),
|
|
firstRefresh: true,
|
|
firstRefreshWidget: LoadingWidget(),
|
|
emptyWidget: _messageList.length == 0
|
|
? EmptyWidget(
|
|
tip: '未找到相关数据',
|
|
)
|
|
: null,
|
|
onRefresh: () async {},
|
|
onLoad: () async {},
|
|
slivers: <Widget>[
|
|
SliverList(
|
|
delegate: SliverChildBuilderDelegate(
|
|
(context, index) {
|
|
return new ListTile(
|
|
// TODO: 显示时间戳
|
|
title: Text(_messageList.elementAt(index).channelTitle()!),
|
|
subtitle:
|
|
Text(_messageList.elementAt(index).channelContent()!),
|
|
trailing: Icon(Icons.keyboard_arrow_right),
|
|
onTap: () {
|
|
//
|
|
Navigator.of(context)
|
|
.push(new MaterialPageRoute(builder: (context) {
|
|
return ChannelDetailPage(
|
|
message: _messageList.elementAt(index));
|
|
}));
|
|
},
|
|
);
|
|
},
|
|
childCount: _messageList.length,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|