mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
show forwarded dyn pic
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -892,4 +892,6 @@ class Api {
|
||||
static const String dynTopicRcmd = '/x/topic/web/dynamic/rcmd';
|
||||
|
||||
static const String matchInfo = '/x/esports/match/info';
|
||||
|
||||
static const String dynPic = '/x/polymer/web-dynamic/v1/detail/pic';
|
||||
}
|
||||
|
||||
@@ -493,4 +493,21 @@ class DynamicsHttp {
|
||||
return Error(res.data['message']);
|
||||
}
|
||||
}
|
||||
|
||||
static Future<LoadingState<List<OpusPicModel>?>> dynPic(dynamic id) async {
|
||||
final res = await Request().get(
|
||||
Api.dynPic,
|
||||
queryParameters: {
|
||||
'id': id,
|
||||
'web_location': 333.1368,
|
||||
},
|
||||
);
|
||||
if (res.data['code'] == 0) {
|
||||
return Success((res.data['data'] as List?)
|
||||
?.map((e) => OpusPicModel.fromJson(e))
|
||||
.toList());
|
||||
} else {
|
||||
return Error(res.data['message']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1175,13 +1175,13 @@ class DynamicOpusModel {
|
||||
});
|
||||
|
||||
String? jumpUrl;
|
||||
List<OpusPicsModel>? pics;
|
||||
List<OpusPicModel>? pics;
|
||||
SummaryModel? summary;
|
||||
String? title;
|
||||
DynamicOpusModel.fromJson(Map<String, dynamic> json) {
|
||||
jumpUrl = json['jump_url'];
|
||||
pics = (json['pics'] as List?)
|
||||
?.map<OpusPicsModel>((e) => OpusPicsModel.fromJson(e))
|
||||
?.map<OpusPicModel>((e) => OpusPicModel.fromJson(e))
|
||||
.toList();
|
||||
summary =
|
||||
json['summary'] != null ? SummaryModel.fromJson(json['summary']) : null;
|
||||
@@ -1219,7 +1219,7 @@ class RichTextNodeItem {
|
||||
String? text;
|
||||
String? type;
|
||||
String? rid;
|
||||
List<OpusPicsModel>? pics;
|
||||
List<OpusPicModel>? pics;
|
||||
String? jumpUrl;
|
||||
|
||||
RichTextNodeItem.fromJson(Map<String, dynamic> json) {
|
||||
@@ -1231,7 +1231,7 @@ class RichTextNodeItem {
|
||||
pics = json['pics'] == null
|
||||
? null
|
||||
: (json['pics'] as List?)
|
||||
?.map((e) => OpusPicsModel.fromJson(e))
|
||||
?.map((e) => OpusPicModel.fromJson(e))
|
||||
.toList();
|
||||
jumpUrl = json['jump_url'];
|
||||
}
|
||||
@@ -1267,26 +1267,23 @@ class DynamicNoneModel {
|
||||
}
|
||||
}
|
||||
|
||||
class OpusPicsModel {
|
||||
OpusPicsModel({
|
||||
class OpusPicModel {
|
||||
OpusPicModel({
|
||||
this.width,
|
||||
this.height,
|
||||
this.size,
|
||||
this.src,
|
||||
this.url,
|
||||
});
|
||||
|
||||
int? width;
|
||||
int? height;
|
||||
int? size;
|
||||
String? src;
|
||||
String? url;
|
||||
String? liveUrl;
|
||||
|
||||
OpusPicsModel.fromJson(Map<String, dynamic> json) {
|
||||
OpusPicModel.fromJson(Map<String, dynamic> json) {
|
||||
width = json['width'];
|
||||
height = json['height'];
|
||||
size = json['size'] != null ? json['size'].toInt() : 0;
|
||||
src = json['src'];
|
||||
url = json['url'];
|
||||
liveUrl = json['live_url'];
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
import 'package:PiliPlus/common/widgets/image/image_view.dart';
|
||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||
import 'package:PiliPlus/http/dynamics.dart';
|
||||
import 'package:PiliPlus/http/search.dart';
|
||||
import 'package:PiliPlus/models/common/image_preview_type.dart'
|
||||
show SourceModel;
|
||||
import 'package:PiliPlus/models/common/image_type.dart';
|
||||
import 'package:PiliPlus/models/dynamics/result.dart';
|
||||
import 'package:PiliPlus/pages/dynamics/widgets/vote.dart';
|
||||
import 'package:PiliPlus/utils/app_scheme.dart';
|
||||
import 'package:PiliPlus/utils/extension.dart';
|
||||
import 'package:PiliPlus/utils/page_utils.dart';
|
||||
import 'package:PiliPlus/utils/utils.dart';
|
||||
import 'package:flutter/foundation.dart' show kDebugMode;
|
||||
@@ -235,28 +239,52 @@ TextSpan? richNode(
|
||||
),
|
||||
);
|
||||
break;
|
||||
case 'RICH_TEXT_NODE_TYPE_VIEW_PICTURE'
|
||||
when (i.pics?.isNotEmpty == true):
|
||||
spanChildren
|
||||
..add(const TextSpan(text: '\n'))
|
||||
..add(
|
||||
WidgetSpan(
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
return imageView(
|
||||
constraints.maxWidth,
|
||||
i.pics!
|
||||
.map((item) => ImageModel(
|
||||
url: item.src ?? '',
|
||||
width: item.width,
|
||||
height: item.height,
|
||||
))
|
||||
.toList(),
|
||||
);
|
||||
},
|
||||
case 'RICH_TEXT_NODE_TYPE_VIEW_PICTURE':
|
||||
if (i.pics?.isNotEmpty == true) {
|
||||
spanChildren
|
||||
..add(const TextSpan(text: '\n'))
|
||||
..add(
|
||||
WidgetSpan(
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
return imageView(
|
||||
constraints.maxWidth,
|
||||
i.pics!
|
||||
.map((item) => ImageModel(
|
||||
url: item.src ?? '',
|
||||
width: item.width,
|
||||
height: item.height,
|
||||
))
|
||||
.toList(),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
spanChildren.add(
|
||||
TextSpan(
|
||||
text: i.text,
|
||||
style: style,
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () {
|
||||
DynamicsHttp.dynPic(i.rid).then((res) {
|
||||
if (res.isSuccess) {
|
||||
var list = res.data;
|
||||
if (list?.isNotEmpty == true) {
|
||||
Get.context!.imageView(
|
||||
imgList: list!
|
||||
.map((e) => SourceModel(url: e.src!))
|
||||
.toList());
|
||||
}
|
||||
} else {
|
||||
res.toast();
|
||||
}
|
||||
});
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
spanChildren.add(TextSpan(text: i.text, style: style));
|
||||
|
||||
Reference in New Issue
Block a user