From 76eccfd87deeda4a1b79c8c151da706ba9d2857d Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sat, 5 Oct 2024 20:36:52 +0800 Subject: [PATCH] opt: article --- lib/common/widgets/article_content.dart | 18 ++++++++++-------- lib/common/widgets/html_render.dart | 2 +- lib/http/html.dart | 6 +++++- lib/pages/html/view.dart | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/lib/common/widgets/article_content.dart b/lib/common/widgets/article_content.dart index facb7ce9..c222f220 100644 --- a/lib/common/widgets/article_content.dart +++ b/lib/common/widgets/article_content.dart @@ -1,28 +1,29 @@ import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/models/dynamics/article_content_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_html/flutter_html.dart'; class ArticleContent extends StatelessWidget { const ArticleContent({ super.key, - required this.htmlContent, + required this.list, }); - final dynamic htmlContent; + final List list; @override Widget build(BuildContext context) { - List list = (htmlContent['ops'] as List) - .map((item) => ArticleContentModel.fromJson(item)) - .toList(); return SliverList.separated( itemCount: list.length, itemBuilder: (_, index) { ArticleContentModel item = list[index]; if (item.insert is String) { - return Text( - item.insert, + return SelectableText( + (item.insert as String).replaceAll('\n', '\n\n'), style: TextStyle( + letterSpacing: 0.3, + fontSize: FontSize.large.value, + height: LineHeight.percent(125).size, fontWeight: item.attributes?.bold == true ? FontWeight.bold : null, ), @@ -48,7 +49,8 @@ class ArticleContent extends StatelessWidget { // ], // ); } else { - return Text('unsupported content'); + return const SizedBox.shrink(); + // return Text('unsupported content'); } }, separatorBuilder: (context, index) => const SizedBox(height: 10), diff --git a/lib/common/widgets/html_render.dart b/lib/common/widgets/html_render.dart index c0737e00..ede62090 100644 --- a/lib/common/widgets/html_render.dart +++ b/lib/common/widgets/html_render.dart @@ -59,7 +59,7 @@ class HtmlRender extends StatelessWidget { // height: isEmote ? 22 : null, // ); return NetworkImgLayer( - width: isEmote ? 22 : constrainedWidth / textScale, + width: isEmote ? 22 : constrainedWidth, height: isEmote ? 22 : 200, src: imgUrl, ignoreHeight: !isEmote, diff --git a/lib/http/html.dart b/lib/http/html.dart index 6e28d8a0..bf886e61 100644 --- a/lib/http/html.dart +++ b/lib/http/html.dart @@ -1,5 +1,7 @@ import 'dart:convert'; +import 'package:PiliPalaX/common/widgets/article_content.dart'; +import 'package:PiliPalaX/models/dynamics/article_content_model.dart'; import 'package:html/dom.dart'; import 'package:html/parser.dart'; import 'index.dart'; @@ -114,7 +116,9 @@ class HtmlHttp { try { opusContent = jsonDecode(jsonString)['readInfo']['content']; try { - opusContent = jsonDecode(opusContent); + opusContent = (jsonDecode(opusContent)['ops'] as List) + .map((item) => ArticleContentModel.fromJson(item)) + .toList(); isJsonContent = true; } catch (e) { print('second: $e'); diff --git a/lib/pages/html/view.dart b/lib/pages/html/view.dart index c792d39e..49db667e 100644 --- a/lib/pages/html/view.dart +++ b/lib/pages/html/view.dart @@ -446,7 +446,7 @@ class _HtmlRenderPageState extends State () => _htmlRenderCtr.loaded.value ? _htmlRenderCtr.response['isJsonContent'] == true ? ArticleContent( - htmlContent: _htmlRenderCtr.response['content'], + list: _htmlRenderCtr.response['content'], ) : SliverToBoxAdapter( child: LayoutBuilder(