Merge branch 'fix'
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import Flutter
|
import Flutter
|
||||||
|
import AVFoundation
|
||||||
|
|
||||||
@UIApplicationMain
|
@UIApplicationMain
|
||||||
@objc class AppDelegate: FlutterAppDelegate {
|
@objc class AppDelegate: FlutterAppDelegate {
|
||||||
@ -8,6 +9,14 @@ import Flutter
|
|||||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||||
) -> Bool {
|
) -> Bool {
|
||||||
GeneratedPluginRegistrant.register(with: self)
|
GeneratedPluginRegistrant.register(with: self)
|
||||||
|
|
||||||
|
// 设置音频会话类别,确保在静音模式下播放音频
|
||||||
|
do {
|
||||||
|
try AVAudioSession.sharedInstance().setCategory(.playback, options: [.duckOthers])
|
||||||
|
} catch {
|
||||||
|
print("Failed to set audio session category: \(error)")
|
||||||
|
}
|
||||||
|
|
||||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,7 +46,8 @@ class ApiInterceptor extends Interceptor {
|
|||||||
// 处理网络请求错误
|
// 处理网络请求错误
|
||||||
// handler.next(err);
|
// handler.next(err);
|
||||||
String url = err.requestOptions.uri.toString();
|
String url = err.requestOptions.uri.toString();
|
||||||
if (!url.contains('heartbeat')) {
|
final excludedPatterns = RegExp(r'heartbeat|seg\.so|online/total');
|
||||||
|
if (!excludedPatterns.hasMatch(url)) {
|
||||||
SmartDialog.showToast(
|
SmartDialog.showToast(
|
||||||
await dioError(err),
|
await dioError(err),
|
||||||
displayType: SmartToastType.onlyRefresh,
|
displayType: SmartToastType.onlyRefresh,
|
||||||
|
|||||||
@ -48,7 +48,7 @@ class FollowSearchController extends GetxController {
|
|||||||
return {'status': true, 'data': <FollowItemModel>[].obs};
|
return {'status': true, 'data': <FollowItemModel>[].obs};
|
||||||
}
|
}
|
||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
ps = 1;
|
pn = 1;
|
||||||
}
|
}
|
||||||
var res = await MemberHttp.getfollowSearch(
|
var res = await MemberHttp.getfollowSearch(
|
||||||
mid: mid,
|
mid: mid,
|
||||||
|
|||||||
@ -406,7 +406,7 @@ class _MemberPageState extends State<MemberPage>
|
|||||||
? '个人认证:'
|
? '个人认证:'
|
||||||
: '企业认证:',
|
: '企业认证:',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Theme.of(context).primaryColor,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
),
|
),
|
||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
|
|||||||
@ -27,10 +27,13 @@ class MemberArchiveController extends GetxController {
|
|||||||
|
|
||||||
// 获取用户投稿
|
// 获取用户投稿
|
||||||
Future getMemberArchive(type) async {
|
Future getMemberArchive(type) async {
|
||||||
|
if (isLoading.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isLoading.value = true;
|
||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
pn = 1;
|
pn = 1;
|
||||||
archivesList.clear();
|
archivesList.clear();
|
||||||
isLoading.value = true;
|
|
||||||
}
|
}
|
||||||
var res = await MemberHttp.memberArchive(
|
var res = await MemberHttp.memberArchive(
|
||||||
mid: mid,
|
mid: mid,
|
||||||
|
|||||||
@ -21,7 +21,7 @@ class MemberSeasonsController extends GetxController {
|
|||||||
mid = int.parse(Get.parameters['mid']!);
|
mid = int.parse(Get.parameters['mid']!);
|
||||||
category = Get.parameters['category']!;
|
category = Get.parameters['category']!;
|
||||||
if (category == '0') {
|
if (category == '0') {
|
||||||
seasonId = int.parse(Get.parameters['seriesId']!);
|
seasonId = int.parse(Get.parameters['seasonId']!);
|
||||||
}
|
}
|
||||||
if (category == '1') {
|
if (category == '1') {
|
||||||
seriesId = int.parse(Get.parameters['seriesId']!);
|
seriesId = int.parse(Get.parameters['seriesId']!);
|
||||||
|
|||||||
@ -203,9 +203,9 @@ class LikeItem extends StatelessWidget {
|
|||||||
Text.rich(TextSpan(children: [
|
Text.rich(TextSpan(children: [
|
||||||
TextSpan(text: nickNameList.join('、')),
|
TextSpan(text: nickNameList.join('、')),
|
||||||
const TextSpan(text: ' '),
|
const TextSpan(text: ' '),
|
||||||
if (item.users!.length > 1)
|
if (item.counts! > 1)
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: '等总计${item.users!.length}人',
|
text: '等总计${item.counts}人',
|
||||||
style: TextStyle(color: outline),
|
style: TextStyle(color: outline),
|
||||||
),
|
),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
|
|||||||
@ -261,90 +261,97 @@ class VideoPanelController extends GetxController {
|
|||||||
onShowFilterSheet(searchPanelCtr) {
|
onShowFilterSheet(searchPanelCtr) {
|
||||||
showModalBottomSheet(
|
showModalBottomSheet(
|
||||||
context: Get.context!,
|
context: Get.context!,
|
||||||
|
isScrollControlled: true,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return StatefulBuilder(
|
return StatefulBuilder(
|
||||||
builder: (context, StateSetter setState) {
|
builder: (context, StateSetter setState) {
|
||||||
return Container(
|
return Padding(
|
||||||
color: Theme.of(Get.context!).colorScheme.surface,
|
padding: EdgeInsets.only(
|
||||||
padding: const EdgeInsets.only(top: 12),
|
top: 12, bottom: MediaQuery.of(context).padding.bottom + 20),
|
||||||
child: Column(
|
child: Wrap(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
children: [
|
||||||
const ListTile(
|
Column(
|
||||||
title: Text('内容时长'),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
),
|
children: [
|
||||||
Padding(
|
const ListTile(
|
||||||
padding: const EdgeInsets.only(
|
title: Text('内容时长'),
|
||||||
left: 14,
|
),
|
||||||
right: 14,
|
Padding(
|
||||||
bottom: 14,
|
padding: const EdgeInsets.only(
|
||||||
),
|
left: 14,
|
||||||
child: Wrap(
|
right: 14,
|
||||||
spacing: 10,
|
bottom: 14,
|
||||||
runSpacing: 10,
|
),
|
||||||
direction: Axis.horizontal,
|
child: Wrap(
|
||||||
textDirection: TextDirection.ltr,
|
spacing: 10,
|
||||||
children: [
|
runSpacing: 10,
|
||||||
for (var i in timeFiltersList)
|
direction: Axis.horizontal,
|
||||||
Obx(
|
textDirection: TextDirection.ltr,
|
||||||
() => SearchText(
|
children: [
|
||||||
searchText: i['label'],
|
for (var i in timeFiltersList)
|
||||||
searchTextIdx: i['value'],
|
Obx(
|
||||||
isSelect:
|
() => SearchText(
|
||||||
currentTimeFilterval.value == i['value'],
|
searchText: i['label'],
|
||||||
onSelect: (value) async {
|
searchTextIdx: i['value'],
|
||||||
currentTimeFilterval.value = i['value'];
|
isSelect:
|
||||||
setState(() {});
|
currentTimeFilterval.value == i['value'],
|
||||||
SmartDialog.showToast("「${i['label']}」的筛选结果");
|
onSelect: (value) async {
|
||||||
SearchPanelController ctr =
|
currentTimeFilterval.value = i['value'];
|
||||||
Get.find<SearchPanelController>(
|
setState(() {});
|
||||||
|
SmartDialog.showToast(
|
||||||
|
"「${i['label']}」的筛选结果");
|
||||||
|
SearchPanelController ctr = Get.find<
|
||||||
|
SearchPanelController>(
|
||||||
tag: 'video${searchPanelCtr.keyword!}');
|
tag: 'video${searchPanelCtr.keyword!}');
|
||||||
ctr.duration.value = i['value'];
|
ctr.duration.value = i['value'];
|
||||||
Get.back();
|
Get.back();
|
||||||
SmartDialog.showLoading(msg: '获取中');
|
SmartDialog.showLoading(msg: '获取中');
|
||||||
await ctr.onRefresh();
|
await ctr.onRefresh();
|
||||||
SmartDialog.dismiss();
|
SmartDialog.dismiss();
|
||||||
},
|
},
|
||||||
onLongSelect: (value) => {},
|
onLongSelect: (value) => {},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const ListTile(
|
const ListTile(
|
||||||
title: Text('内容分区'),
|
title: Text('内容分区'),
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 14, right: 14),
|
padding: const EdgeInsets.only(left: 14, right: 14),
|
||||||
child: Wrap(
|
child: Wrap(
|
||||||
spacing: 10,
|
spacing: 10,
|
||||||
runSpacing: 10,
|
runSpacing: 10,
|
||||||
direction: Axis.horizontal,
|
direction: Axis.horizontal,
|
||||||
textDirection: TextDirection.ltr,
|
textDirection: TextDirection.ltr,
|
||||||
children: [
|
children: [
|
||||||
for (var i in partFiltersList)
|
for (var i in partFiltersList)
|
||||||
SearchText(
|
SearchText(
|
||||||
searchText: i['label'],
|
searchText: i['label'],
|
||||||
searchTextIdx: i['value'],
|
searchTextIdx: i['value'],
|
||||||
isSelect: currentPartFilterval.value == i['value'],
|
isSelect:
|
||||||
onSelect: (value) async {
|
currentPartFilterval.value == i['value'],
|
||||||
currentPartFilterval.value = i['value'];
|
onSelect: (value) async {
|
||||||
setState(() {});
|
currentPartFilterval.value = i['value'];
|
||||||
SmartDialog.showToast("「${i['label']}」的筛选结果");
|
setState(() {});
|
||||||
SearchPanelController ctr =
|
SmartDialog.showToast("「${i['label']}」的筛选结果");
|
||||||
Get.find<SearchPanelController>(
|
SearchPanelController ctr = Get.find<
|
||||||
|
SearchPanelController>(
|
||||||
tag: 'video${searchPanelCtr.keyword!}');
|
tag: 'video${searchPanelCtr.keyword!}');
|
||||||
ctr.tids.value = i['value'];
|
ctr.tids.value = i['value'];
|
||||||
Get.back();
|
Get.back();
|
||||||
SmartDialog.showLoading(msg: '获取中');
|
SmartDialog.showLoading(msg: '获取中');
|
||||||
await ctr.onRefresh();
|
await ctr.onRefresh();
|
||||||
SmartDialog.dismiss();
|
SmartDialog.dismiss();
|
||||||
},
|
},
|
||||||
onLongSelect: (value) => {},
|
onLongSelect: (value) => {},
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user