fix: ai conclusion

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-02-15 14:23:15 +08:00
parent be03377449
commit fc6ff44471
2 changed files with 102 additions and 91 deletions

View File

@@ -651,8 +651,16 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
final res = final res =
await videoIntroController.aiConclusion(); await videoIntroController.aiConclusion();
if (res['status']) { if (res['status']) {
if (videoIntroController.modelResult.summary
.isNullOrEmpty &&
videoIntroController
.modelResult.outline ==
null) {
SmartDialog.showToast("当前视频不支持AI视频总结");
} else {
widget.showAiBottomSheet(); widget.showAiBottomSheet();
} }
}
}, },
child: Image.asset('assets/images/ai.png', child: Image.asset('assets/images/ai.png',
height: 22), height: 22),

View File

@@ -8,11 +8,11 @@ import 'package:PiliPlus/pages/video/detail/index.dart';
import 'package:PiliPlus/utils/utils.dart'; import 'package:PiliPlus/utils/utils.dart';
class AiDetail extends StatelessWidget { class AiDetail extends StatelessWidget {
final ModelResult? modelResult; final ModelResult modelResult;
const AiDetail({ const AiDetail({
super.key, super.key,
this.modelResult, required this.modelResult,
}); });
@override @override
@@ -24,7 +24,7 @@ class AiDetail extends StatelessWidget {
child: Column( child: Column(
children: [ children: [
InkWell( InkWell(
onTap: () => Get.back(), onTap: Get.back,
child: Container( child: Container(
height: 35, height: 35,
padding: const EdgeInsets.only(bottom: 2), padding: const EdgeInsets.only(bottom: 2),
@@ -44,31 +44,31 @@ class AiDetail extends StatelessWidget {
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
children: [ children: [
if (modelResult!.summary != null && if (modelResult.summary?.isNotEmpty == true) ...[
modelResult!.summary!.isNotEmpty) ...[
SelectableText( SelectableText(
'总结: ${modelResult!.summary!}', '总结: ${modelResult.summary}',
style: const TextStyle( style: const TextStyle(
fontSize: 15, fontSize: 15,
height: 1.5, height: 1.5,
), ),
), ),
if (modelResult!.outline!.isNotEmpty) if (modelResult.outline?.isNotEmpty == true)
Divider( Divider(
height: 20, height: 20,
color: Theme.of(context).dividerColor.withOpacity(0.1), color: Theme.of(context).dividerColor.withOpacity(0.1),
thickness: 6, thickness: 6,
) )
], ],
if (modelResult.outline?.isNotEmpty == true)
ListView.builder( ListView.builder(
shrinkWrap: true, shrinkWrap: true,
itemCount: modelResult!.outline!.length, itemCount: modelResult.outline!.length,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Column( return Column(
children: [ children: [
SelectableText( SelectableText(
modelResult!.outline![index].title!, modelResult.outline![index].title!,
style: const TextStyle( style: const TextStyle(
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -76,14 +76,18 @@ class AiDetail extends StatelessWidget {
), ),
), ),
const SizedBox(height: 6), const SizedBox(height: 6),
if (modelResult
.outline![index].partOutline?.isNotEmpty ==
true)
ListView.builder( ListView.builder(
shrinkWrap: true, shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
itemCount: modelResult! itemCount: modelResult
.outline![index].partOutline!.length, .outline![index].partOutline!.length,
itemBuilder: (context, i) { itemBuilder: (context, i) {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
Wrap( Wrap(
children: [ children: [
@@ -99,7 +103,7 @@ class AiDetail extends StatelessWidget {
children: [ children: [
TextSpan( TextSpan(
text: Utils.tampToSeektime( text: Utils.tampToSeektime(
modelResult! modelResult
.outline![index] .outline![index]
.partOutline![i] .partOutline![i]
.timestamp!), .timestamp!),
@@ -108,7 +112,8 @@ class AiDetail extends StatelessWidget {
.colorScheme .colorScheme
.primary, .primary,
), ),
recognizer: TapGestureRecognizer() recognizer:
TapGestureRecognizer()
..onTap = () { ..onTap = () {
// 跳转到指定位置 // 跳转到指定位置
try { try {
@@ -118,13 +123,11 @@ class AiDetail extends StatelessWidget {
.plPlayerController .plPlayerController
.seekTo( .seekTo(
Duration( Duration(
seconds: seconds: Utils
Utils.duration( .duration(
Utils.tampToSeektime(modelResult! Utils.tampToSeektime(modelResult
.outline![ .outline![index]
index] .partOutline![i]
.partOutline![
i]
.timestamp!) .timestamp!)
.toString(), .toString(),
), ),
@@ -135,7 +138,7 @@ class AiDetail extends StatelessWidget {
), ),
const TextSpan(text: ' '), const TextSpan(text: ' '),
TextSpan( TextSpan(
text: modelResult! text: modelResult
.outline![index] .outline![index]
.partOutline![i] .partOutline![i]
.content!), .content!),