mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
@@ -43,12 +43,12 @@ class _AboutPageState extends State<AboutPage> {
|
||||
getCurrentApp();
|
||||
}
|
||||
|
||||
Future getCacheSize() async {
|
||||
Future<void> getCacheSize() async {
|
||||
cacheSize.value =
|
||||
CacheManage.formatSize(await CacheManage().loadApplicationCache());
|
||||
}
|
||||
|
||||
Future getCurrentApp() async {
|
||||
Future<void> getCurrentApp() async {
|
||||
var currentInfo = await PackageInfo.fromPlatform();
|
||||
String buildNumber = currentInfo.buildNumber;
|
||||
currentVersion.value = "${currentInfo.version}+$buildNumber";
|
||||
|
||||
@@ -149,7 +149,7 @@ class ArticleController extends ReplyController<MainListReply> {
|
||||
}
|
||||
|
||||
// 请求动态内容
|
||||
Future _queryContent() async {
|
||||
Future<void> _queryContent() async {
|
||||
if (type != 'read') {
|
||||
isLoaded.value = await queryOpus(id);
|
||||
} else {
|
||||
@@ -182,7 +182,7 @@ class ArticleController extends ReplyController<MainListReply> {
|
||||
);
|
||||
}
|
||||
|
||||
Future onFav() async {
|
||||
Future<void> onFav() async {
|
||||
bool isFav = stats.value?.favorite?.status == true;
|
||||
final res = type == 'read'
|
||||
? isFav
|
||||
@@ -204,7 +204,7 @@ class ArticleController extends ReplyController<MainListReply> {
|
||||
}
|
||||
}
|
||||
|
||||
Future onLike() async {
|
||||
Future<void> onLike() async {
|
||||
bool isLike = stats.value?.like?.status == true;
|
||||
final res = await DynamicsHttp.thumbDynamic(
|
||||
dynamicId: opusData?.idStr ?? articleData?.dynIdStr,
|
||||
|
||||
@@ -36,7 +36,7 @@ class BangumiController extends CommonListController<
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
if (isLogin.value) {
|
||||
followPage = 1;
|
||||
followEnd = false;
|
||||
@@ -61,13 +61,13 @@ class BangumiController extends CommonListController<
|
||||
late Rx<LoadingState<List<Result>?>> timelineState =
|
||||
LoadingState<List<Result>?>.loading().obs;
|
||||
|
||||
Future queryPgcTimeline() async {
|
||||
Future<void> queryPgcTimeline() async {
|
||||
final res = await BangumiHttp.pgcTimeline(types: 1, before: 6, after: 6);
|
||||
timelineState.value = res;
|
||||
}
|
||||
|
||||
// 我的订阅
|
||||
Future queryBangumiFollow([bool isRefresh = true]) async {
|
||||
Future<void> queryBangumiFollow([bool isRefresh = true]) async {
|
||||
if (isLogin.value.not || followLoading || (isRefresh.not && followEnd)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ abstract class CommonController<R, T> extends GetxController
|
||||
|
||||
void checkIsEnd(int length) {}
|
||||
|
||||
Future queryData([bool isRefresh = true]) async {
|
||||
Future<void> queryData([bool isRefresh = true]) async {
|
||||
if (isLoading || (isRefresh.not && isEnd)) return;
|
||||
isLoading = true;
|
||||
LoadingState<R> response = await customGetData();
|
||||
|
||||
@@ -159,7 +159,7 @@ abstract class CommonPublishPageState<T extends CommonPublishPage>
|
||||
return false;
|
||||
}
|
||||
|
||||
Future onPublish() async {
|
||||
Future<void> onPublish() async {
|
||||
feedBack();
|
||||
List<Map<String, dynamic>>? pictures;
|
||||
if (pathList.isNotEmpty) {
|
||||
@@ -194,7 +194,7 @@ abstract class CommonPublishPageState<T extends CommonPublishPage>
|
||||
onCustomPublish(message: editController.text, pictures: pictures);
|
||||
}
|
||||
|
||||
Future onCustomPublish({required String message, List? pictures});
|
||||
Future<void> onCustomPublish({required String message, List? pictures});
|
||||
|
||||
void onChooseEmote(emote) {
|
||||
enablePublish.value = true;
|
||||
|
||||
@@ -15,7 +15,7 @@ abstract class CommonSearchController<R, T> extends CommonListController<R, T> {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
if (editController.value.text.isEmpty) {
|
||||
return Future.value();
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ abstract class ReplyController<R> extends CommonListController<R, ReplyInfo> {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
cursorNext = null;
|
||||
paginationReply = null;
|
||||
return super.onRefresh();
|
||||
|
||||
@@ -73,7 +73,7 @@ class DynamicsController extends GetxController
|
||||
initialValue.value = value;
|
||||
}
|
||||
|
||||
Future queryFollowing2() async {
|
||||
Future<void> queryFollowing2() async {
|
||||
if (upData.value.upList != null &&
|
||||
upData.value.upList!.length >= allFollowedUpsTotal) {
|
||||
return;
|
||||
@@ -108,7 +108,7 @@ class DynamicsController extends GetxController
|
||||
}
|
||||
|
||||
late bool isQuerying = false;
|
||||
Future queryFollowUp({type = 'init'}) async {
|
||||
Future<void> queryFollowUp({type = 'init'}) async {
|
||||
if (isQuerying) return;
|
||||
isQuerying = true;
|
||||
if (!isLogin.value) {
|
||||
|
||||
@@ -31,7 +31,7 @@ class _ActionPanelState extends State<ActionPanel> {
|
||||
}
|
||||
|
||||
// 动态点赞
|
||||
Future onLikeDynamic() async {
|
||||
Future<void> onLikeDynamic() async {
|
||||
feedBack();
|
||||
final item = widget.item;
|
||||
String dynamicId = item.idStr!;
|
||||
|
||||
@@ -459,7 +459,8 @@ class _CreateDynPanelState extends CommonPublishPageState<CreateDynPanel> {
|
||||
Widget? get customPanel => EmotePanel(onChoose: onChooseEmote);
|
||||
|
||||
@override
|
||||
Future onCustomPublish({required String message, List? pictures}) async {
|
||||
Future<void> onCustomPublish(
|
||||
{required String message, List? pictures}) async {
|
||||
SmartDialog.showLoading(msg: '正在发布');
|
||||
dynamic result = await MsgHttp.createDynamic(
|
||||
mid: Accounts.main.mid,
|
||||
|
||||
@@ -342,7 +342,8 @@ class _RepostPanelState extends CommonPublishPageState<RepostPanel> {
|
||||
Widget? get customPanel => EmotePanel(onChoose: onChooseEmote);
|
||||
|
||||
@override
|
||||
Future onCustomPublish({required String message, List? pictures}) async {
|
||||
Future<void> onCustomPublish(
|
||||
{required String message, List? pictures}) async {
|
||||
dynamic result = await MsgHttp.createDynamic(
|
||||
mid: Accounts.main.mid,
|
||||
dynIdStr: widget.item?.idStr ?? widget.dynIdStr,
|
||||
|
||||
@@ -25,7 +25,7 @@ class DynamicsTabController
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
if (dynamicsType == 'all') {
|
||||
mainController.setCount();
|
||||
}
|
||||
@@ -54,7 +54,7 @@ class DynamicsTabController
|
||||
mid: dynamicsType == "up" ? mid : -1,
|
||||
);
|
||||
|
||||
Future onRemove(dynamic dynamicId) async {
|
||||
Future<void> onRemove(dynamic dynamicId) async {
|
||||
var res = await MsgHttp.removeDynamic(dynIdStr: dynamicId);
|
||||
if (res['status']) {
|
||||
loadingState.value.data!.removeWhere((item) => item.idStr == dynamicId);
|
||||
@@ -65,7 +65,7 @@ class DynamicsTabController
|
||||
}
|
||||
}
|
||||
|
||||
Future onSetTop(bool isTop, dynamic dynamicId) async {
|
||||
Future<void> onSetTop(bool isTop, dynamic dynamicId) async {
|
||||
var res = await DynamicsHttp.setTop(dynamicId: dynamicId);
|
||||
if (res['status']) {
|
||||
SmartDialog.showToast('${isTop ? '取消' : ''}置顶成功');
|
||||
@@ -75,7 +75,7 @@ class DynamicsTabController
|
||||
}
|
||||
|
||||
@override
|
||||
Future onReload() {
|
||||
Future<void> onReload() {
|
||||
scrollController.jumpToTop();
|
||||
return super.onReload();
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class FansController
|
||||
orderType: 'attention',
|
||||
);
|
||||
|
||||
Future onRemoveFan(int index, int mid) async {
|
||||
Future<void> onRemoveFan(int index, int mid) async {
|
||||
final res = await VideoHttp.relationMod(
|
||||
mid: mid,
|
||||
act: 7,
|
||||
|
||||
@@ -54,7 +54,7 @@ class FavPgcController
|
||||
}
|
||||
|
||||
// 取消追番
|
||||
Future bangumiDel(index, seasonId) async {
|
||||
Future<void> bangumiDel(index, seasonId) async {
|
||||
var result = await VideoHttp.bangumiDel(seasonId: seasonId);
|
||||
if (result['status']) {
|
||||
loadingState.value.data!.removeAt(index);
|
||||
@@ -63,7 +63,7 @@ class FavPgcController
|
||||
SmartDialog.showToast(result['msg']);
|
||||
}
|
||||
|
||||
Future onUpdateList(followStatus) async {
|
||||
Future<void> onUpdateList(followStatus) async {
|
||||
List<BangumiListItemModel> dataList =
|
||||
(loadingState.value as Success).response as List<BangumiListItemModel>;
|
||||
Set<BangumiListItemModel> updateList =
|
||||
@@ -92,7 +92,7 @@ class FavPgcController
|
||||
SmartDialog.showToast(res['msg']);
|
||||
}
|
||||
|
||||
Future onUpdate(index, followStatus, seasonId) async {
|
||||
Future<void> onUpdate(index, followStatus, seasonId) async {
|
||||
var result = await VideoHttp.bangumiUpdate(
|
||||
seasonId: [seasonId],
|
||||
status: followStatus,
|
||||
|
||||
@@ -15,7 +15,7 @@ class FavController
|
||||
}
|
||||
|
||||
@override
|
||||
Future queryData([bool isRefresh = true]) {
|
||||
Future<void> queryData([bool isRefresh = true]) {
|
||||
if (mid == 0) {
|
||||
loadingState.value = LoadingState.error('账号未登录');
|
||||
return Future.value();
|
||||
|
||||
@@ -173,7 +173,7 @@ class FavDetailController
|
||||
}
|
||||
|
||||
@override
|
||||
Future onReload() {
|
||||
Future<void> onReload() {
|
||||
scrollController.jumpToTop();
|
||||
return super.onReload();
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class FollowController extends GetxController with GetTickerProviderStateMixin {
|
||||
}
|
||||
}
|
||||
|
||||
Future queryFollowUpTags() async {
|
||||
Future<void> queryFollowUpTags() async {
|
||||
var res = await MemberHttp.followUpTags();
|
||||
if (res['status']) {
|
||||
tabs
|
||||
@@ -59,7 +59,7 @@ class FollowController extends GetxController with GetTickerProviderStateMixin {
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
Future onCreateTag(String tagName) async {
|
||||
Future<void> onCreateTag(String tagName) async {
|
||||
final res = await MemberHttp.createFollowTag(tagName);
|
||||
if (res['status']) {
|
||||
followState.value = LoadingState.loading();
|
||||
@@ -70,7 +70,7 @@ class FollowController extends GetxController with GetTickerProviderStateMixin {
|
||||
}
|
||||
}
|
||||
|
||||
Future onUpdateTag(int index, tagid, String tagName) async {
|
||||
Future<void> onUpdateTag(int index, tagid, String tagName) async {
|
||||
final res = await MemberHttp.updateFollowTag(tagid, tagName);
|
||||
if (res['status']) {
|
||||
tabs[index].name = tagName;
|
||||
@@ -81,7 +81,7 @@ class FollowController extends GetxController with GetTickerProviderStateMixin {
|
||||
}
|
||||
}
|
||||
|
||||
Future onDelTag(tagid) async {
|
||||
Future<void> onDelTag(tagid) async {
|
||||
final res = await MemberHttp.delFollowTag(tagid);
|
||||
if (res['status']) {
|
||||
followState.value = LoadingState.loading();
|
||||
|
||||
@@ -30,7 +30,7 @@ class HistoryController extends MultiSelectController<HistoryData, HisListItem>
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
max = null;
|
||||
viewAt = null;
|
||||
return super.onRefresh();
|
||||
@@ -91,7 +91,7 @@ class HistoryController extends MultiSelectController<HistoryData, HisListItem>
|
||||
}
|
||||
|
||||
// 观看历史暂停状态
|
||||
Future historyStatus() async {
|
||||
Future<void> historyStatus() async {
|
||||
var res = await UserHttp.historyStatus();
|
||||
if (res['status']) {
|
||||
baseCtr.pauseStatus.value = res['data'];
|
||||
@@ -194,7 +194,7 @@ class HistoryController extends MultiSelectController<HistoryData, HisListItem>
|
||||
}
|
||||
|
||||
@override
|
||||
Future onReload() {
|
||||
Future<void> onReload() {
|
||||
scrollController.jumpToTop();
|
||||
return super.onReload();
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ class HistorySearchController
|
||||
return response.list;
|
||||
}
|
||||
|
||||
Future onDelHistory(index, kid, business) async {
|
||||
Future<void> onDelHistory(index, kid, business) async {
|
||||
String resKid = 'archive_$kid';
|
||||
if (business == 'live') {
|
||||
resKid = 'live_$kid';
|
||||
|
||||
@@ -233,7 +233,7 @@ class LaterController extends MultiSelectController<Map, HotVideoItemModel> {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onReload() {
|
||||
Future<void> onReload() {
|
||||
scrollController.jumpToTop();
|
||||
return super.onReload();
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ class LaterSearchController
|
||||
return response['list'];
|
||||
}
|
||||
|
||||
Future toViewDel(BuildContext context, int index, aid) async {
|
||||
Future<void> toViewDel(BuildContext context, int index, aid) async {
|
||||
var res = await UserHttp.toViewDel(aids: [aid]);
|
||||
if (res['status']) {
|
||||
loadingState.value.data!.removeAt(index);
|
||||
|
||||
@@ -77,7 +77,7 @@ class LiveRoomController extends GetxController {
|
||||
|
||||
final RxBool isPortrait = false.obs;
|
||||
|
||||
Future queryLiveInfo() async {
|
||||
Future<void> queryLiveInfo() async {
|
||||
if (currentQn == null) {
|
||||
await Connectivity().checkConnectivity().then((res) {
|
||||
currentQn = res.contains(ConnectivityResult.wifi)
|
||||
@@ -122,7 +122,7 @@ class LiveRoomController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future queryLiveInfoH5() async {
|
||||
Future<void> queryLiveInfoH5() async {
|
||||
var res = await LiveHttp.liveRoomInfoH5(roomId: roomId);
|
||||
if (res['status']) {
|
||||
roomInfoH5.value = res['data'];
|
||||
|
||||
@@ -188,7 +188,7 @@ class _ReplyPageState extends CommonPublishPageState<LiveSendDmPanel> {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onCustomPublish({
|
||||
Future<void> onCustomPublish({
|
||||
required String message,
|
||||
List? pictures,
|
||||
int? dmType,
|
||||
|
||||
@@ -656,7 +656,7 @@ class LoginPageController extends GetxController
|
||||
}
|
||||
}
|
||||
|
||||
static Future switchAccountDialog(BuildContext context) {
|
||||
static Future<void> switchAccountDialog(BuildContext context) {
|
||||
if (Accounts.account.isEmpty) {
|
||||
return SmartDialog.showToast('请先登录');
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ class MainController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future queryUnreadMsg() async {
|
||||
Future<void> queryUnreadMsg() async {
|
||||
if (isLogin.value.not || homeIndex == -1 || msgUnReadTypes.isEmpty) {
|
||||
msgUnReadCount.value = '';
|
||||
return;
|
||||
|
||||
@@ -225,7 +225,7 @@ class MemberController extends CommonDataController<SpaceData, SpaceData?>
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
Future onRemoveFan() async {
|
||||
Future<void> onRemoveFan() async {
|
||||
final res = await VideoHttp.relationMod(
|
||||
mid: mid,
|
||||
act: 7,
|
||||
|
||||
@@ -20,13 +20,13 @@ class MemberDynamicsController
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
offset = '';
|
||||
return super.onRefresh();
|
||||
}
|
||||
|
||||
@override
|
||||
Future queryData([bool isRefresh = true]) {
|
||||
Future<void> queryData([bool isRefresh = true]) {
|
||||
if (isRefresh.not && (isEnd || offset == '-1')) {
|
||||
return Future.value();
|
||||
}
|
||||
@@ -56,7 +56,7 @@ class MemberDynamicsController
|
||||
mid: mid,
|
||||
);
|
||||
|
||||
Future onRemove(dynamicId) async {
|
||||
Future<void> onRemove(dynamicId) async {
|
||||
var res = await MsgHttp.removeDynamic(dynIdStr: dynamicId);
|
||||
if (res['status']) {
|
||||
loadingState.value.data!.removeWhere((item) => item.idStr == dynamicId);
|
||||
@@ -67,7 +67,7 @@ class MemberDynamicsController
|
||||
}
|
||||
}
|
||||
|
||||
Future onSetTop(bool isTop, dynamic dynamicId) async {
|
||||
Future<void> onSetTop(bool isTop, dynamic dynamicId) async {
|
||||
var res = await DynamicsHttp.setTop(dynamicId: dynamicId);
|
||||
if (res['status']) {
|
||||
List<DynamicItemModel> list = (loadingState.value as Success).response;
|
||||
|
||||
@@ -32,7 +32,7 @@ class MemberFavoriteCtr extends CommonDataController {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
page = 2;
|
||||
page1 = 2;
|
||||
return super.onRefresh();
|
||||
@@ -56,7 +56,7 @@ class MemberFavoriteCtr extends CommonDataController {
|
||||
return true;
|
||||
}
|
||||
|
||||
Future userfavFolder() async {
|
||||
Future<void> userfavFolder() async {
|
||||
var res = await Request().get(Api.userFavFolder, queryParameters: {
|
||||
'pn': page,
|
||||
'ps': 20,
|
||||
@@ -80,7 +80,7 @@ class MemberFavoriteCtr extends CommonDataController {
|
||||
}
|
||||
}
|
||||
|
||||
Future userSubFolder() async {
|
||||
Future<void> userSubFolder() async {
|
||||
var res = await Request().get(Api.userSubFolder, queryParameters: {
|
||||
'up_mid': mid,
|
||||
'ps': 20,
|
||||
|
||||
@@ -44,7 +44,7 @@ class MemberVideoCtr
|
||||
bool? hasPrev;
|
||||
|
||||
@override
|
||||
Future onRefresh() async {
|
||||
Future<void> onRefresh() async {
|
||||
if (isLocating == true) {
|
||||
if (hasPrev == true) {
|
||||
isLoadPrevious = true;
|
||||
@@ -220,7 +220,7 @@ class MemberVideoCtr
|
||||
}
|
||||
|
||||
@override
|
||||
Future onReload() {
|
||||
Future<void> onReload() {
|
||||
isLocating = null;
|
||||
return super.onReload();
|
||||
}
|
||||
|
||||
@@ -50,9 +50,9 @@ class MineController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future queryUserInfo() async {
|
||||
Future<void> queryUserInfo() async {
|
||||
if (!isLogin.value) {
|
||||
return {'status': false};
|
||||
return;
|
||||
}
|
||||
var res = await UserHttp.userInfo();
|
||||
if (res['status']) {
|
||||
@@ -74,7 +74,7 @@ class MineController extends GetxController {
|
||||
queryUserStatOwner();
|
||||
}
|
||||
|
||||
Future queryUserStatOwner() async {
|
||||
Future<void> queryUserStatOwner() async {
|
||||
var res = await UserHttp.userStatOwner();
|
||||
if (res['status']) {
|
||||
userStat.value = res['data'];
|
||||
|
||||
@@ -31,7 +31,7 @@ class AtMeController extends CommonListController<MsgFeedAtMe, AtMeItems> {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
cursor = -1;
|
||||
cursorTime = -1;
|
||||
return super.onRefresh();
|
||||
@@ -41,7 +41,7 @@ class AtMeController extends CommonListController<MsgFeedAtMe, AtMeItems> {
|
||||
Future<LoadingState<MsgFeedAtMe>> customGetData() =>
|
||||
MsgHttp.msgFeedAtMe(cursor: cursor, cursorTime: cursorTime);
|
||||
|
||||
Future onRemove(dynamic id, int index) async {
|
||||
Future<void> onRemove(dynamic id, int index) async {
|
||||
try {
|
||||
var res = await MsgHttp.delMsgfeed(2, id);
|
||||
if (res['status']) {
|
||||
|
||||
@@ -39,7 +39,7 @@ class LikeMeController extends CommonDataController<MsgFeedLikeMe, dynamic> {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
cursor = -1;
|
||||
cursorTime = -1;
|
||||
return super.onRefresh();
|
||||
@@ -49,7 +49,7 @@ class LikeMeController extends CommonDataController<MsgFeedLikeMe, dynamic> {
|
||||
Future<LoadingState<MsgFeedLikeMe>> customGetData() =>
|
||||
MsgHttp.msgFeedLikeMe(cursor: cursor, cursorTime: cursorTime);
|
||||
|
||||
Future onRemove(dynamic id, int index, bool isLatest) async {
|
||||
Future<void> onRemove(dynamic id, int index, bool isLatest) async {
|
||||
try {
|
||||
var res = await MsgHttp.delMsgfeed(0, id);
|
||||
if (res['status']) {
|
||||
|
||||
@@ -32,7 +32,7 @@ class ReplyMeController
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
cursor = -1;
|
||||
cursorTime = -1;
|
||||
return super.onRefresh();
|
||||
@@ -42,7 +42,7 @@ class ReplyMeController
|
||||
Future<LoadingState<MsgFeedReplyMe>> customGetData() =>
|
||||
MsgHttp.msgFeedReplyMe(cursor: cursor, cursorTime: cursorTime);
|
||||
|
||||
Future onRemove(dynamic id, int index) async {
|
||||
Future<void> onRemove(dynamic id, int index) async {
|
||||
try {
|
||||
var res = await MsgHttp.delMsgfeed(1, id);
|
||||
if (res['status']) {
|
||||
|
||||
@@ -34,12 +34,12 @@ class SysMsgController
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
cursor = -1;
|
||||
return super.onRefresh();
|
||||
}
|
||||
|
||||
Future onRemove(dynamic id, int index) async {
|
||||
Future<void> onRemove(dynamic id, int index) async {
|
||||
try {
|
||||
var res = await MsgHttp.delSysMsg(id);
|
||||
if (res['status']) {
|
||||
|
||||
@@ -19,7 +19,7 @@ class PgcIndexController extends CommonListController {
|
||||
getPgcIndexCondition();
|
||||
}
|
||||
|
||||
Future getPgcIndexCondition() async {
|
||||
Future<void> getPgcIndexCondition() async {
|
||||
dynamic res = await BangumiHttp.pgcIndexCondition(
|
||||
seasonType: indexType == null ? 1 : null,
|
||||
type: 0,
|
||||
|
||||
@@ -44,7 +44,7 @@ class RcmdController extends CommonListController {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
currentPage = 0;
|
||||
isEnd = false;
|
||||
return queryData();
|
||||
|
||||
@@ -129,11 +129,11 @@ class SSearchController extends GetxController {
|
||||
}
|
||||
|
||||
// 获取热搜关键词
|
||||
Future queryHotSearchList() async {
|
||||
Future<void> queryHotSearchList() async {
|
||||
loadingState.value = await SearchHttp.searchTrending(limit: 10);
|
||||
}
|
||||
|
||||
Future queryRecommendList() async {
|
||||
Future<void> queryRecommendList() async {
|
||||
recommendData.value = await SearchHttp.searchRecommend();
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ class SSearchController extends GetxController {
|
||||
submit();
|
||||
}
|
||||
|
||||
Future querySearchSuggest(String value) async {
|
||||
Future<void> querySearchSuggest(String value) async {
|
||||
var result = await SearchHttp.searchSuggest(term: value);
|
||||
if (result['status']) {
|
||||
if (result['data'] is SearchSuggestModel) {
|
||||
|
||||
@@ -72,7 +72,7 @@ class SearchPanelController<R extends SearchNumData<T>, T>
|
||||
);
|
||||
|
||||
@override
|
||||
Future onReload() {
|
||||
Future<void> onReload() {
|
||||
scrollController.jumpToTop();
|
||||
return super.onReload();
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ class SubController
|
||||
}
|
||||
|
||||
@override
|
||||
Future queryData([bool isRefresh = true]) {
|
||||
Future<void> queryData([bool isRefresh = true]) {
|
||||
if (mid == 0) {
|
||||
loadingState.value = LoadingState.error('账号未登录');
|
||||
return Future.value();
|
||||
|
||||
@@ -664,7 +664,7 @@ class VideoDetailController extends GetxController
|
||||
);
|
||||
}
|
||||
|
||||
Future _querySponsorBlock() async {
|
||||
Future<void> _querySponsorBlock() async {
|
||||
positionSubscription?.cancel();
|
||||
videoLabel.value = '';
|
||||
segmentList.clear();
|
||||
@@ -1053,7 +1053,7 @@ class VideoDetailController extends GetxController
|
||||
playerInit();
|
||||
}
|
||||
|
||||
Future playerInit({
|
||||
Future<void> playerInit({
|
||||
video,
|
||||
audio,
|
||||
seekToTime,
|
||||
@@ -1115,7 +1115,7 @@ class VideoDetailController extends GetxController
|
||||
|
||||
bool isQuerying = false;
|
||||
// 视频链接
|
||||
Future queryVideoUrl([Duration? defaultST]) async {
|
||||
Future<void> queryVideoUrl([Duration? defaultST]) async {
|
||||
if (isQuerying) {
|
||||
return;
|
||||
}
|
||||
@@ -1427,7 +1427,7 @@ class VideoDetailController extends GetxController
|
||||
|
||||
late bool continuePlayingPart = GStorage.continuePlayingPart;
|
||||
|
||||
Future _querySubtitles() async {
|
||||
Future<void> _querySubtitles() async {
|
||||
var res = await VideoHttp.subtitlesJson(bvid: bvid, cid: cid.value);
|
||||
if (res['status']) {
|
||||
// interactive video
|
||||
|
||||
@@ -95,12 +95,12 @@ class BangumiIntroController
|
||||
}
|
||||
|
||||
@override
|
||||
Future queryData([bool isRefresh = true]) async {
|
||||
Future<void> queryData([bool isRefresh = true]) async {
|
||||
await queryVideoTags();
|
||||
return super.queryData(isRefresh);
|
||||
}
|
||||
|
||||
Future queryVideoTags() async {
|
||||
Future<void> queryVideoTags() async {
|
||||
var result = await UserHttp.videoTags(bvid: bvid);
|
||||
if (result['status']) {
|
||||
videoTags = result['data'];
|
||||
@@ -120,7 +120,7 @@ class BangumiIntroController
|
||||
SearchHttp.bangumiInfoNew(seasonId: seasonId, epId: epId);
|
||||
|
||||
// 获取点赞/投币/收藏状态
|
||||
Future queryBangumiLikeCoinFav() async {
|
||||
Future<void> queryBangumiLikeCoinFav() async {
|
||||
var result = await VideoHttp.bangumiLikeCoinFav(epId: epId);
|
||||
if (result['status']) {
|
||||
hasLike.value = result["data"]['like'] == 1;
|
||||
@@ -132,7 +132,7 @@ class BangumiIntroController
|
||||
}
|
||||
|
||||
// (取消)点赞
|
||||
Future actionLikeVideo() async {
|
||||
Future<void> actionLikeVideo() async {
|
||||
var result = await VideoHttp.likeVideo(bvid: bvid, type: !hasLike.value);
|
||||
if (result['status']) {
|
||||
SmartDialog.showToast(!hasLike.value ? result['data']['toast'] : '取消赞');
|
||||
@@ -167,7 +167,7 @@ class BangumiIntroController
|
||||
}
|
||||
|
||||
// 投币
|
||||
Future actionCoinVideo() async {
|
||||
Future<void> actionCoinVideo() async {
|
||||
if (userInfo == null) {
|
||||
SmartDialog.showToast('账号未登录');
|
||||
return;
|
||||
@@ -190,7 +190,7 @@ class BangumiIntroController
|
||||
}
|
||||
|
||||
// (取消)收藏 bangumi
|
||||
Future actionFavVideo({type = 'choose'}) async {
|
||||
Future<void> actionFavVideo({type = 'choose'}) async {
|
||||
// 收藏至默认文件夹
|
||||
if (type == 'default') {
|
||||
SmartDialog.showLoading(msg: '请求中');
|
||||
@@ -438,7 +438,7 @@ class BangumiIntroController
|
||||
}
|
||||
|
||||
// 追番
|
||||
Future bangumiAdd() async {
|
||||
Future<void> bangumiAdd() async {
|
||||
var result = await VideoHttp.bangumiAdd(
|
||||
seasonId: (loadingState.value as Success).response.seasonId);
|
||||
if (result['status']) {
|
||||
@@ -449,7 +449,7 @@ class BangumiIntroController
|
||||
}
|
||||
|
||||
// 取消追番
|
||||
Future bangumiDel() async {
|
||||
Future<void> bangumiDel() async {
|
||||
var result = await VideoHttp.bangumiDel(
|
||||
seasonId: (loadingState.value as Success).response.seasonId);
|
||||
if (result['status']) {
|
||||
@@ -458,7 +458,7 @@ class BangumiIntroController
|
||||
SmartDialog.showToast(result['msg']);
|
||||
}
|
||||
|
||||
Future bangumiUpdate(status) async {
|
||||
Future<void> bangumiUpdate(status) async {
|
||||
var result = await VideoHttp.bangumiUpdate(
|
||||
seasonId: [(loadingState.value as Success).response.seasonId],
|
||||
status: status,
|
||||
@@ -562,7 +562,7 @@ class BangumiIntroController
|
||||
}
|
||||
|
||||
// 一键三连
|
||||
Future actionOneThree() async {
|
||||
Future<void> actionOneThree() async {
|
||||
feedBack();
|
||||
if (userInfo == null) {
|
||||
SmartDialog.showToast('账号未登录');
|
||||
@@ -590,7 +590,7 @@ class BangumiIntroController
|
||||
RxBool isFollowed = false.obs;
|
||||
RxInt followStatus = (-1).obs;
|
||||
|
||||
Future queryIsFollowed() async {
|
||||
Future<void> queryIsFollowed() async {
|
||||
try {
|
||||
dynamic result = await Request().get(
|
||||
'https://www.bilibili.com/bangumi/play/ss$seasonId',
|
||||
|
||||
@@ -8,7 +8,6 @@ import 'package:PiliPlus/http/member.dart';
|
||||
import 'package:PiliPlus/http/search.dart';
|
||||
import 'package:PiliPlus/http/user.dart';
|
||||
import 'package:PiliPlus/http/video.dart';
|
||||
import 'package:PiliPlus/models/model_hot_video_item.dart';
|
||||
import 'package:PiliPlus/models/user/fav_folder.dart';
|
||||
import 'package:PiliPlus/models/video/ai.dart';
|
||||
import 'package:PiliPlus/models/video_detail_res.dart';
|
||||
@@ -136,7 +135,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// 获取视频简介&分p
|
||||
Future queryVideoIntro() async {
|
||||
Future<void> queryVideoIntro() async {
|
||||
queryVideoTags();
|
||||
var result = await VideoHttp.videoIntro(bvid: bvid);
|
||||
if (result['status']) {
|
||||
@@ -187,7 +186,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future queryVideoTags() async {
|
||||
Future<void> queryVideoTags() async {
|
||||
var result = await UserHttp.videoTags(bvid: bvid);
|
||||
if (result['status']) {
|
||||
videoTags = result['data'];
|
||||
@@ -195,7 +194,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// 获取up主粉丝数
|
||||
Future queryUserStat() async {
|
||||
Future<void> queryUserStat() async {
|
||||
if (videoItem['staff']?.isNotEmpty == true) {
|
||||
Request().get(
|
||||
Api.relations,
|
||||
@@ -236,7 +235,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// 一键三连
|
||||
Future actionOneThree() async {
|
||||
Future<void> actionOneThree() async {
|
||||
feedBack();
|
||||
if (userInfo == null) {
|
||||
SmartDialog.showToast('账号未登录');
|
||||
@@ -262,7 +261,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// (取消)点赞
|
||||
Future actionLikeVideo() async {
|
||||
Future<void> actionLikeVideo() async {
|
||||
if (userInfo == null) {
|
||||
SmartDialog.showToast('账号未登录');
|
||||
return;
|
||||
@@ -287,7 +286,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future actionDislikeVideo() async {
|
||||
Future<void> actionDislikeVideo() async {
|
||||
if (userInfo == null) {
|
||||
SmartDialog.showToast('账号未登录');
|
||||
return;
|
||||
@@ -308,7 +307,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future viewLater() async {
|
||||
Future<void> viewLater() async {
|
||||
var res = await (hasLater.value
|
||||
? UserHttp.toViewDel(aids: [IdUtils.bv2av(bvid)])
|
||||
: await UserHttp.toViewLater(bvid: bvid));
|
||||
@@ -316,7 +315,7 @@ class VideoIntroController extends GetxController {
|
||||
SmartDialog.showToast(res['msg']);
|
||||
}
|
||||
|
||||
Future coinVideo(int coin, [bool selectLike = false]) async {
|
||||
Future<void> coinVideo(int coin, [bool selectLike = false]) async {
|
||||
if (videoDetail.value.stat?.coin == null) {
|
||||
// not init
|
||||
return;
|
||||
@@ -341,7 +340,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// 投币
|
||||
Future actionCoinVideo() async {
|
||||
Future<void> actionCoinVideo() async {
|
||||
if (userInfo == null) {
|
||||
SmartDialog.showToast('账号未登录');
|
||||
return;
|
||||
@@ -367,7 +366,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// (取消)收藏
|
||||
Future actionFavVideo({type = 'choose'}) async {
|
||||
Future<void> actionFavVideo({type = 'choose'}) async {
|
||||
// 收藏至默认文件夹
|
||||
if (type == 'default') {
|
||||
SmartDialog.showLoading(msg: '请求中');
|
||||
@@ -559,7 +558,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// 查询关注状态
|
||||
Future queryFollowStatus() async {
|
||||
Future<void> queryFollowStatus() async {
|
||||
if (videoDetail.value.owner == null) {
|
||||
return;
|
||||
}
|
||||
@@ -572,7 +571,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// 关注/取关up
|
||||
Future actionRelationMod(BuildContext context) async {
|
||||
Future<void> actionRelationMod(BuildContext context) async {
|
||||
if (userInfo == null) {
|
||||
SmartDialog.showToast('账号未登录');
|
||||
return;
|
||||
@@ -682,7 +681,7 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
// 查看同时在看人数
|
||||
Future queryOnlineTotal() async {
|
||||
Future<void> queryOnlineTotal() async {
|
||||
if (isShowOnlineTotal.not) {
|
||||
return;
|
||||
}
|
||||
@@ -843,46 +842,44 @@ class VideoIntroController extends GetxController {
|
||||
}
|
||||
|
||||
bool playRelated() {
|
||||
late RelatedController relatedCtr;
|
||||
try {
|
||||
RelatedController relatedCtr;
|
||||
if (Get.isRegistered<RelatedController>(tag: heroTag)) {
|
||||
relatedCtr = Get.find<RelatedController>(tag: heroTag);
|
||||
if (relatedCtr.loadingState.value is! Success) {
|
||||
return false;
|
||||
}
|
||||
if ((relatedCtr.loadingState.value as Success).response.isEmpty == true) {
|
||||
SmartDialog.showToast('暂无相关视频,停止连播');
|
||||
return false;
|
||||
}
|
||||
} catch (_) {
|
||||
relatedCtr = Get.put(RelatedController(), tag: heroTag);
|
||||
relatedCtr.queryData().then((value) {
|
||||
if (value['status']) {
|
||||
} else {
|
||||
relatedCtr = Get.put(RelatedController(false), tag: heroTag)
|
||||
..queryData().then((_) {
|
||||
playRelated();
|
||||
}
|
||||
});
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
final HotVideoItemModel videoItem =
|
||||
(relatedCtr.loadingState.value as Success).response[0];
|
||||
if (relatedCtr.loadingState.value is! Success) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (relatedCtr.loadingState.value.data.isNullOrEmpty) {
|
||||
SmartDialog.showToast('暂无相关视频,停止连播');
|
||||
return false;
|
||||
}
|
||||
|
||||
final firstItem = relatedCtr.loadingState.value.data!.first;
|
||||
try {
|
||||
if (videoItem.cid != null) {
|
||||
if (firstItem.cid != null) {
|
||||
changeSeasonOrbangu(
|
||||
null,
|
||||
videoItem.bvid,
|
||||
videoItem.cid,
|
||||
videoItem.aid,
|
||||
videoItem.pic,
|
||||
firstItem.bvid,
|
||||
firstItem.cid,
|
||||
firstItem.aid,
|
||||
firstItem.pic,
|
||||
);
|
||||
} else {
|
||||
SearchHttp.ab2c(aid: videoItem.aid, bvid: videoItem.bvid).then(
|
||||
(cid) => PageUtils.toVideoPage(
|
||||
'bvid=${videoItem.bvid}&cid=${videoItem.cid}',
|
||||
arguments: {
|
||||
'videoItem': videoItem,
|
||||
'heroTag': heroTag,
|
||||
},
|
||||
off: true,
|
||||
SearchHttp.ab2c(aid: firstItem.aid, bvid: firstItem.bvid).then(
|
||||
(cid) => changeSeasonOrbangu(
|
||||
null,
|
||||
firstItem.bvid,
|
||||
cid,
|
||||
firstItem.aid,
|
||||
firstItem.pic,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ class HorizontalMemberPageController extends CommonDataController {
|
||||
queryData();
|
||||
}
|
||||
|
||||
Future getUserInfo() async {
|
||||
Future<void> getUserInfo() async {
|
||||
dynamic res = await MemberHttp.memberInfo(mid: mid);
|
||||
if (res['status']) {
|
||||
userState.value = LoadingState.success(res['data']);
|
||||
@@ -34,7 +34,7 @@ class HorizontalMemberPageController extends CommonDataController {
|
||||
}
|
||||
}
|
||||
|
||||
Future getMemberStat() async {
|
||||
Future<void> getMemberStat() async {
|
||||
var res = await MemberHttp.memberStat(mid: mid);
|
||||
if (res['status']) {
|
||||
userStat.value = res['data'];
|
||||
@@ -42,7 +42,7 @@ class HorizontalMemberPageController extends CommonDataController {
|
||||
}
|
||||
}
|
||||
|
||||
Future getMemberView() async {
|
||||
Future<void> getMemberView() async {
|
||||
var res = await MemberHttp.memberView(mid: mid);
|
||||
if (res['status']) {
|
||||
userStat.addAll(res['data']);
|
||||
@@ -97,7 +97,7 @@ class HorizontalMemberPageController extends CommonDataController {
|
||||
);
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
currentPage = 0;
|
||||
hasPrev = true;
|
||||
hasNext = true;
|
||||
|
||||
@@ -6,13 +6,17 @@ import 'package:get/get.dart';
|
||||
|
||||
class RelatedController
|
||||
extends CommonListController<List<HotVideoItemModel>?, HotVideoItemModel> {
|
||||
RelatedController([this.autoQuery]);
|
||||
// 视频aid
|
||||
String bvid = Get.parameters['bvid'] ?? "";
|
||||
final bool? autoQuery;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
queryData();
|
||||
if (autoQuery != false) {
|
||||
queryData();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -24,7 +24,7 @@ class ZanButtonGrpc extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _ZanButtonGrpcState extends State<ZanButtonGrpc> {
|
||||
Future onHateReply() async {
|
||||
Future<void> onHateReply() async {
|
||||
feedBack();
|
||||
final int oid = widget.replyItem.oid.toInt();
|
||||
final int rpid = widget.replyItem.id.toInt();
|
||||
@@ -57,7 +57,7 @@ class _ZanButtonGrpcState extends State<ZanButtonGrpc> {
|
||||
}
|
||||
|
||||
// 评论点赞
|
||||
Future onLikeReply() async {
|
||||
Future<void> onLikeReply() async {
|
||||
feedBack();
|
||||
final int oid = widget.replyItem.oid.toInt();
|
||||
final int rpid = widget.replyItem.id.toInt();
|
||||
|
||||
@@ -240,7 +240,8 @@ class _ReplyPageState extends CommonPublishPageState<ReplyPage> {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onCustomPublish({required String message, List? pictures}) async {
|
||||
Future<void> onCustomPublish(
|
||||
{required String message, List? pictures}) async {
|
||||
var result = await VideoHttp.replyAdd(
|
||||
type: widget.replyType ?? ReplyType.video,
|
||||
oid: widget.oid!,
|
||||
|
||||
@@ -51,7 +51,7 @@ class VideoReplyReplyController extends ReplyController
|
||||
}
|
||||
|
||||
@override
|
||||
Future onRefresh() {
|
||||
Future<void> onRefresh() {
|
||||
paginationReply = null;
|
||||
return super.onRefresh();
|
||||
}
|
||||
|
||||
@@ -471,7 +471,8 @@ class _SendDanmakuPanelState extends CommonPublishPageState<SendDanmakuPanel> {
|
||||
}
|
||||
|
||||
@override
|
||||
Future onCustomPublish({required String message, List? pictures}) async {
|
||||
Future<void> onCustomPublish(
|
||||
{required String message, List? pictures}) async {
|
||||
SmartDialog.showLoading(msg: '发送中...');
|
||||
bool isColorful = _color.value == Colors.transparent;
|
||||
final res = await DanmakuHttp.shootDanmaku(
|
||||
|
||||
@@ -54,7 +54,7 @@ class WebDav {
|
||||
: 'piliplus_settings_phone.json';
|
||||
}
|
||||
|
||||
Future backup() async {
|
||||
Future<void> backup() async {
|
||||
if (_client == null) {
|
||||
final res = await init();
|
||||
if (res.first == false) {
|
||||
@@ -76,7 +76,7 @@ class WebDav {
|
||||
}
|
||||
}
|
||||
|
||||
Future restore() async {
|
||||
Future<void> restore() async {
|
||||
if (_client == null) {
|
||||
final res = await init();
|
||||
if (res.first == false) {
|
||||
|
||||
@@ -55,7 +55,7 @@ class WhisperController
|
||||
queryData();
|
||||
}
|
||||
|
||||
Future queryMsgFeedUnread() async {
|
||||
Future<void> queryMsgFeedUnread() async {
|
||||
var res = await MsgHttp.msgFeedUnread();
|
||||
if (res['status']) {
|
||||
final data = MsgFeedUnread.fromJson(res['data']);
|
||||
@@ -83,7 +83,7 @@ class WhisperController
|
||||
return super.onRefresh();
|
||||
}
|
||||
|
||||
Future onRemove(int index, int? talkerId) async {
|
||||
Future<void> onRemove(int index, int? talkerId) async {
|
||||
var res = await MsgHttp.removeMsg(talkerId);
|
||||
if (res['status']) {
|
||||
loadingState.value.data!.removeAt(index);
|
||||
@@ -94,7 +94,7 @@ class WhisperController
|
||||
}
|
||||
}
|
||||
|
||||
Future onSetTop(int index, bool isTop, int? talkerId) async {
|
||||
Future<void> onSetTop(int index, bool isTop, int? talkerId) async {
|
||||
var res = await MsgHttp.setTop(
|
||||
talkerId: talkerId,
|
||||
opType: isTop ? 1 : 0,
|
||||
|
||||
@@ -61,7 +61,7 @@ class WhisperDetailController
|
||||
}
|
||||
|
||||
// 消息标记已读
|
||||
Future ackSessionMsg(int? msgSeqno) async {
|
||||
Future<void> ackSessionMsg(int? msgSeqno) async {
|
||||
var res = await MsgHttp.ackSessionMsg(
|
||||
talkerId: talkerId,
|
||||
ackSeqno: msgSeqno,
|
||||
@@ -71,7 +71,7 @@ class WhisperDetailController
|
||||
}
|
||||
}
|
||||
|
||||
Future sendMsg({
|
||||
Future<void> sendMsg({
|
||||
required String message,
|
||||
Map? picMsg,
|
||||
required VoidCallback onClearText,
|
||||
|
||||
@@ -321,7 +321,7 @@ class _WhisperDetailPageState
|
||||
Widget? get customPanel => EmotePanel(onChoose: onChooseEmote);
|
||||
|
||||
@override
|
||||
Future onCustomPublish({required String message, List? pictures}) {
|
||||
Future<void> onCustomPublish({required String message, List? pictures}) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user