v1.0.1
This commit is contained in:
189
lib/modules/news/detail/news_detail_page.dart
Normal file
189
lib/modules/news/detail/news_detail_page.dart
Normal file
@@ -0,0 +1,189 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dmzj/app/app_style.dart';
|
||||
import 'package:flutter_dmzj/modules/news/detail/news_detail_controller.dart';
|
||||
import 'package:flutter_dmzj/widgets/net_image.dart';
|
||||
import 'package:flutter_dmzj/widgets/status/app_error_widget.dart';
|
||||
import 'package:flutter_dmzj/widgets/status/app_loadding_widget.dart';
|
||||
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:remixicon/remixicon.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
class NewsDetailPage extends StatelessWidget {
|
||||
final String newsUrl;
|
||||
final int newsId;
|
||||
final String title;
|
||||
final NewsDetailController controller;
|
||||
NewsDetailPage({
|
||||
required this.newsUrl,
|
||||
this.title = "资讯详情",
|
||||
required this.newsId,
|
||||
Key? key,
|
||||
}) : controller = Get.put(
|
||||
NewsDetailController(id: newsId, newsUrl: newsUrl, title: title),
|
||||
tag: DateTime.now().millisecondsSinceEpoch.toString(),
|
||||
),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Obx(() => Text(controller.newsTitle.value)),
|
||||
actions: [
|
||||
IconButton(
|
||||
onPressed: controller.share,
|
||||
icon: const Icon(Icons.share),
|
||||
),
|
||||
],
|
||||
),
|
||||
body: Stack(
|
||||
children: [
|
||||
(Platform.isAndroid || Platform.isIOS)
|
||||
? Obx(
|
||||
() => Offstage(
|
||||
offstage: controller.pageLoadding.value,
|
||||
child: WebViewWidget(
|
||||
controller: controller.webViewController!,
|
||||
),
|
||||
),
|
||||
)
|
||||
: buildHtml(),
|
||||
Obx(
|
||||
() => Offstage(
|
||||
offstage: !controller.pageLoadding.value,
|
||||
child: const AppLoaddingWidget(),
|
||||
),
|
||||
),
|
||||
Obx(
|
||||
() => Offstage(
|
||||
offstage: !controller.pageError.value,
|
||||
child: AppErrorWidget(
|
||||
errorMsg: controller.errorMsg.value,
|
||||
onRefresh: controller.refershContent,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: BottomAppBar(
|
||||
child: SizedBox(
|
||||
height: 48,
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Obx(
|
||||
() => TextButton.icon(
|
||||
onPressed: controller.like,
|
||||
icon: Icon(
|
||||
controller.liked.value
|
||||
? Remix.thumb_up_fill
|
||||
: Remix.thumb_up_line,
|
||||
size: 20,
|
||||
),
|
||||
label: Text(controller.moodAmount > 0
|
||||
? "${controller.moodAmount}"
|
||||
: "点赞"),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Obx(
|
||||
() => TextButton.icon(
|
||||
style: TextButton.styleFrom(
|
||||
textStyle: const TextStyle(fontSize: 14),
|
||||
),
|
||||
onPressed: controller.comment,
|
||||
icon: const Icon(
|
||||
Remix.chat_2_line,
|
||||
size: 20,
|
||||
),
|
||||
label: Text(controller.commentAmount > 0
|
||||
? "${controller.commentAmount}"
|
||||
: "评论"),
|
||||
),
|
||||
),
|
||||
),
|
||||
// Expanded(
|
||||
// child: Obx(
|
||||
// () => TextButton.icon(
|
||||
// style: TextButton.styleFrom(
|
||||
// textStyle: const TextStyle(fontSize: 14),
|
||||
// ),
|
||||
// onPressed: controller.collect,
|
||||
// icon: Icon(
|
||||
// controller.collected.value
|
||||
// ? Remix.star_fill
|
||||
// : Remix.star_line,
|
||||
// size: 20,
|
||||
// ),
|
||||
// label: Text(controller.collected.value ? "已收藏" : "收藏"),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
Expanded(
|
||||
child: TextButton.icon(
|
||||
style: TextButton.styleFrom(
|
||||
textStyle: const TextStyle(fontSize: 14),
|
||||
),
|
||||
onPressed: controller.showSettings,
|
||||
icon: const Icon(
|
||||
Remix.settings_line,
|
||||
size: 20,
|
||||
),
|
||||
label: const Text("设置"),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget buildHtml() {
|
||||
return Obx(
|
||||
() => ListView(
|
||||
padding: AppStyle.edgeInsetsA12,
|
||||
children: [
|
||||
Text(
|
||||
controller.title,
|
||||
style: Get.textTheme.titleLarge,
|
||||
),
|
||||
AppStyle.vGap4,
|
||||
Text(
|
||||
"${controller.author.value} ${controller.src.value} ${controller.time.value}",
|
||||
style: const TextStyle(fontSize: 12, color: Colors.grey),
|
||||
),
|
||||
AppStyle.vGap12,
|
||||
HtmlWidget(
|
||||
controller.htmlContent.value,
|
||||
textStyle: TextStyle(
|
||||
fontSize: controller.settings.newsFontSize.value.toDouble(),
|
||||
),
|
||||
customWidgetBuilder: (e) {
|
||||
if (e.localName == "img") {
|
||||
var imgSrc = e.attributes["src"];
|
||||
imgSrc ??= e.attributes["data-original"];
|
||||
return GestureDetector(
|
||||
child: NetImage(
|
||||
imgSrc!,
|
||||
borderRadius: 4,
|
||||
),
|
||||
onTap: () {
|
||||
controller.showImageView(imgSrc ?? "");
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
onTapUrl: controller.onTapUrl,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user