This commit is contained in:
2026-03-07 17:24:59 +08:00
parent 4418ebecac
commit b0ec8ab4bd
417 changed files with 42546 additions and 2 deletions

View 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);
}
}
}

View 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("发布"),
),
],
),
);
}
}

View 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);
}

View 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,
);
}
}
}

View 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);
},
),
);
}
}

View 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),
),
),
);
}
}