opt: article

This commit is contained in:
bggRGjQaUbCoE
2024-10-05 20:36:52 +08:00
parent 1f32cf3bd2
commit 76eccfd87d
4 changed files with 17 additions and 11 deletions

View File

@@ -1,28 +1,29 @@
import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
import 'package:PiliPalaX/models/dynamics/article_content_model.dart'; import 'package:PiliPalaX/models/dynamics/article_content_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
class ArticleContent extends StatelessWidget { class ArticleContent extends StatelessWidget {
const ArticleContent({ const ArticleContent({
super.key, super.key,
required this.htmlContent, required this.list,
}); });
final dynamic htmlContent; final List<ArticleContentModel> list;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
List<ArticleContentModel> list = (htmlContent['ops'] as List)
.map((item) => ArticleContentModel.fromJson(item))
.toList();
return SliverList.separated( return SliverList.separated(
itemCount: list.length, itemCount: list.length,
itemBuilder: (_, index) { itemBuilder: (_, index) {
ArticleContentModel item = list[index]; ArticleContentModel item = list[index];
if (item.insert is String) { if (item.insert is String) {
return Text( return SelectableText(
item.insert, (item.insert as String).replaceAll('\n', '\n\n'),
style: TextStyle( style: TextStyle(
letterSpacing: 0.3,
fontSize: FontSize.large.value,
height: LineHeight.percent(125).size,
fontWeight: fontWeight:
item.attributes?.bold == true ? FontWeight.bold : null, item.attributes?.bold == true ? FontWeight.bold : null,
), ),
@@ -48,7 +49,8 @@ class ArticleContent extends StatelessWidget {
// ], // ],
// ); // );
} else { } else {
return Text('unsupported content'); return const SizedBox.shrink();
// return Text('unsupported content');
} }
}, },
separatorBuilder: (context, index) => const SizedBox(height: 10), separatorBuilder: (context, index) => const SizedBox(height: 10),

View File

@@ -59,7 +59,7 @@ class HtmlRender extends StatelessWidget {
// height: isEmote ? 22 : null, // height: isEmote ? 22 : null,
// ); // );
return NetworkImgLayer( return NetworkImgLayer(
width: isEmote ? 22 : constrainedWidth / textScale, width: isEmote ? 22 : constrainedWidth,
height: isEmote ? 22 : 200, height: isEmote ? 22 : 200,
src: imgUrl, src: imgUrl,
ignoreHeight: !isEmote, ignoreHeight: !isEmote,

View File

@@ -1,5 +1,7 @@
import 'dart:convert'; 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/dom.dart';
import 'package:html/parser.dart'; import 'package:html/parser.dart';
import 'index.dart'; import 'index.dart';
@@ -114,7 +116,9 @@ class HtmlHttp {
try { try {
opusContent = jsonDecode(jsonString)['readInfo']['content']; opusContent = jsonDecode(jsonString)['readInfo']['content'];
try { try {
opusContent = jsonDecode(opusContent); opusContent = (jsonDecode(opusContent)['ops'] as List)
.map((item) => ArticleContentModel.fromJson(item))
.toList();
isJsonContent = true; isJsonContent = true;
} catch (e) { } catch (e) {
print('second: $e'); print('second: $e');

View File

@@ -446,7 +446,7 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
() => _htmlRenderCtr.loaded.value () => _htmlRenderCtr.loaded.value
? _htmlRenderCtr.response['isJsonContent'] == true ? _htmlRenderCtr.response['isJsonContent'] == true
? ArticleContent( ? ArticleContent(
htmlContent: _htmlRenderCtr.response['content'], list: _htmlRenderCtr.response['content'],
) )
: SliverToBoxAdapter( : SliverToBoxAdapter(
child: LayoutBuilder( child: LayoutBuilder(