|
|
@ -89,6 +89,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> { |
|
|
|
|
|
|
|
|
@override |
|
|
@override |
|
|
Widget build(BuildContext context) { |
|
|
Widget build(BuildContext context) { |
|
|
|
|
|
final isDarkMode = Theme.of(context).brightness == Brightness.dark; |
|
|
return SafeArea( |
|
|
return SafeArea( |
|
|
top: false, |
|
|
top: false, |
|
|
child: Padding( |
|
|
child: Padding( |
|
|
@ -96,399 +97,419 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> { |
|
|
child: Column( |
|
|
child: Column( |
|
|
mainAxisSize: MainAxisSize.min, |
|
|
mainAxisSize: MainAxisSize.min, |
|
|
children: [ |
|
|
children: [ |
|
|
Container( |
|
|
Container( |
|
|
padding: EdgeInsets.symmetric(vertical: 10.w), |
|
|
padding: EdgeInsets.symmetric(vertical: 10.w), |
|
|
child: Row( |
|
|
child: Row( |
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
|
|
children: [ |
|
|
children: [ |
|
|
Text( |
|
|
Text( |
|
|
'nameSpeaker'.tr, // 对应中文:命名发言者 |
|
|
'nameSpeaker'.tr, // 对应中文:命名发言者 |
|
|
style: TextStyle( |
|
|
style: TextStyle( |
|
|
fontSize: 16.sp, |
|
|
fontSize: 16.sp, |
|
|
color: Colors.black87, |
|
|
color: isDarkMode ? Colors.white : Colors.black87, |
|
|
fontWeight: FontWeight.bold, |
|
|
fontWeight: FontWeight.bold, |
|
|
), |
|
|
|
|
|
), |
|
|
|
|
|
GestureDetector( |
|
|
|
|
|
onTap: () => Get.back(), |
|
|
|
|
|
child: Container( |
|
|
|
|
|
width: 26.w, |
|
|
|
|
|
height: 26.w, |
|
|
|
|
|
decoration: BoxDecoration( |
|
|
|
|
|
color: Colors.white, |
|
|
|
|
|
borderRadius: BorderRadius.circular(26.r), |
|
|
|
|
|
), |
|
|
|
|
|
child: Icon( |
|
|
|
|
|
Icons.close, |
|
|
|
|
|
size: 18.w, |
|
|
|
|
|
color: Colors.grey[400], |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
) |
|
|
GestureDetector( |
|
|
], |
|
|
onTap: () => Get.back(), |
|
|
), |
|
|
child: Container( |
|
|
), |
|
|
width: 26.w, |
|
|
Divider( |
|
|
height: 26.w, |
|
|
height: 1, |
|
|
|
|
|
color: Colors.grey[300], |
|
|
|
|
|
), |
|
|
|
|
|
Container( |
|
|
|
|
|
constraints: BoxConstraints( |
|
|
|
|
|
maxHeight: |
|
|
|
|
|
1.sh - 240.w - MediaQuery.of(context).viewInsets.bottom, |
|
|
|
|
|
), |
|
|
|
|
|
child: ListView.builder( |
|
|
|
|
|
itemCount: _dataList.length, |
|
|
|
|
|
shrinkWrap: true, |
|
|
|
|
|
itemBuilder: (BuildContext context, int index) { |
|
|
|
|
|
Map item = _dataList[index]; |
|
|
|
|
|
return Column( |
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
|
|
|
|
children: [ |
|
|
|
|
|
Container( |
|
|
|
|
|
margin: EdgeInsets.only(top: 15.w), |
|
|
|
|
|
alignment: Alignment.center, |
|
|
|
|
|
decoration: BoxDecoration( |
|
|
decoration: BoxDecoration( |
|
|
color: Colors.white, |
|
|
color: isDarkMode ? Colors.grey[700] : Colors.white, |
|
|
borderRadius: item['isShow'] && _speakerList.isNotEmpty |
|
|
borderRadius: BorderRadius.circular(26.r), |
|
|
? BorderRadius.vertical( |
|
|
|
|
|
top: Radius.circular(12.r), |
|
|
|
|
|
) |
|
|
|
|
|
: BorderRadius.circular(12.r), |
|
|
|
|
|
), |
|
|
), |
|
|
child: Focus( |
|
|
child: Icon( |
|
|
onFocusChange: (bool hasFocus) { |
|
|
Icons.close, |
|
|
setState(() { |
|
|
size: 18.w, |
|
|
item['isShow'] = hasFocus; |
|
|
color: isDarkMode ? Colors.grey[300] : Colors.grey[400], |
|
|
}); |
|
|
), |
|
|
}, |
|
|
), |
|
|
child: TextField( |
|
|
) |
|
|
controller: item['speakerText'], |
|
|
], |
|
|
style: TextStyle( |
|
|
), |
|
|
fontSize: 16.sp, |
|
|
), |
|
|
color: Colors.black87, |
|
|
Divider( |
|
|
letterSpacing: 0, |
|
|
height: 1, |
|
|
height: 1.4, |
|
|
color: isDarkMode ? Colors.grey[700] : Colors.grey[300], |
|
|
), |
|
|
), |
|
|
decoration: InputDecoration( |
|
|
Container( |
|
|
hintText: item['speaker'], |
|
|
constraints: BoxConstraints( |
|
|
hintStyle: TextStyle( |
|
|
maxHeight: |
|
|
|
|
|
1.sh - 240.w - MediaQuery.of(context).viewInsets.bottom, |
|
|
|
|
|
), |
|
|
|
|
|
child: ListView.builder( |
|
|
|
|
|
itemCount: _dataList.length, |
|
|
|
|
|
shrinkWrap: true, |
|
|
|
|
|
itemBuilder: (BuildContext context, int index) { |
|
|
|
|
|
Map item = _dataList[index]; |
|
|
|
|
|
return Column( |
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
|
|
|
|
children: [ |
|
|
|
|
|
Container( |
|
|
|
|
|
margin: EdgeInsets.only(top: 15.w), |
|
|
|
|
|
alignment: Alignment.center, |
|
|
|
|
|
decoration: BoxDecoration( |
|
|
|
|
|
color: isDarkMode |
|
|
|
|
|
? const Color(0xFF2D2D2D) |
|
|
|
|
|
: Colors.white, |
|
|
|
|
|
borderRadius: |
|
|
|
|
|
item['isShow'] && _speakerList.isNotEmpty |
|
|
|
|
|
? BorderRadius.vertical( |
|
|
|
|
|
top: Radius.circular(12.r), |
|
|
|
|
|
) |
|
|
|
|
|
: BorderRadius.circular(12.r), |
|
|
|
|
|
), |
|
|
|
|
|
child: Focus( |
|
|
|
|
|
onFocusChange: (bool hasFocus) { |
|
|
|
|
|
setState(() { |
|
|
|
|
|
item['isShow'] = hasFocus; |
|
|
|
|
|
}); |
|
|
|
|
|
}, |
|
|
|
|
|
child: TextField( |
|
|
|
|
|
controller: item['speakerText'], |
|
|
|
|
|
style: TextStyle( |
|
|
fontSize: 16.sp, |
|
|
fontSize: 16.sp, |
|
|
color: Colors.grey[400], |
|
|
color: isDarkMode ? Colors.white : Colors.black87, |
|
|
letterSpacing: 0, |
|
|
letterSpacing: 0, |
|
|
height: 1.4, |
|
|
height: 1.4, |
|
|
), |
|
|
), |
|
|
isDense: true, |
|
|
decoration: InputDecoration( |
|
|
fillColor: Colors.transparent, |
|
|
hintText: item['speaker'], |
|
|
border: InputBorder.none, |
|
|
hintStyle: TextStyle( |
|
|
contentPadding: EdgeInsets.symmetric( |
|
|
fontSize: 16.sp, |
|
|
horizontal: 10.w, |
|
|
color: isDarkMode |
|
|
vertical: 12.w, |
|
|
? Colors.grey[500] |
|
|
|
|
|
: Colors.grey[400], |
|
|
|
|
|
letterSpacing: 0, |
|
|
|
|
|
height: 1.4, |
|
|
|
|
|
), |
|
|
|
|
|
isDense: true, |
|
|
|
|
|
fillColor: Colors.transparent, |
|
|
|
|
|
border: InputBorder.none, |
|
|
|
|
|
contentPadding: EdgeInsets.symmetric( |
|
|
|
|
|
horizontal: 10.w, |
|
|
|
|
|
vertical: 12.w, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
if (item['isShow'] && _speakerList.isNotEmpty) |
|
|
if (item['isShow'] && _speakerList.isNotEmpty) |
|
|
Container( |
|
|
Container( |
|
|
padding: EdgeInsets.only(left: 10.w), |
|
|
padding: EdgeInsets.only(left: 10.w), |
|
|
clipBehavior: Clip.hardEdge, |
|
|
clipBehavior: Clip.hardEdge, |
|
|
decoration: BoxDecoration( |
|
|
decoration: BoxDecoration( |
|
|
color: isDarkMode |
|
|
color: Colors.white, |
|
|
? const Color(0xFF2D2D2D) |
|
|
borderRadius: BorderRadius.vertical( |
|
|
: Colors.white, |
|
|
bottom: Radius.circular(12.r), |
|
|
borderRadius: BorderRadius.vertical( |
|
|
), |
|
|
bottom: Radius.circular(12.r), |
|
|
border: Border( |
|
|
|
|
|
top: BorderSide( |
|
|
|
|
|
width: 1, |
|
|
|
|
|
color: Colors.grey[300]!, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
border: Border( |
|
|
), |
|
|
top: BorderSide( |
|
|
child: Column( |
|
|
width: 1, |
|
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
|
color: isDarkMode |
|
|
children: [ |
|
|
? Colors.grey[700]! |
|
|
Padding( |
|
|
: Colors.grey[300]!, |
|
|
padding: EdgeInsets.only(top: 10.w, bottom: 5.w), |
|
|
|
|
|
child: Text( |
|
|
|
|
|
'recentlyUsedNames'.tr, // 对应中文:最近使用过的名称 |
|
|
|
|
|
style: TextStyle( |
|
|
|
|
|
fontSize: 12.sp, |
|
|
|
|
|
color: Colors.grey[600]!, |
|
|
|
|
|
), |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
Container( |
|
|
), |
|
|
constraints: BoxConstraints( |
|
|
child: Column( |
|
|
maxHeight: 150.h, |
|
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
|
|
|
|
children: [ |
|
|
|
|
|
Padding( |
|
|
|
|
|
padding: |
|
|
|
|
|
EdgeInsets.only(top: 10.w, bottom: 5.w), |
|
|
|
|
|
child: Text( |
|
|
|
|
|
'recentlyUsedNames'.tr, // 对应中文:最近使用过的名称 |
|
|
|
|
|
style: TextStyle( |
|
|
|
|
|
fontSize: 12.sp, |
|
|
|
|
|
color: Colors.grey[600]!, |
|
|
|
|
|
), |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
child: ListView.builder( |
|
|
Container( |
|
|
itemCount: _speakerList.length, |
|
|
constraints: BoxConstraints( |
|
|
shrinkWrap: true, |
|
|
maxHeight: 150.h, |
|
|
itemBuilder: (BuildContext context, int idx) { |
|
|
), |
|
|
return GestureDetector( |
|
|
child: ListView.builder( |
|
|
onTap: () { |
|
|
itemCount: _speakerList.length, |
|
|
item['speakerText'].text = |
|
|
shrinkWrap: true, |
|
|
_speakerList[idx]; |
|
|
itemBuilder: (BuildContext context, int idx) { |
|
|
FocusScope.of(context).unfocus(); |
|
|
return GestureDetector( |
|
|
}, |
|
|
onTap: () { |
|
|
behavior: HitTestBehavior.translucent, |
|
|
item['speakerText'].text = |
|
|
child: SizedBox( |
|
|
_speakerList[idx]; |
|
|
height: 42.w, |
|
|
FocusScope.of(context).unfocus(); |
|
|
child: Align( |
|
|
}, |
|
|
alignment: Alignment.centerLeft, |
|
|
behavior: HitTestBehavior.translucent, |
|
|
child: Text( |
|
|
child: SizedBox( |
|
|
_speakerList[idx], |
|
|
height: 42.w, |
|
|
style: TextStyle( |
|
|
child: Align( |
|
|
fontSize: 14.sp, |
|
|
alignment: Alignment.centerLeft, |
|
|
color: Colors.black87, |
|
|
child: Text( |
|
|
|
|
|
_speakerList[idx], |
|
|
|
|
|
style: TextStyle( |
|
|
|
|
|
fontSize: 14.sp, |
|
|
|
|
|
color: isDarkMode |
|
|
|
|
|
? Colors.white |
|
|
|
|
|
: Colors.black87, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
); |
|
|
); |
|
|
}, |
|
|
}, |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
], |
|
|
], |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
Padding( |
|
|
Padding( |
|
|
padding: EdgeInsets.symmetric( |
|
|
padding: EdgeInsets.symmetric( |
|
|
horizontal: 10.w, |
|
|
horizontal: 10.w, |
|
|
vertical: 8.w, |
|
|
vertical: 8.w, |
|
|
), |
|
|
), |
|
|
child: Row( |
|
|
child: Row( |
|
|
children: [ |
|
|
children: [ |
|
|
Text( |
|
|
Text( |
|
|
'totalTime'.tr, // 对应中文:总计 |
|
|
'totalTime'.tr, // 对应中文:总计 |
|
|
style: TextStyle( |
|
|
style: TextStyle( |
|
|
fontSize: 12.sp, |
|
|
fontSize: 12.sp, |
|
|
color: Colors.grey, |
|
|
color: Colors.grey, |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
5.horizontalSpace, |
|
|
5.horizontalSpace, |
|
|
Text( |
|
|
Text( |
|
|
'${item['totaltime'] / 1000}s', |
|
|
'${item['totaltime'] / 1000}s', |
|
|
style: TextStyle( |
|
|
style: TextStyle( |
|
|
fontSize: 12.sp, |
|
|
fontSize: 12.sp, |
|
|
color: isDarkMode |
|
|
color: Colors.black87, |
|
|
? Colors.white70 |
|
|
|
|
|
: Colors.black87, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
], |
|
|
], |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
...List.generate( |
|
|
...List.generate( |
|
|
item['list'].length, |
|
|
item['list'].length, |
|
|
(int idx) { |
|
|
(int idx) { |
|
|
Map data = item['list'][idx]; |
|
|
Map data = item['list'][idx]; |
|
|
return Obx(() { |
|
|
return Obx(() { |
|
|
bool isActive = false; |
|
|
bool isActive = false; |
|
|
if (_controller.speakerAllStarttime.value == |
|
|
if (_controller.speakerAllStarttime.value == |
|
|
data['starttime'] && |
|
|
data['starttime'] && |
|
|
_controller.speakerAllEndtime.value == |
|
|
_controller.speakerAllEndtime.value == |
|
|
data['endtime']) { |
|
|
data['endtime']) { |
|
|
isActive = true; |
|
|
isActive = true; |
|
|
} |
|
|
} |
|
|
return GestureDetector( |
|
|
return GestureDetector( |
|
|
behavior: HitTestBehavior.translucent, |
|
|
behavior: HitTestBehavior.translucent, |
|
|
onTap: () { |
|
|
onTap: () { |
|
|
if (isActive) { |
|
|
if (isActive) { |
|
|
_controller.playerController.pausePlayer(); |
|
|
_controller.playerController.pausePlayer(); |
|
|
_controller.speakerAllStarttime.value = -1; |
|
|
_controller.speakerAllStarttime.value = -1; |
|
|
_controller.speakerAllEndtime.value = -1; |
|
|
_controller.speakerAllEndtime.value = -1; |
|
|
} else { |
|
|
} else { |
|
|
_controller.speakerAllStarttime.value = |
|
|
_controller.speakerAllStarttime.value = |
|
|
data['starttime']; |
|
|
data['starttime']; |
|
|
_controller.speakerAllEndtime.value = |
|
|
_controller.speakerAllEndtime.value = |
|
|
data['endtime']; |
|
|
data['endtime']; |
|
|
_controller.playerController |
|
|
_controller.playerController |
|
|
.seekTo(data['starttime']); |
|
|
.seekTo(data['starttime']); |
|
|
_controller.playerController.startPlayer(); |
|
|
_controller.playerController.startPlayer(); |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
child: Padding( |
|
|
child: Padding( |
|
|
padding: EdgeInsets.symmetric(horizontal: 10.w), |
|
|
padding: EdgeInsets.symmetric(horizontal: 10.w), |
|
|
child: Column( |
|
|
child: Column( |
|
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
|
children: [ |
|
|
children: [ |
|
|
Row( |
|
|
Row( |
|
|
children: [ |
|
|
children: [ |
|
|
Icon( |
|
|
Icon( |
|
|
isActive |
|
|
isActive |
|
|
? Icons.pause_circle |
|
|
? Icons.pause_circle |
|
|
: Icons.play_circle, |
|
|
: Icons.play_circle, |
|
|
color: Colors.red[400], |
|
|
color: Colors.red[400], |
|
|
size: 15.w, |
|
|
size: 15.w, |
|
|
|
|
|
), |
|
|
|
|
|
2.horizontalSpace, |
|
|
|
|
|
Text( |
|
|
|
|
|
DateUtil.formatDateMs( |
|
|
|
|
|
data['starttime'], |
|
|
|
|
|
format: 'HH:mm:ss', |
|
|
|
|
|
isUtc: true, |
|
|
|
|
|
), |
|
|
), |
|
|
style: TextStyle( |
|
|
2.horizontalSpace, |
|
|
color: Colors.grey, |
|
|
Text( |
|
|
fontSize: 12.sp, |
|
|
DateUtil.formatDateMs( |
|
|
), |
|
|
data['starttime'], |
|
|
), |
|
|
format: 'HH:mm:ss', |
|
|
Padding( |
|
|
isUtc: true, |
|
|
padding: EdgeInsets.symmetric( |
|
|
), |
|
|
horizontal: 2.w), |
|
|
|
|
|
child: Text( |
|
|
|
|
|
'-', |
|
|
|
|
|
style: TextStyle( |
|
|
style: TextStyle( |
|
|
color: Colors.grey, |
|
|
color: Colors.grey, |
|
|
fontSize: 12.sp, |
|
|
fontSize: 12.sp, |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
Padding( |
|
|
Text( |
|
|
padding: EdgeInsets.symmetric( |
|
|
DateUtil.formatDateMs( |
|
|
horizontal: 2.w), |
|
|
data['endtime'], |
|
|
child: Text( |
|
|
format: 'HH:mm:ss', |
|
|
'-', |
|
|
isUtc: true, |
|
|
style: TextStyle( |
|
|
|
|
|
color: Colors.grey, |
|
|
|
|
|
fontSize: 12.sp, |
|
|
|
|
|
), |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
style: TextStyle( |
|
|
Text( |
|
|
color: Colors.grey, |
|
|
DateUtil.formatDateMs( |
|
|
fontSize: 12.sp, |
|
|
data['endtime'], |
|
|
|
|
|
format: 'HH:mm:ss', |
|
|
|
|
|
isUtc: true, |
|
|
|
|
|
), |
|
|
|
|
|
style: TextStyle( |
|
|
|
|
|
color: Colors.grey, |
|
|
|
|
|
fontSize: 12.sp, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
5.horizontalSpace, |
|
|
5.horizontalSpace, |
|
|
Text( |
|
|
Text( |
|
|
'${(data['endtime'] - data['starttime']) / 1000}s', |
|
|
'${(data['endtime'] - data['starttime']) / 1000}s', |
|
|
style: TextStyle( |
|
|
style: TextStyle( |
|
|
color: isDarkMode |
|
|
color: Colors.black54, |
|
|
? Colors.grey[400] |
|
|
fontSize: 12.sp, |
|
|
: Colors.black54, |
|
|
|
|
|
fontSize: 12.sp, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
if (isActive) |
|
|
if (isActive) |
|
|
Container( |
|
|
Container( |
|
|
width: 16.w, |
|
|
width: 16.w, |
|
|
height: 16.w, |
|
|
height: 16.w, |
|
|
margin: EdgeInsets.only(left: 5.w), |
|
|
margin: EdgeInsets.only(left: 5.w), |
|
|
alignment: Alignment.center, |
|
|
alignment: Alignment.center, |
|
|
clipBehavior: Clip.hardEdge, |
|
|
clipBehavior: Clip.hardEdge, |
|
|
decoration: const BoxDecoration(), |
|
|
decoration: const BoxDecoration(), |
|
|
child: Transform.scale( |
|
|
child: Transform.scale( |
|
|
scale: 1.6, |
|
|
scale: 1.6, |
|
|
child: Lottie.asset( |
|
|
child: Lottie.asset( |
|
|
'assets/lottie/sound_effect.json', |
|
|
'assets/lottie/sound_effect.json', |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
|
|
|
], |
|
|
|
|
|
), |
|
|
|
|
|
Padding( |
|
|
|
|
|
padding: |
|
|
|
|
|
EdgeInsets.symmetric(vertical: 8.w), |
|
|
|
|
|
child: Text( |
|
|
|
|
|
data['content'], |
|
|
|
|
|
overflow: TextOverflow.ellipsis, |
|
|
|
|
|
maxLines: 2, |
|
|
|
|
|
style: TextStyle( |
|
|
|
|
|
color: isActive |
|
|
|
|
|
? Colors.red |
|
|
|
|
|
: isDarkMode |
|
|
|
|
|
? Colors.grey[400] |
|
|
|
|
|
: Colors.grey[700], |
|
|
|
|
|
fontSize: 12.sp, |
|
|
), |
|
|
), |
|
|
], |
|
|
|
|
|
), |
|
|
|
|
|
Padding( |
|
|
|
|
|
padding: |
|
|
|
|
|
EdgeInsets.symmetric(vertical: 8.w), |
|
|
|
|
|
child: Text( |
|
|
|
|
|
data['content'], |
|
|
|
|
|
overflow: TextOverflow.ellipsis, |
|
|
|
|
|
maxLines: 2, |
|
|
|
|
|
style: TextStyle( |
|
|
|
|
|
color: isActive |
|
|
|
|
|
? Colors.red |
|
|
|
|
|
: Colors.grey[700], |
|
|
|
|
|
fontSize: 12.sp, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
], |
|
|
], |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
); |
|
|
); |
|
|
}); |
|
|
}); |
|
|
}, |
|
|
}, |
|
|
), |
|
|
), |
|
|
if (item['isOmit']) |
|
|
if (item['isOmit']) |
|
|
Padding( |
|
|
Padding( |
|
|
padding: EdgeInsets.only( |
|
|
padding: |
|
|
left: 10.w, top: 5.w, bottom: 8.w), |
|
|
EdgeInsets.only(left: 10.w, top: 5.w, bottom: 8.w), |
|
|
child: Row( |
|
|
child: Row( |
|
|
children: List.generate( |
|
|
children: List.generate( |
|
|
6, |
|
|
6, |
|
|
(int idx) => Container( |
|
|
(int idx) => Container( |
|
|
width: 3.w, |
|
|
width: 3.w, |
|
|
height: 3.w, |
|
|
height: 3.w, |
|
|
margin: EdgeInsets.only(right: 3.w), |
|
|
margin: EdgeInsets.only(right: 3.w), |
|
|
decoration: BoxDecoration( |
|
|
decoration: BoxDecoration( |
|
|
color: Colors.grey[700], |
|
|
color: Colors.grey[700], |
|
|
borderRadius: BorderRadius.circular(3.r), |
|
|
borderRadius: BorderRadius.circular(3.r), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
|
|
|
Padding( |
|
|
|
|
|
padding: EdgeInsets.only(top: 7.w), |
|
|
|
|
|
child: _separator(), |
|
|
), |
|
|
), |
|
|
Padding( |
|
|
], |
|
|
padding: EdgeInsets.only(top: 7.w), |
|
|
); |
|
|
child: _separator(), |
|
|
}, |
|
|
), |
|
|
), |
|
|
], |
|
|
|
|
|
); |
|
|
|
|
|
}, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
Padding( |
|
|
Padding( |
|
|
padding: EdgeInsets.symmetric(vertical: 5.w), |
|
|
padding: EdgeInsets.symmetric(vertical: 5.w), |
|
|
child: Text( |
|
|
child: Text( |
|
|
'summarySpeakerWillBeUpdatedAutomatically' |
|
|
'summarySpeakerWillBeUpdatedAutomatically'.tr, // 对应中文:总结的发言者将自动更新 |
|
|
.tr, // 对应中文:总结的发言者将自动更新 |
|
|
style: TextStyle( |
|
|
style: TextStyle( |
|
|
fontSize: 14.sp, |
|
|
fontSize: 14.sp, |
|
|
color: Colors.grey[600], |
|
|
color: Colors.grey[600], |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
Padding( |
|
|
Padding( |
|
|
padding: EdgeInsets.only(bottom: 20.w), |
|
|
padding: EdgeInsets.only(bottom: 20.w), |
|
|
child: Row( |
|
|
child: Row( |
|
|
children: [ |
|
|
children: [ |
|
|
Expanded( |
|
|
Expanded( |
|
|
child: GestureDetector( |
|
|
child: GestureDetector( |
|
|
onTap: () => Get.back(), |
|
|
onTap: () => Get.back(), |
|
|
child: Container( |
|
|
child: Container( |
|
|
height: 48.w, |
|
|
height: 48.w, |
|
|
alignment: Alignment.center, |
|
|
alignment: Alignment.center, |
|
|
decoration: BoxDecoration( |
|
|
decoration: BoxDecoration( |
|
|
color: |
|
|
color: Colors.grey[300], |
|
|
isDarkMode ? Colors.grey[700] : Colors.grey[300], |
|
|
borderRadius: BorderRadius.circular(12.r), |
|
|
borderRadius: BorderRadius.circular(12.r), |
|
|
), |
|
|
), |
|
|
child: Text( |
|
|
child: Text( |
|
|
'cancel'.tr, // 对应中文:取消 |
|
|
'cancel'.tr, // 对应中文:取消 |
|
|
style: TextStyle( |
|
|
style: TextStyle( |
|
|
fontSize: 16.sp, |
|
|
fontSize: 16.sp, |
|
|
color: Colors.black, |
|
|
color: isDarkMode ? Colors.white : Colors.black, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
10.horizontalSpace, |
|
|
10.horizontalSpace, |
|
|
Expanded( |
|
|
Expanded( |
|
|
child: GestureDetector( |
|
|
child: GestureDetector( |
|
|
onTap: _save, |
|
|
onTap: _save, |
|
|
child: Container( |
|
|
child: Container( |
|
|
height: 48.w, |
|
|
height: 48.w, |
|
|
alignment: Alignment.center, |
|
|
alignment: Alignment.center, |
|
|
decoration: BoxDecoration( |
|
|
decoration: BoxDecoration( |
|
|
color: isDarkMode ? Colors.white : Colors.black, |
|
|
color: Colors.black, |
|
|
borderRadius: BorderRadius.circular(12.r), |
|
|
borderRadius: BorderRadius.circular(12.r), |
|
|
), |
|
|
), |
|
|
child: Text( |
|
|
child: Text( |
|
|
'confirm'.tr, // 对应中文:确认 |
|
|
'confirm'.tr, // 对应中文:确认 |
|
|
|
|
|
|
|
|
|
|
|
style: TextStyle( |
|
|
style: TextStyle( |
|
|
fontSize: 16.sp, |
|
|
fontSize: 16.sp, |
|
|
color: Colors.white, |
|
|
color: isDarkMode ? Colors.black : Colors.white, |
|
|
|
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
], |
|
|
], |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
|
|
|
], |
|
|
], |
|
|
), |
|
|
), |
|
|
), |
|
|
), |
|
|
@ -498,6 +519,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> { |
|
|
Widget _separator() { |
|
|
Widget _separator() { |
|
|
return LayoutBuilder( |
|
|
return LayoutBuilder( |
|
|
builder: (BuildContext context, BoxConstraints constraints) { |
|
|
builder: (BuildContext context, BoxConstraints constraints) { |
|
|
|
|
|
final isDarkMode = Theme.of(context).brightness == Brightness.dark; |
|
|
final boxWidth = constraints.constrainWidth(); |
|
|
final boxWidth = constraints.constrainWidth(); |
|
|
const dashWidth = 2.0; |
|
|
const dashWidth = 2.0; |
|
|
const dashHeight = 1.0; |
|
|
const dashHeight = 1.0; |
|
|
@ -510,7 +532,8 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> { |
|
|
width: dashWidth, |
|
|
width: dashWidth, |
|
|
height: dashHeight, |
|
|
height: dashHeight, |
|
|
child: DecoratedBox( |
|
|
child: DecoratedBox( |
|
|
decoration: BoxDecoration(color: Colors.grey[300]), |
|
|
decoration: BoxDecoration( |
|
|
|
|
|
color: isDarkMode ? Colors.grey[700] : Colors.grey[300]), |
|
|
), |
|
|
), |
|
|
); |
|
|
); |
|
|
}), |
|
|
}), |
|
|
|