v1.0.1
This commit is contained in:
52
lib/modules/common/comment/add_comment_controller.dart
Normal file
52
lib/modules/common/comment/add_comment_controller.dart
Normal file
@@ -0,0 +1,52 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_dmzj/app/controller/base_controller.dart';
|
||||
import 'package:flutter_dmzj/models/comment/comment_item.dart';
|
||||
import 'package:flutter_dmzj/requests/comment_request.dart';
|
||||
import 'package:flutter_dmzj/routes/app_navigator.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
|
||||
class AddCommentController extends BaseController {
|
||||
final int type;
|
||||
final int objId;
|
||||
final CommentItem? replyItem;
|
||||
AddCommentController({
|
||||
required this.objId,
|
||||
required this.type,
|
||||
this.replyItem,
|
||||
});
|
||||
final CommentRequest request = CommentRequest();
|
||||
final TextEditingController textEditingController = TextEditingController();
|
||||
|
||||
void submit() async {
|
||||
if (textEditingController.text.isEmpty) {
|
||||
SmartDialog.showToast("内容不能为空");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
SmartDialog.showLoading();
|
||||
if (replyItem == null) {
|
||||
await request.sendComment(
|
||||
objId: objId,
|
||||
type: type,
|
||||
content: textEditingController.text,
|
||||
);
|
||||
} else {
|
||||
await request.sendComment(
|
||||
objId: objId,
|
||||
type: type,
|
||||
content: textEditingController.text,
|
||||
toCommentId: replyItem!.id.toString(),
|
||||
originCommentId: replyItem!.originId.toString(),
|
||||
toUid: replyItem!.userId.toString(),
|
||||
);
|
||||
}
|
||||
|
||||
SmartDialog.showToast("发表成功");
|
||||
AppNavigator.closePage();
|
||||
} catch (e) {
|
||||
SmartDialog.showToast(e.toString());
|
||||
} finally {
|
||||
SmartDialog.dismiss(status: SmartStatus.loading);
|
||||
}
|
||||
}
|
||||
}
|
||||
66
lib/modules/common/comment/add_comment_page.dart
Normal file
66
lib/modules/common/comment/add_comment_page.dart
Normal file
@@ -0,0 +1,66 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dmzj/app/app_style.dart';
|
||||
import 'package:flutter_dmzj/models/comment/comment_item.dart';
|
||||
import 'package:flutter_dmzj/modules/common/comment/add_comment_controller.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class AddCommentPage extends StatelessWidget {
|
||||
final int type;
|
||||
final int objId;
|
||||
final CommentItem? replyItem;
|
||||
final AddCommentController controller;
|
||||
AddCommentPage({
|
||||
Key? key,
|
||||
required this.objId,
|
||||
required this.type,
|
||||
this.replyItem,
|
||||
}) : controller = Get.put(
|
||||
AddCommentController(objId: objId, type: type, replyItem: replyItem),
|
||||
tag: DateTime.now().millisecondsSinceEpoch.toString(),
|
||||
),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text("添加评论"),
|
||||
),
|
||||
body: ListView(
|
||||
padding: AppStyle.edgeInsetsA12,
|
||||
children: [
|
||||
Visibility(
|
||||
visible: replyItem != null,
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.grey.withOpacity(.2),
|
||||
borderRadius: AppStyle.radius4,
|
||||
),
|
||||
margin: AppStyle.edgeInsetsB12,
|
||||
padding: AppStyle.edgeInsetsA8,
|
||||
child: Text("${replyItem?.nickname}:${replyItem?.content}"),
|
||||
),
|
||||
),
|
||||
TextField(
|
||||
controller: controller.textEditingController,
|
||||
decoration: const InputDecoration(
|
||||
hintText: "你想说点什么...",
|
||||
border: OutlineInputBorder(),
|
||||
),
|
||||
onSubmitted: (e) {
|
||||
controller.submit();
|
||||
},
|
||||
minLines: 4,
|
||||
maxLines: 6,
|
||||
maxLength: 1000,
|
||||
),
|
||||
AppStyle.vGap12,
|
||||
ElevatedButton(
|
||||
onPressed: controller.submit,
|
||||
child: const Text("发布"),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
10
lib/modules/common/comment/comment_controller.dart
Normal file
10
lib/modules/common/comment/comment_controller.dart
Normal file
@@ -0,0 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class CommentController extends GetxController
|
||||
with GetSingleTickerProviderStateMixin {
|
||||
final int type;
|
||||
final int objId;
|
||||
CommentController(this.type, this.objId);
|
||||
late TabController tabController = TabController(length: 2, vsync: this);
|
||||
}
|
||||
33
lib/modules/common/comment/comment_list_controller.dart
Normal file
33
lib/modules/common/comment/comment_list_controller.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'package:flutter_dmzj/app/controller/base_controller.dart';
|
||||
import 'package:flutter_dmzj/models/comment/comment_item.dart';
|
||||
import 'package:flutter_dmzj/requests/comment_request.dart';
|
||||
|
||||
class CommentListController extends BasePageController<CommentItem> {
|
||||
final int type;
|
||||
final int objId;
|
||||
final bool isHot;
|
||||
final CommentRequest request = CommentRequest();
|
||||
CommentListController({
|
||||
required this.type,
|
||||
required this.objId,
|
||||
required this.isHot,
|
||||
});
|
||||
|
||||
@override
|
||||
Future<List<CommentItem>> getData(int page, int pageSize) async {
|
||||
if (isHot) {
|
||||
return await request.getComment(
|
||||
type: type,
|
||||
objId: objId,
|
||||
page: page,
|
||||
sort: 2,
|
||||
);
|
||||
} else {
|
||||
return await request.getComment(
|
||||
type: type,
|
||||
objId: objId,
|
||||
page: page,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
43
lib/modules/common/comment/comment_list_view.dart
Normal file
43
lib/modules/common/comment/comment_list_view.dart
Normal file
@@ -0,0 +1,43 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dmzj/modules/common/comment/comment_list_controller.dart';
|
||||
import 'package:flutter_dmzj/widgets/comment_item_widget.dart';
|
||||
import 'package:flutter_dmzj/widgets/keep_alive_wrapper.dart';
|
||||
import 'package:flutter_dmzj/widgets/page_list_view.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class CommentListView extends StatelessWidget {
|
||||
final int type;
|
||||
final int objId;
|
||||
final bool isHot;
|
||||
final CommentListController controller;
|
||||
CommentListView({
|
||||
Key? key,
|
||||
required this.objId,
|
||||
required this.type,
|
||||
required this.isHot,
|
||||
}) : controller = Get.put(
|
||||
CommentListController(objId: objId, type: type, isHot: isHot),
|
||||
tag: "${objId}_${type}_${isHot ? 1 : 0}",
|
||||
),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return KeepAliveWrapper(
|
||||
child: PageListView(
|
||||
pageController: controller,
|
||||
firstRefresh: true,
|
||||
separatorBuilder: (context, i) => Divider(
|
||||
endIndent: 12,
|
||||
indent: 12,
|
||||
color: Colors.grey.withOpacity(.2),
|
||||
height: 4,
|
||||
),
|
||||
itemBuilder: (context, i) {
|
||||
var item = controller.list[i];
|
||||
return CommentItemWidget(item);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
52
lib/modules/common/comment/comment_page.dart
Normal file
52
lib/modules/common/comment/comment_page.dart
Normal file
@@ -0,0 +1,52 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dmzj/app/app_style.dart';
|
||||
import 'package:flutter_dmzj/modules/common/comment/comment_list_view.dart';
|
||||
import 'package:flutter_dmzj/routes/app_navigator.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class CommentPage extends StatelessWidget {
|
||||
final int objId;
|
||||
final int type;
|
||||
const CommentPage({required this.objId, required this.type, Key? key})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultTabController(
|
||||
length: 2,
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Container(
|
||||
alignment: Alignment.center,
|
||||
child: TabBar(
|
||||
isScrollable: true,
|
||||
labelPadding: AppStyle.edgeInsetsH24,
|
||||
tabAlignment: TabAlignment.start,
|
||||
indicatorSize: TabBarIndicatorSize.label,
|
||||
indicatorColor: Theme.of(context).colorScheme.primary,
|
||||
labelColor: Theme.of(context).colorScheme.primary,
|
||||
unselectedLabelColor:
|
||||
Get.isDarkMode ? Colors.white70 : Colors.black87,
|
||||
tabs: const [
|
||||
Tab(text: "最新评论"),
|
||||
Tab(text: "热门评论"),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
body: TabBarView(
|
||||
children: [
|
||||
CommentListView(objId: objId, type: type, isHot: false),
|
||||
CommentListView(objId: objId, type: type, isHot: true),
|
||||
],
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () {
|
||||
AppNavigator.toAddComment(objId: objId, type: type);
|
||||
},
|
||||
child: const Icon(Icons.add),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user