mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-06-01 00:28:18 +08:00
@@ -1,6 +1,3 @@
|
|||||||
import 'dart:math' as math;
|
|
||||||
import 'dart:ui' show clampDouble;
|
|
||||||
|
|
||||||
import 'package:PiliPlus/utils/platform_utils.dart';
|
import 'package:PiliPlus/utils/platform_utils.dart';
|
||||||
import 'package:flutter/gestures.dart';
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:flutter/rendering.dart'
|
import 'package:flutter/rendering.dart'
|
||||||
@@ -10,18 +7,14 @@ import 'package:flutter/rendering.dart'
|
|||||||
MultiChildLayoutParentData;
|
MultiChildLayoutParentData;
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
enum TooltipType { top, right }
|
|
||||||
|
|
||||||
class CustomTooltip extends StatefulWidget {
|
class CustomTooltip extends StatefulWidget {
|
||||||
const CustomTooltip({
|
const CustomTooltip({
|
||||||
super.key,
|
super.key,
|
||||||
this.type = TooltipType.top,
|
|
||||||
required this.overlayWidget,
|
required this.overlayWidget,
|
||||||
required this.child,
|
required this.child,
|
||||||
required this.indicator,
|
required this.indicator,
|
||||||
});
|
});
|
||||||
|
|
||||||
final TooltipType type;
|
|
||||||
final Widget child;
|
final Widget child;
|
||||||
final ValueGetter<Widget> overlayWidget;
|
final ValueGetter<Widget> overlayWidget;
|
||||||
final ValueGetter<Widget> indicator;
|
final ValueGetter<Widget> indicator;
|
||||||
@@ -51,27 +44,20 @@ class _CustomTooltipState extends State<CustomTooltip> {
|
|||||||
longPressRecognizer.addPointer(event);
|
longPressRecognizer.addPointer(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildCustomTooltipOverlay(BuildContext context) {
|
Widget _buildCustomTooltipOverlay(
|
||||||
final OverlayState overlayState = Overlay.of(
|
BuildContext context,
|
||||||
context,
|
OverlayChildLayoutInfo layoutInfo,
|
||||||
debugRequiredFor: widget,
|
) {
|
||||||
|
final target = MatrixUtils.transformPoint(
|
||||||
|
layoutInfo.childPaintTransform,
|
||||||
|
layoutInfo.childSize.topCenter(Offset.zero),
|
||||||
);
|
);
|
||||||
final RenderBox box = this.context.findRenderObject()! as RenderBox;
|
|
||||||
final Offset target = box.localToGlobal(
|
|
||||||
box.size.center(Offset.zero),
|
|
||||||
ancestor: overlayState.context.findRenderObject(),
|
|
||||||
);
|
|
||||||
|
|
||||||
final _CustomTooltipOverlay overlayChild = _CustomTooltipOverlay(
|
final _CustomTooltipOverlay overlayChild = _CustomTooltipOverlay(
|
||||||
verticalOffset: box.size.height / 2,
|
|
||||||
horizontalOffset: box.size.width / 2,
|
|
||||||
type: widget.type,
|
|
||||||
target: target,
|
target: target,
|
||||||
onDismiss: _scheduleDismissTooltip,
|
onDismiss: _scheduleDismissTooltip,
|
||||||
overlayWidget: widget.overlayWidget,
|
overlayWidget: widget.overlayWidget,
|
||||||
indicator: widget.indicator,
|
indicator: widget.indicator,
|
||||||
);
|
);
|
||||||
|
|
||||||
return SelectionContainer.maybeOf(context) == null
|
return SelectionContainer.maybeOf(context) == null
|
||||||
? overlayChild
|
? overlayChild
|
||||||
: SelectionContainer.disabled(child: overlayChild);
|
: SelectionContainer.disabled(child: overlayChild);
|
||||||
@@ -105,7 +91,7 @@ class _CustomTooltipState extends State<CustomTooltip> {
|
|||||||
child: widget.child,
|
child: widget.child,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return OverlayPortal(
|
return OverlayPortal.overlayChildLayoutBuilder(
|
||||||
controller: _overlayController,
|
controller: _overlayController,
|
||||||
overlayChildBuilder: _buildCustomTooltipOverlay,
|
overlayChildBuilder: _buildCustomTooltipOverlay,
|
||||||
child: result,
|
child: result,
|
||||||
@@ -117,18 +103,12 @@ enum _ChildType { overlay, indicator }
|
|||||||
|
|
||||||
class _CustomTooltipOverlay extends StatelessWidget {
|
class _CustomTooltipOverlay extends StatelessWidget {
|
||||||
const _CustomTooltipOverlay({
|
const _CustomTooltipOverlay({
|
||||||
required this.verticalOffset,
|
|
||||||
required this.horizontalOffset,
|
|
||||||
required this.type,
|
|
||||||
required this.target,
|
required this.target,
|
||||||
required this.onDismiss,
|
required this.onDismiss,
|
||||||
required this.overlayWidget,
|
required this.overlayWidget,
|
||||||
required this.indicator,
|
required this.indicator,
|
||||||
});
|
});
|
||||||
|
|
||||||
final double verticalOffset;
|
|
||||||
final double horizontalOffset;
|
|
||||||
final TooltipType type;
|
|
||||||
final Offset target;
|
final Offset target;
|
||||||
final VoidCallback onDismiss;
|
final VoidCallback onDismiss;
|
||||||
final ValueGetter<Widget> overlayWidget;
|
final ValueGetter<Widget> overlayWidget;
|
||||||
@@ -137,10 +117,7 @@ class _CustomTooltipOverlay extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return _ToolTip(
|
return _ToolTip(
|
||||||
type: type,
|
|
||||||
target: target,
|
target: target,
|
||||||
verticalOffset: verticalOffset,
|
|
||||||
horizontalOffset: horizontalOffset,
|
|
||||||
preferBelow: false,
|
preferBelow: false,
|
||||||
onTap: PlatformUtils.isMobile ? onDismiss : null,
|
onTap: PlatformUtils.isMobile ? onDismiss : null,
|
||||||
children: [
|
children: [
|
||||||
@@ -161,28 +138,19 @@ class _ToolTip extends MultiChildRenderObjectWidget {
|
|||||||
const _ToolTip({
|
const _ToolTip({
|
||||||
super.children,
|
super.children,
|
||||||
this.onTap,
|
this.onTap,
|
||||||
required this.type,
|
|
||||||
required this.target,
|
required this.target,
|
||||||
required this.verticalOffset,
|
|
||||||
required this.horizontalOffset,
|
|
||||||
required this.preferBelow,
|
required this.preferBelow,
|
||||||
});
|
});
|
||||||
|
|
||||||
final VoidCallback? onTap;
|
final VoidCallback? onTap;
|
||||||
final TooltipType type;
|
|
||||||
final Offset target;
|
final Offset target;
|
||||||
final double verticalOffset;
|
|
||||||
final double horizontalOffset;
|
|
||||||
final bool preferBelow;
|
final bool preferBelow;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
RenderObject createRenderObject(BuildContext context) {
|
RenderObject createRenderObject(BuildContext context) {
|
||||||
return _RenderToolTip(
|
return _RenderToolTip(
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
type: type,
|
|
||||||
target: target,
|
target: target,
|
||||||
verticalOffset: verticalOffset,
|
|
||||||
horizontalOffset: horizontalOffset,
|
|
||||||
preferBelow: preferBelow,
|
preferBelow: preferBelow,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -192,8 +160,6 @@ class _ToolTip extends MultiChildRenderObjectWidget {
|
|||||||
renderObject
|
renderObject
|
||||||
..onTap = onTap
|
..onTap = onTap
|
||||||
..target = target
|
..target = target
|
||||||
..verticalOffset = verticalOffset
|
|
||||||
..horizontalOffset = horizontalOffset
|
|
||||||
..preferBelow = preferBelow;
|
..preferBelow = preferBelow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -204,15 +170,9 @@ class _RenderToolTip extends RenderBox
|
|||||||
RenderBoxContainerDefaultsMixin<RenderBox, MultiChildLayoutParentData> {
|
RenderBoxContainerDefaultsMixin<RenderBox, MultiChildLayoutParentData> {
|
||||||
_RenderToolTip({
|
_RenderToolTip({
|
||||||
VoidCallback? onTap,
|
VoidCallback? onTap,
|
||||||
required TooltipType type,
|
|
||||||
required Offset target,
|
required Offset target,
|
||||||
required double verticalOffset,
|
|
||||||
required double horizontalOffset,
|
|
||||||
required bool preferBelow,
|
required bool preferBelow,
|
||||||
}) : _type = type,
|
}) : _target = target,
|
||||||
_target = target,
|
|
||||||
_verticalOffset = verticalOffset,
|
|
||||||
_horizontalOffset = horizontalOffset,
|
|
||||||
_preferBelow = preferBelow,
|
_preferBelow = preferBelow,
|
||||||
_hitTestSelf = onTap != null {
|
_hitTestSelf = onTap != null {
|
||||||
if (onTap != null) {
|
if (onTap != null) {
|
||||||
@@ -246,8 +206,6 @@ class _RenderToolTip extends RenderBox
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final TooltipType _type;
|
|
||||||
|
|
||||||
Offset _target;
|
Offset _target;
|
||||||
Offset get target => _target;
|
Offset get target => _target;
|
||||||
set target(Offset value) {
|
set target(Offset value) {
|
||||||
@@ -256,22 +214,6 @@ class _RenderToolTip extends RenderBox
|
|||||||
markNeedsPaint();
|
markNeedsPaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
double _verticalOffset;
|
|
||||||
double get verticalOffset => _verticalOffset;
|
|
||||||
set verticalOffset(double value) {
|
|
||||||
if (_verticalOffset == value) return;
|
|
||||||
_verticalOffset = value;
|
|
||||||
markNeedsPaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
double _horizontalOffset;
|
|
||||||
double get horizontalOffset => _horizontalOffset;
|
|
||||||
set horizontalOffset(double value) {
|
|
||||||
if (_horizontalOffset == value) return;
|
|
||||||
_horizontalOffset = value;
|
|
||||||
markNeedsPaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool _preferBelow;
|
bool _preferBelow;
|
||||||
bool get preferBelow => _preferBelow;
|
bool get preferBelow => _preferBelow;
|
||||||
set preferBelow(bool value) {
|
set preferBelow(bool value) {
|
||||||
@@ -302,15 +244,10 @@ class _RenderToolTip extends RenderBox
|
|||||||
indicator.parentData as MultiChildLayoutParentData;
|
indicator.parentData as MultiChildLayoutParentData;
|
||||||
final overlayParentData = overlay.parentData as MultiChildLayoutParentData;
|
final overlayParentData = overlay.parentData as MultiChildLayoutParentData;
|
||||||
|
|
||||||
switch (_type) {
|
Offset offset = positionDependentBox(
|
||||||
case TooltipType.top:
|
|
||||||
Offset offset = _positionDependentBox(
|
|
||||||
type: _type,
|
|
||||||
size: size,
|
size: size,
|
||||||
childSize: overlaySize,
|
childSize: overlaySize,
|
||||||
target: target,
|
target: target,
|
||||||
verticalOffset: verticalOffset,
|
|
||||||
horizontalOffset: horizontalOffset,
|
|
||||||
preferBelow: preferBelow,
|
preferBelow: preferBelow,
|
||||||
);
|
);
|
||||||
offset = Offset(offset.dx, offset.dy - indicatorSize.height + 1);
|
offset = Offset(offset.dx, offset.dy - indicatorSize.height + 1);
|
||||||
@@ -319,23 +256,6 @@ class _RenderToolTip extends RenderBox
|
|||||||
target.dx - indicatorSize.width / 2,
|
target.dx - indicatorSize.width / 2,
|
||||||
offset.dy + overlaySize.height - 1,
|
offset.dy + overlaySize.height - 1,
|
||||||
);
|
);
|
||||||
case TooltipType.right:
|
|
||||||
Offset offset = _positionDependentBox(
|
|
||||||
type: _type,
|
|
||||||
size: size,
|
|
||||||
childSize: overlaySize,
|
|
||||||
target: target,
|
|
||||||
verticalOffset: verticalOffset,
|
|
||||||
horizontalOffset: horizontalOffset,
|
|
||||||
preferBelow: preferBelow,
|
|
||||||
);
|
|
||||||
offset = Offset(offset.dx + indicatorSize.height - 1, offset.dy);
|
|
||||||
overlayParentData.offset = offset;
|
|
||||||
Offset(
|
|
||||||
offset.dx - indicatorSize.width + 1,
|
|
||||||
target.dy - indicatorSize.height / 2,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -357,19 +277,16 @@ class Triangle extends LeafRenderObjectWidget {
|
|||||||
super.key,
|
super.key,
|
||||||
required this.color,
|
required this.color,
|
||||||
required this.size,
|
required this.size,
|
||||||
this.type = .top,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final Color color;
|
final Color color;
|
||||||
final Size size;
|
final Size size;
|
||||||
final TooltipType type;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
RenderObject createRenderObject(BuildContext context) {
|
RenderObject createRenderObject(BuildContext context) {
|
||||||
return RenderTriangle(
|
return RenderTriangle(
|
||||||
color: color,
|
color: color,
|
||||||
preferredSize: size,
|
preferredSize: size,
|
||||||
type: type,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,10 +305,8 @@ class RenderTriangle extends RenderBox {
|
|||||||
RenderTriangle({
|
RenderTriangle({
|
||||||
required Color color,
|
required Color color,
|
||||||
required Size preferredSize,
|
required Size preferredSize,
|
||||||
required TooltipType type,
|
|
||||||
}) : _color = color,
|
}) : _color = color,
|
||||||
_preferredSize = preferredSize,
|
_preferredSize = preferredSize;
|
||||||
_type = type;
|
|
||||||
|
|
||||||
Color _color;
|
Color _color;
|
||||||
Color get color => _color;
|
Color get color => _color;
|
||||||
@@ -408,8 +323,6 @@ class RenderTriangle extends RenderBox {
|
|||||||
markNeedsLayout();
|
markNeedsLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
final TooltipType _type;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void performLayout() {
|
void performLayout() {
|
||||||
size = constraints.constrain(_preferredSize);
|
size = constraints.constrain(_preferredSize);
|
||||||
@@ -422,21 +335,11 @@ class RenderTriangle extends RenderBox {
|
|||||||
..color = color
|
..color = color
|
||||||
..style = PaintingStyle.fill;
|
..style = PaintingStyle.fill;
|
||||||
|
|
||||||
Path path;
|
final path = Path()
|
||||||
switch (_type) {
|
|
||||||
case TooltipType.top:
|
|
||||||
path = Path()
|
|
||||||
..moveTo(0, 0)
|
..moveTo(0, 0)
|
||||||
..lineTo(size.width, 0)
|
..lineTo(size.width, 0)
|
||||||
..lineTo(size.width / 2, size.height)
|
..lineTo(size.width / 2, size.height)
|
||||||
..close();
|
..close();
|
||||||
case TooltipType.right:
|
|
||||||
path = Path()
|
|
||||||
..moveTo(0, size.height / 2)
|
|
||||||
..lineTo(size.width, 0)
|
|
||||||
..lineTo(size.width, size.height)
|
|
||||||
..close();
|
|
||||||
}
|
|
||||||
|
|
||||||
context.canvas.drawPath(path, paint);
|
context.canvas.drawPath(path, paint);
|
||||||
}
|
}
|
||||||
@@ -444,50 +347,3 @@ class RenderTriangle extends RenderBox {
|
|||||||
@override
|
@override
|
||||||
bool get isRepaintBoundary => true;
|
bool get isRepaintBoundary => true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Offset _positionDependentBox({
|
|
||||||
required TooltipType type,
|
|
||||||
required Size size,
|
|
||||||
required Size childSize,
|
|
||||||
required Offset target,
|
|
||||||
required bool preferBelow,
|
|
||||||
double verticalOffset = 0.0,
|
|
||||||
double horizontalOffset = 0.0,
|
|
||||||
double margin = 10.0,
|
|
||||||
}) {
|
|
||||||
switch (type) {
|
|
||||||
case TooltipType.top:
|
|
||||||
// VERTICAL DIRECTION
|
|
||||||
final bool fitsBelow =
|
|
||||||
target.dy + verticalOffset + childSize.height <= size.height - margin;
|
|
||||||
final bool fitsAbove =
|
|
||||||
target.dy - verticalOffset - childSize.height >= margin;
|
|
||||||
final bool tooltipBelow = fitsAbove == fitsBelow
|
|
||||||
? preferBelow
|
|
||||||
: fitsBelow;
|
|
||||||
final double y;
|
|
||||||
if (tooltipBelow) {
|
|
||||||
y = math.min(target.dy + verticalOffset, size.height - margin);
|
|
||||||
} else {
|
|
||||||
y = math.max(target.dy - verticalOffset - childSize.height, margin);
|
|
||||||
} // HORIZONTAL DIRECTION
|
|
||||||
final double flexibleSpace = size.width - childSize.width;
|
|
||||||
final double x = flexibleSpace <= 2 * margin
|
|
||||||
// If there's not enough horizontal space for margin + child, center the
|
|
||||||
// child.
|
|
||||||
? flexibleSpace / 2.0
|
|
||||||
: clampDouble(
|
|
||||||
target.dx - childSize.width / 2,
|
|
||||||
margin,
|
|
||||||
flexibleSpace - margin,
|
|
||||||
);
|
|
||||||
return Offset(x, y);
|
|
||||||
case TooltipType.right:
|
|
||||||
final double dy = math.max(margin, target.dy - childSize.height / 2);
|
|
||||||
final double dx = math.min(
|
|
||||||
target.dx + horizontalOffset,
|
|
||||||
size.width - childSize.width - margin,
|
|
||||||
);
|
|
||||||
return Offset(dx, dy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -40,12 +40,12 @@ mixin CommonSlideMixin<T extends CommonSlidePage> on State<T>, TickerProvider {
|
|||||||
final isRTL = dx >= _maxWidth - offset;
|
final isRTL = dx >= _maxWidth - offset;
|
||||||
if (isLTR || isRTL) {
|
if (isLTR || isRTL) {
|
||||||
_isRTL = isRTL;
|
_isRTL = isRTL;
|
||||||
_downDx = dx;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
..onStart = _onDragStart
|
||||||
..onUpdate = _onDragUpdate
|
..onUpdate = _onDragUpdate
|
||||||
..onEnd = _onDragEnd
|
..onEnd = _onDragEnd
|
||||||
..onCancel = _onDragEnd;
|
..onCancel = _onDragEnd;
|
||||||
@@ -101,6 +101,10 @@ mixin CommonSlideMixin<T extends CommonSlidePage> on State<T>, TickerProvider {
|
|||||||
_downDx = null;
|
_downDx = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _onDragStart(DragStartDetails details) {
|
||||||
|
_downDx = details.localPosition.dx;
|
||||||
|
}
|
||||||
|
|
||||||
void _onDragUpdate(DragUpdateDetails details) {
|
void _onDragUpdate(DragUpdateDetails details) {
|
||||||
final from = _downDx!;
|
final from = _downDx!;
|
||||||
final to = details.localPosition.dx;
|
final to = details.localPosition.dx;
|
||||||
|
|||||||
@@ -1344,13 +1344,13 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
|
|||||||
required double height,
|
required double height,
|
||||||
bool isPipMode = false,
|
bool isPipMode = false,
|
||||||
}) => PopScope(
|
}) => PopScope(
|
||||||
|
key: videoDetailController.videoPlayerKey,
|
||||||
canPop:
|
canPop:
|
||||||
!isFullScreen &&
|
!isFullScreen &&
|
||||||
!videoDetailController.plPlayerController.isDesktopPip &&
|
!videoDetailController.plPlayerController.isDesktopPip &&
|
||||||
(videoDetailController.horizontalScreen || isPortrait),
|
(videoDetailController.horizontalScreen || isPortrait),
|
||||||
onPopInvokedWithResult: _onPopInvokedWithResult,
|
onPopInvokedWithResult: _onPopInvokedWithResult,
|
||||||
child: Obx(
|
child: Obx(
|
||||||
key: videoDetailController.videoPlayerKey,
|
|
||||||
() =>
|
() =>
|
||||||
videoDetailController.videoState.value is! Success ||
|
videoDetailController.videoState.value is! Success ||
|
||||||
!videoDetailController.autoPlay.value ||
|
!videoDetailController.autoPlay.value ||
|
||||||
|
|||||||
@@ -98,13 +98,7 @@ abstract final class ReplyUtils {
|
|||||||
await Future.delayed(const Duration(seconds: 8));
|
await Future.delayed(const Duration(seconds: 8));
|
||||||
}
|
}
|
||||||
void showReplyCheckResult(String message, {bool isBan = false}) {
|
void showReplyCheckResult(String message, {bool isBan = false}) {
|
||||||
showDialog(
|
final actions = [
|
||||||
context: Get.context!,
|
|
||||||
barrierDismissible: isManual,
|
|
||||||
builder: (context) => AlertDialog(
|
|
||||||
title: const Text('评论检查结果'),
|
|
||||||
content: SelectableText(message),
|
|
||||||
actions: [
|
|
||||||
if (isBan)
|
if (isBan)
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@@ -137,7 +131,14 @@ abstract final class ReplyUtils {
|
|||||||
style: TextStyle(color: Get.theme.colorScheme.outline),
|
style: TextStyle(color: Get.theme.colorScheme.outline),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
];
|
||||||
|
showDialog(
|
||||||
|
context: Get.context!,
|
||||||
|
barrierDismissible: isManual,
|
||||||
|
builder: (context) => AlertDialog(
|
||||||
|
title: const Text('评论检查结果'),
|
||||||
|
content: SelectableText(message),
|
||||||
|
actions: actions.isEmpty ? null : actions,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -316,15 +316,7 @@ abstract final class RequestUtils {
|
|||||||
clearCookie: true,
|
clearCookie: true,
|
||||||
);
|
);
|
||||||
final isSuccess = res.isSuccess;
|
final isSuccess = res.isSuccess;
|
||||||
showDialog(
|
final actions = [
|
||||||
context: Get.context!,
|
|
||||||
barrierDismissible: isManual,
|
|
||||||
builder: (context) => AlertDialog(
|
|
||||||
title: const Text('动态检查结果'),
|
|
||||||
content: SelectableText(
|
|
||||||
'${isSuccess ? '无账号状态下找到了你的动态,动态正常!' : '你的动态被shadow ban(仅自己可见)!'}${dynText != null ? ' \n\n动态内容: $dynText' : ''}',
|
|
||||||
),
|
|
||||||
actions: [
|
|
||||||
if (!isSuccess)
|
if (!isSuccess)
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@@ -348,7 +340,16 @@ abstract final class RequestUtils {
|
|||||||
style: TextStyle(color: Get.theme.colorScheme.outline),
|
style: TextStyle(color: Get.theme.colorScheme.outline),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
];
|
||||||
|
showDialog(
|
||||||
|
context: Get.context!,
|
||||||
|
barrierDismissible: isManual,
|
||||||
|
builder: (context) => AlertDialog(
|
||||||
|
title: const Text('动态检查结果'),
|
||||||
|
content: SelectableText(
|
||||||
|
'${isSuccess ? '无账号状态下找到了你的动态,动态正常!' : '你的动态被shadow ban(仅自己可见)!'}${dynText != null ? ' \n\n动态内容: $dynText' : ''}',
|
||||||
|
),
|
||||||
|
actions: actions.isEmpty ? null : actions,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user