|
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; |
|
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|
|
|
import 'package:get/get.dart'; |
|
|
|
|
|
|
|
import '../../../routes/app_routes.dart'; |
|
|
|
import '../controllers/meeting_details_controller.dart'; |
|
|
|
import 'record_language_bottom_sheet.dart'; |
|
|
|
|
|
|
|
@ -20,6 +21,44 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> { |
|
|
|
String _language = 'zh-CN'; |
|
|
|
|
|
|
|
int _templateId = 0; |
|
|
|
int _lastTemplateId = 0; |
|
|
|
final List _templateList = [ |
|
|
|
{ |
|
|
|
'id': 1, |
|
|
|
'name': '会议纪要', |
|
|
|
'icon': Icons.auto_stories, |
|
|
|
'tag': ['主题', '代办事项'], |
|
|
|
'desc': '', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'id': 2, |
|
|
|
'name': 'Autopilot', |
|
|
|
'icon': Icons.auto_graph, |
|
|
|
'tag': ['自适应结构', '全场景适配'], |
|
|
|
'desc': '', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'id': 3, |
|
|
|
'name': '推理Autopilot', |
|
|
|
'icon': Icons.add_to_drive_outlined, |
|
|
|
'tag': ['推理模型', '自动结构化'], |
|
|
|
'desc': '', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'id': 4, |
|
|
|
'name': '通话', |
|
|
|
'icon': Icons.perm_phone_msg, |
|
|
|
'tag': ['主题', '代办事项'], |
|
|
|
'desc': '', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'id': 5, |
|
|
|
'name': '自定义', |
|
|
|
'icon': Icons.auto_fix_high, |
|
|
|
'tag': [], |
|
|
|
'desc': '自定义模版', |
|
|
|
}, |
|
|
|
]; |
|
|
|
|
|
|
|
@override |
|
|
|
Widget build(BuildContext context) { |
|
|
|
@ -97,20 +136,32 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> { |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
Row( |
|
|
|
children: [ |
|
|
|
Text( |
|
|
|
'查看全部', |
|
|
|
style: TextStyle( |
|
|
|
fontSize: 12.sp, |
|
|
|
color: Colors.grey, |
|
|
|
GestureDetector( |
|
|
|
onTap: () async { |
|
|
|
var result = await Get.toNamed(Routes.template, arguments: { |
|
|
|
'id': _templateId, |
|
|
|
}); |
|
|
|
if (result != null) { |
|
|
|
setState(() { |
|
|
|
_templateId = result; |
|
|
|
}); |
|
|
|
} |
|
|
|
}, |
|
|
|
child: Row( |
|
|
|
children: [ |
|
|
|
Text( |
|
|
|
'查看全部', |
|
|
|
style: TextStyle( |
|
|
|
fontSize: 12.sp, |
|
|
|
color: Colors.grey, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
const Icon( |
|
|
|
Icons.keyboard_arrow_right, |
|
|
|
color: Colors.grey, |
|
|
|
) |
|
|
|
], |
|
|
|
const Icon( |
|
|
|
Icons.keyboard_arrow_right, |
|
|
|
color: Colors.grey, |
|
|
|
) |
|
|
|
], |
|
|
|
), |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
@ -119,11 +170,12 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> { |
|
|
|
height: 130.w, |
|
|
|
margin: EdgeInsets.only(bottom: 16.w), |
|
|
|
child: ListView.builder( |
|
|
|
itemCount: 10, |
|
|
|
itemCount: _templateList.length, |
|
|
|
scrollDirection: Axis.horizontal, |
|
|
|
padding: EdgeInsets.symmetric(horizontal: 4.w), |
|
|
|
itemBuilder: (BuildContext context, int index) { |
|
|
|
return _item(); |
|
|
|
Map data = _templateList[index]; |
|
|
|
return _item(data); |
|
|
|
}, |
|
|
|
), |
|
|
|
), |
|
|
|
@ -208,7 +260,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> { |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
Widget _item() { |
|
|
|
Widget _item(Map data) { |
|
|
|
return Container( |
|
|
|
width: 200.w, |
|
|
|
margin: EdgeInsets.symmetric(horizontal: 8.w), |
|
|
|
@ -216,119 +268,136 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> { |
|
|
|
decoration: BoxDecoration( |
|
|
|
borderRadius: BorderRadius.circular(14.w), |
|
|
|
), |
|
|
|
child: Stack( |
|
|
|
children: [ |
|
|
|
Container( |
|
|
|
padding: EdgeInsets.all(5.w), |
|
|
|
decoration: const BoxDecoration( |
|
|
|
gradient: LinearGradient( |
|
|
|
colors: [Colors.blue, Colors.pinkAccent], |
|
|
|
begin: Alignment.centerLeft, |
|
|
|
end: Alignment.centerRight, |
|
|
|
), |
|
|
|
), |
|
|
|
child: Container( |
|
|
|
width: double.infinity, |
|
|
|
padding: EdgeInsets.all(10.w), |
|
|
|
child: GestureDetector( |
|
|
|
onTap: () { |
|
|
|
setState(() { |
|
|
|
_templateId = data['id']; |
|
|
|
}); |
|
|
|
}, |
|
|
|
child: Stack( |
|
|
|
children: [ |
|
|
|
Container( |
|
|
|
padding: EdgeInsets.all(5.w), |
|
|
|
decoration: BoxDecoration( |
|
|
|
borderRadius: BorderRadius.circular(10.w), |
|
|
|
color: Colors.white, |
|
|
|
gradient: _templateId == data['id'] |
|
|
|
? const LinearGradient( |
|
|
|
colors: [Colors.blue, Colors.pinkAccent], |
|
|
|
begin: Alignment.centerLeft, |
|
|
|
end: Alignment.centerRight, |
|
|
|
) |
|
|
|
: null, |
|
|
|
), |
|
|
|
child: Column( |
|
|
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
|
|
children: [ |
|
|
|
Padding( |
|
|
|
padding: EdgeInsets.only(top: 5.w), |
|
|
|
child: Icon( |
|
|
|
Icons.perm_phone_msg, |
|
|
|
color: Colors.orange, |
|
|
|
size: 30.w, |
|
|
|
), |
|
|
|
), |
|
|
|
Padding( |
|
|
|
padding: EdgeInsets.symmetric(vertical: 10.w), |
|
|
|
child: Text( |
|
|
|
'会议纪要', |
|
|
|
style: TextStyle( |
|
|
|
fontSize: 16.sp, |
|
|
|
color: Colors.black87, |
|
|
|
fontWeight: FontWeight.bold, |
|
|
|
child: Container( |
|
|
|
width: double.infinity, |
|
|
|
padding: EdgeInsets.all(10.w), |
|
|
|
decoration: BoxDecoration( |
|
|
|
borderRadius: BorderRadius.circular(10.w), |
|
|
|
color: Colors.white, |
|
|
|
), |
|
|
|
child: Column( |
|
|
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
|
|
children: [ |
|
|
|
Padding( |
|
|
|
padding: EdgeInsets.only(top: 5.w), |
|
|
|
child: Icon( |
|
|
|
data['icon'], |
|
|
|
color: Colors.orange, |
|
|
|
size: 30.w, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
Wrap( |
|
|
|
children: [ |
|
|
|
Container( |
|
|
|
padding: EdgeInsets.symmetric( |
|
|
|
horizontal: 5.w, vertical: 2.w), |
|
|
|
decoration: BoxDecoration( |
|
|
|
color: Colors.grey[200], |
|
|
|
borderRadius: BorderRadius.circular(4.r), |
|
|
|
), |
|
|
|
child: Text( |
|
|
|
'主题', |
|
|
|
style: TextStyle( |
|
|
|
fontSize: 10.sp, |
|
|
|
color: Colors.grey[600], |
|
|
|
), |
|
|
|
Padding( |
|
|
|
padding: EdgeInsets.symmetric(vertical: 10.w), |
|
|
|
child: Text( |
|
|
|
data['name'], |
|
|
|
style: TextStyle( |
|
|
|
fontSize: 16.sp, |
|
|
|
color: Colors.black87, |
|
|
|
fontWeight: FontWeight.bold, |
|
|
|
), |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
// Text( |
|
|
|
// '主题主题主题主题主题主题主题主题主题主题', |
|
|
|
// overflow: TextOverflow.ellipsis, |
|
|
|
// style: TextStyle( |
|
|
|
// fontSize: 12.sp, |
|
|
|
// color: Colors.grey[600], |
|
|
|
// ), |
|
|
|
// ), |
|
|
|
], |
|
|
|
), |
|
|
|
data['tag'].isNotEmpty |
|
|
|
? Wrap( |
|
|
|
spacing: 5.w, |
|
|
|
children: List.generate( |
|
|
|
data['tag'].length, |
|
|
|
(int idx) { |
|
|
|
return Container( |
|
|
|
padding: EdgeInsets.symmetric( |
|
|
|
horizontal: 5.w, vertical: 2.w), |
|
|
|
decoration: BoxDecoration( |
|
|
|
color: Colors.grey[200], |
|
|
|
borderRadius: BorderRadius.circular(4.r), |
|
|
|
), |
|
|
|
child: Text( |
|
|
|
data['tag'][idx], |
|
|
|
style: TextStyle( |
|
|
|
fontSize: 10.sp, |
|
|
|
color: Colors.grey[600], |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
}, |
|
|
|
), |
|
|
|
) |
|
|
|
: Text( |
|
|
|
data['desc'], |
|
|
|
overflow: TextOverflow.ellipsis, |
|
|
|
style: TextStyle( |
|
|
|
fontSize: 12.sp, |
|
|
|
color: Colors.grey[600], |
|
|
|
), |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
Positioned( |
|
|
|
top: 0, |
|
|
|
left: 0, |
|
|
|
child: Container( |
|
|
|
padding: EdgeInsets.symmetric(horizontal: 5.w, vertical: 1.w), |
|
|
|
decoration: BoxDecoration( |
|
|
|
color: Colors.blue, |
|
|
|
borderRadius: BorderRadius.only( |
|
|
|
topLeft: Radius.circular(12.w), |
|
|
|
bottomRight: Radius.circular(4.w), |
|
|
|
if (_lastTemplateId == data['id']) |
|
|
|
Positioned( |
|
|
|
top: 0, |
|
|
|
left: 0, |
|
|
|
child: Container( |
|
|
|
padding: EdgeInsets.symmetric(horizontal: 5.w, vertical: 1.w), |
|
|
|
decoration: BoxDecoration( |
|
|
|
color: Colors.blue, |
|
|
|
borderRadius: BorderRadius.only( |
|
|
|
topLeft: Radius.circular(12.w), |
|
|
|
bottomRight: Radius.circular(4.w), |
|
|
|
), |
|
|
|
), |
|
|
|
child: Text( |
|
|
|
'上次使用', |
|
|
|
style: TextStyle( |
|
|
|
color: Colors.white, |
|
|
|
fontSize: 12.sp, |
|
|
|
fontWeight: FontWeight.bold, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
child: Text( |
|
|
|
'上次使用', |
|
|
|
style: TextStyle( |
|
|
|
color: Colors.white, |
|
|
|
fontSize: 12.sp, |
|
|
|
fontWeight: FontWeight.bold, |
|
|
|
if (_templateId == data['id']) |
|
|
|
Positioned( |
|
|
|
right: -18.w, |
|
|
|
bottom: -18.w, |
|
|
|
child: Container( |
|
|
|
width: 40.w, |
|
|
|
height: 40.w, |
|
|
|
padding: EdgeInsets.all(2.w), |
|
|
|
alignment: Alignment.topLeft, |
|
|
|
decoration: BoxDecoration( |
|
|
|
color: Colors.pinkAccent, |
|
|
|
borderRadius: BorderRadius.circular(40.r), |
|
|
|
), |
|
|
|
child: Icon( |
|
|
|
Icons.check, |
|
|
|
color: Colors.white, |
|
|
|
size: 18.w, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
Positioned( |
|
|
|
right: -18.w, |
|
|
|
bottom: -18.w, |
|
|
|
child: Container( |
|
|
|
width: 40.w, |
|
|
|
height: 40.w, |
|
|
|
padding: EdgeInsets.all(2.w), |
|
|
|
alignment: Alignment.topLeft, |
|
|
|
decoration: BoxDecoration( |
|
|
|
color: Colors.pinkAccent, |
|
|
|
borderRadius: BorderRadius.circular(40.r), |
|
|
|
), |
|
|
|
child: Icon( |
|
|
|
Icons.check, |
|
|
|
color: Colors.white, |
|
|
|
size: 18.w, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
], |
|
|
|
], |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
} |
|
|
|
|