Merge branch 'design'
This commit is contained in:
@ -15,4 +15,5 @@ class Constants {
|
|||||||
// 59b43e04ad6965f34319062b478f83dd TV端
|
// 59b43e04ad6965f34319062b478f83dd TV端
|
||||||
static const String appSec = '59b43e04ad6965f34319062b478f83dd';
|
static const String appSec = '59b43e04ad6965f34319062b478f83dd';
|
||||||
static const String thirdSign = '04224646d1fea004e79606d3b038c84a';
|
static const String thirdSign = '04224646d1fea004e79606d3b038c84a';
|
||||||
|
static const List<int> publicFavFolder = <int>[0, 2, 22];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -124,7 +124,7 @@ class _AboutPageState extends State<AboutPage> {
|
|||||||
onTap: () => _aboutController.webSiteUrl(),
|
onTap: () => _aboutController.webSiteUrl(),
|
||||||
title: const Text('访问官网'),
|
title: const Text('访问官网'),
|
||||||
trailing: Text(
|
trailing: Text(
|
||||||
'https://pilipalanet.mysxl.cn',
|
'https://pilipala.life',
|
||||||
style: subTitleStyle,
|
style: subTitleStyle,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@ -96,7 +96,9 @@ class VideoContent extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
Text(
|
Text(
|
||||||
[22, 0].contains(favFolderItem.attr) ? '公开' : '私密',
|
Constants.publicFavFolder.contains(favFolderItem.attr)
|
||||||
|
? '公开'
|
||||||
|
: '私密',
|
||||||
textAlign: TextAlign.start,
|
textAlign: TextAlign.start,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: Theme.of(context).textTheme.labelMedium!.fontSize,
|
fontSize: Theme.of(context).textTheme.labelMedium!.fontSize,
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
|
import 'package:pilipala/common/constants.dart';
|
||||||
import 'package:pilipala/common/widgets/http_error.dart';
|
import 'package:pilipala/common/widgets/http_error.dart';
|
||||||
import 'package:pilipala/utils/feed_back.dart';
|
import 'package:pilipala/utils/feed_back.dart';
|
||||||
import 'package:pilipala/utils/storage.dart';
|
import 'package:pilipala/utils/storage.dart';
|
||||||
@ -66,16 +67,14 @@ class _FavPanelState extends State<FavPanel> {
|
|||||||
onTap: () =>
|
onTap: () =>
|
||||||
widget.ctr!.onChoose(item.favState != 1, index),
|
widget.ctr!.onChoose(item.favState != 1, index),
|
||||||
dense: true,
|
dense: true,
|
||||||
leading: Icon([22, 0].contains(item.attr)
|
leading: Icon(
|
||||||
? Icons.lock_outline
|
Constants.publicFavFolder.contains(item.attr)
|
||||||
: Icons.folder_outlined),
|
? Icons.folder_outlined
|
||||||
|
: Icons.lock_outline),
|
||||||
minLeadingWidth: 0,
|
minLeadingWidth: 0,
|
||||||
title: Text(item.title!),
|
title: Text(item.title!),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
'${item.mediaCount}个内容 - ${[
|
'${item.mediaCount}个内容 - ${Constants.publicFavFolder.contains(item.attr) ? '公开' : '私密'}',
|
||||||
22,
|
|
||||||
0
|
|
||||||
].contains(item.attr) ? '公开' : '私密'}',
|
|
||||||
),
|
),
|
||||||
trailing: Transform.scale(
|
trailing: Transform.scale(
|
||||||
scale: 0.9,
|
scale: 0.9,
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:appscheme/appscheme.dart';
|
|
||||||
import 'package:flutter/gestures.dart';
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
@ -46,7 +45,7 @@ class ReplyItem extends StatelessWidget {
|
|||||||
final bool? showReplyRow;
|
final bool? showReplyRow;
|
||||||
final Function? replyReply;
|
final Function? replyReply;
|
||||||
final ReplyType? replyType;
|
final ReplyType? replyType;
|
||||||
final bool? replySave;
|
final bool replySave;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -56,7 +55,7 @@ class ReplyItem extends StatelessWidget {
|
|||||||
child: InkWell(
|
child: InkWell(
|
||||||
// 点击整个评论区 评论详情/回复
|
// 点击整个评论区 评论详情/回复
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (replySave!) {
|
if (replySave) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
feedBack();
|
feedBack();
|
||||||
@ -65,7 +64,7 @@ class ReplyItem extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLongPress: () {
|
onLongPress: () {
|
||||||
if (replySave!) {
|
if (replySave) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
feedBack();
|
feedBack();
|
||||||
@ -238,53 +237,32 @@ class ReplyItem extends StatelessWidget {
|
|||||||
// title
|
// title
|
||||||
Container(
|
Container(
|
||||||
margin: const EdgeInsets.only(top: 10, left: 45, right: 6, bottom: 4),
|
margin: const EdgeInsets.only(top: 10, left: 45, right: 6, bottom: 4),
|
||||||
child: LayoutBuilder(
|
child: !replySave
|
||||||
builder: (BuildContext context, BoxConstraints boxConstraints) {
|
? LayoutBuilder(builder:
|
||||||
String text = replyItem?.content?.message ?? '';
|
(BuildContext context, BoxConstraints boxConstraints) {
|
||||||
bool didExceedMaxLines = false;
|
String text = replyItem?.content?.message ?? '';
|
||||||
final double maxWidth = boxConstraints.maxWidth;
|
bool didExceedMaxLines = false;
|
||||||
TextPainter? textPainter;
|
final double maxWidth = boxConstraints.maxWidth;
|
||||||
final int maxLines =
|
TextPainter? textPainter;
|
||||||
replyItem!.content!.isText! && replyLevel == '1' ? 6 : 999;
|
final int maxLines =
|
||||||
try {
|
replyItem!.content!.isText! && replyLevel == '1'
|
||||||
textPainter = TextPainter(
|
? 6
|
||||||
text: TextSpan(text: text),
|
: 999;
|
||||||
maxLines: maxLines,
|
try {
|
||||||
textDirection: Directionality.of(context),
|
textPainter = TextPainter(
|
||||||
);
|
text: TextSpan(text: text),
|
||||||
textPainter.layout(maxWidth: maxWidth);
|
maxLines: maxLines,
|
||||||
didExceedMaxLines = textPainter.didExceedMaxLines;
|
textDirection: Directionality.of(context),
|
||||||
} catch (e) {
|
);
|
||||||
debugPrint('Error while measuring text: $e');
|
textPainter.layout(maxWidth: maxWidth);
|
||||||
didExceedMaxLines = false;
|
didExceedMaxLines = textPainter.didExceedMaxLines;
|
||||||
}
|
} catch (e) {
|
||||||
return Text.rich(
|
debugPrint('Error while measuring text: $e');
|
||||||
style: const TextStyle(height: 1.75),
|
didExceedMaxLines = false;
|
||||||
TextSpan(
|
}
|
||||||
children: [
|
return replyContent(context, didExceedMaxLines, textPainter);
|
||||||
if (replyItem!.isTop!)
|
})
|
||||||
const WidgetSpan(
|
: replyContent(context, false, null),
|
||||||
alignment: PlaceholderAlignment.top,
|
|
||||||
child: PBadge(
|
|
||||||
text: 'TOP',
|
|
||||||
size: 'small',
|
|
||||||
stack: 'normal',
|
|
||||||
type: 'line',
|
|
||||||
fs: 9,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
buildContent(
|
|
||||||
context,
|
|
||||||
replyItem!,
|
|
||||||
replyReply,
|
|
||||||
null,
|
|
||||||
didExceedMaxLines,
|
|
||||||
textPainter,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
// 操作区域
|
// 操作区域
|
||||||
bottonAction(context, replyItem!.replyControl, replySave),
|
bottonAction(context, replyItem!.replyControl, replySave),
|
||||||
@ -307,6 +285,36 @@ class ReplyItem extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget replyContent(
|
||||||
|
BuildContext context, bool? didExceedMaxLines, TextPainter? textPainter) {
|
||||||
|
return Text.rich(
|
||||||
|
style: const TextStyle(height: 1.75),
|
||||||
|
TextSpan(
|
||||||
|
children: [
|
||||||
|
if (replyItem!.isTop!)
|
||||||
|
const WidgetSpan(
|
||||||
|
alignment: PlaceholderAlignment.top,
|
||||||
|
child: PBadge(
|
||||||
|
text: 'TOP',
|
||||||
|
size: 'small',
|
||||||
|
stack: 'normal',
|
||||||
|
type: 'line',
|
||||||
|
fs: 9,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
buildContent(
|
||||||
|
context,
|
||||||
|
replyItem!,
|
||||||
|
replyReply,
|
||||||
|
null,
|
||||||
|
didExceedMaxLines ?? false,
|
||||||
|
textPainter,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// 感谢、回复、复制
|
// 感谢、回复、复制
|
||||||
Widget bottonAction(BuildContext context, replyControl, replySave) {
|
Widget bottonAction(BuildContext context, replyControl, replySave) {
|
||||||
ColorScheme colorScheme = Theme.of(context).colorScheme;
|
ColorScheme colorScheme = Theme.of(context).colorScheme;
|
||||||
|
|||||||
@ -153,6 +153,7 @@ class ChatItem extends StatelessWidget {
|
|||||||
jsonDecode(content['content'])
|
jsonDecode(content['content'])
|
||||||
.map((m) => m['text'] as String)
|
.map((m) => m['text'] as String)
|
||||||
.join("\n"),
|
.join("\n"),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
letterSpacing: 0.6,
|
letterSpacing: 0.6,
|
||||||
height: 5,
|
height: 5,
|
||||||
@ -359,39 +360,40 @@ class ChatItem extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const SizedBox(width: 6),
|
const SizedBox(width: 6),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
i['field1'],
|
i['field1'],
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
letterSpacing: 0.6,
|
letterSpacing: 0.6,
|
||||||
height: 1.5,
|
height: 1.5,
|
||||||
color: textColor(context),
|
color: textColor(context),
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
Text(
|
||||||
Text(
|
i['field2'],
|
||||||
i['field2'],
|
style: TextStyle(
|
||||||
style: TextStyle(
|
letterSpacing: 0.6,
|
||||||
letterSpacing: 0.6,
|
height: 1.5,
|
||||||
height: 1.5,
|
color: textColor(context).withOpacity(0.6),
|
||||||
color: textColor(context).withOpacity(0.6),
|
fontSize: 12,
|
||||||
fontSize: 12,
|
),
|
||||||
),
|
),
|
||||||
),
|
Text(
|
||||||
Text(
|
i['field3'],
|
||||||
i['field3'],
|
style: TextStyle(
|
||||||
style: TextStyle(
|
letterSpacing: 0.6,
|
||||||
letterSpacing: 0.6,
|
height: 1.5,
|
||||||
height: 1.5,
|
color: textColor(context).withOpacity(0.6),
|
||||||
color: textColor(context).withOpacity(0.6),
|
fontSize: 12,
|
||||||
fontSize: 12,
|
),
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
],
|
),
|
||||||
)),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user