Browse Source

fix: 为WebView和底部弹窗添加SafeArea避免刘海屏遮挡

为所有WebView页面和底部弹窗添加SafeArea包装,设置top: false以避免系统状态栏区域遮挡内容。同时调整底部按钮位置,考虑底部安全区域边距,确保在刘海屏设备上UI显示正常。
weicu
lxm 8 months ago
parent
commit
7077820edf
  1. 7
      lib/modules/common/webview_page.dart
  2. 103
      lib/modules/goods/views/goodsai_view.dart
  3. 67
      lib/modules/goods/views/goodsmeet_view.dart
  4. 65
      lib/modules/goods/views/goodstrans_view.dart
  5. 105
      lib/modules/goods/views/goodsvip_view.dart
  6. 113
      lib/modules/meeting/views/bottomSheet/ai_bottom_sheet.dart
  7. 15
      lib/modules/meeting/views/bottomSheet/edit_title_bottom_sheet.dart
  8. 11
      lib/modules/meeting/views/bottomSheet/generate_bottom_sheet.dart
  9. 35
      lib/modules/meeting/views/bottomSheet/member_bottom_sheet.dart
  10. 15
      lib/modules/meeting/views/bottomSheet/more_bottom_sheet.dart
  11. 15
      lib/modules/meeting/views/bottomSheet/record_language_bottom_sheet.dart
  12. 17
      lib/modules/meeting/views/bottomSheet/second_level_bottom_sheet.dart
  13. 15
      lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart
  14. 15
      lib/modules/meeting/views/bottomSheet/speaker_all_bottom_sheet.dart
  15. 15
      lib/modules/meeting/views/bottomSheet/speaker_bottom_sheet.dart
  16. 7
      lib/modules/meeting/views/tabs/mind_map_tab.dart
  17. 2
      lib/modules/meeting/views/tabs/overview_tab.dart
  18. 12
      lib/modules/meeting/views/tabs/speech_tab.dart
  19. 19
      lib/modules/meeting/views/tabs/summary_tab.dart
  20. 37
      lib/modules/payment/views/payment_view.dart
  21. 27
      lib/modules/permissions/views/permissions_view.dart

7
lib/modules/common/webview_page.dart

@ -41,8 +41,11 @@ class WebViewPage extends StatelessWidget {
), ),
centerTitle: true, centerTitle: true,
), ),
body: WebViewWidget( body: SafeArea(
controller: controller, top: false,
child: WebViewWidget(
controller: controller,
),
), ),
); );
} }

103
lib/modules/goods/views/goodsai_view.dart

@ -30,60 +30,63 @@ class GoodsaiView extends GetView<GoodsaiController> {
), ),
centerTitle: true, centerTitle: true,
), ),
body: Obx(() { body: SafeArea(
// 访问刷新信号以建立依赖关系:用户信息变化时触发重建 top: false,
final _ = User.refreshTick.value; child: Obx(() {
Widget content; // 访问刷新信号以建立依赖关系:用户信息变化时触发重建
if (controller.loading.value) { final _ = User.refreshTick.value;
content = const Center(child: CircularProgressIndicator()); Widget content;
} else if (controller.error.isNotEmpty) { if (controller.loading.value) {
content = Center(child: Text(controller.error.value)); content = const Center(child: CircularProgressIndicator());
} else { } else if (controller.error.isNotEmpty) {
content = ListView( content = Center(child: Text(controller.error.value));
padding: EdgeInsets.all(16.w), } else {
children: [ content = ListView(
_buildHeader(isDarkMode), padding: EdgeInsets.all(16.w),
SizedBox(height: 12.h), children: [
_buildUsageCard(isDarkMode), _buildHeader(isDarkMode),
SizedBox(height: 16.h), SizedBox(height: 12.h),
Text( _buildUsageCard(isDarkMode),
'availablePackages'.tr, SizedBox(height: 16.h),
style: TextStyle( Text(
fontSize: 16.sp, 'availablePackages'.tr,
fontWeight: FontWeight.w600, style: TextStyle(
color: isDarkMode ? Colors.white : Colors.black, fontSize: 16.sp,
fontWeight: FontWeight.w600,
color: isDarkMode ? Colors.white : Colors.black,
),
), ),
), SizedBox(height: 8.h),
SizedBox(height: 8.h), ...controller.items.map((item) => Padding(
...controller.items.map((item) => Padding( padding: EdgeInsets.only(bottom: 12.h),
padding: EdgeInsets.only(bottom: 12.h), child: _buildCard(item, isDarkMode),
child: _buildCard(item, isDarkMode), )),
)), SizedBox(height: 16.h),
SizedBox(height: 16.h), _buildFeaturesSection(isDarkMode),
_buildFeaturesSection(isDarkMode), SizedBox(height: 16.h),
SizedBox(height: 16.h), GoodsFooterSection(isDarkMode: isDarkMode),
GoodsFooterSection(isDarkMode: isDarkMode), ],
], );
); }
} return Stack(
return Stack( children: [
children: [ content,
content, if (controller.isPaying.value)
if (controller.isPaying.value) Positioned.fill(
Positioned.fill( child: AbsorbPointer(
child: AbsorbPointer( absorbing: true,
absorbing: true, child: Container(
child: Container( color: Colors.black.withOpacity(0.35),
color: Colors.black.withOpacity(0.35), child: const Center(
child: const Center( child: CircularProgressIndicator(),
child: CircularProgressIndicator(), ),
), ),
), ),
), ),
), ],
], );
); }),
}), ),
); );
} }

67
lib/modules/goods/views/goodsmeet_view.dart

@ -37,38 +37,41 @@ class GoodsmeetView extends GetView<GoodsmeetController> {
), ),
centerTitle: true, centerTitle: true,
), ),
body: Obx(() { body: SafeArea(
// 访问刷新信号以建立依赖关系:用户信息变化时触发重建 top: false,
final _ = User.refreshTick.value; child: Obx(() {
if (controller.loading.value) { // 访问刷新信号以建立依赖关系:用户信息变化时触发重建
return const Center(child: CircularProgressIndicator()); final _ = User.refreshTick.value;
} if (controller.loading.value) {
if (controller.error.isNotEmpty) { return const Center(child: CircularProgressIndicator());
return Center(child: Text(controller.error.value)); }
} if (controller.error.isNotEmpty) {
return ListView.separated( return Center(child: Text(controller.error.value));
padding: EdgeInsets.all(16.w), }
itemCount: controller.items.length + 4, return ListView.separated(
separatorBuilder: (_, __) => SizedBox(height: 12.h), padding: EdgeInsets.all(16.w),
itemBuilder: (_, index) { itemCount: controller.items.length + 4,
if (index == 0) { separatorBuilder: (_, __) => SizedBox(height: 12.h),
return _buildHeader(isDarkMode); itemBuilder: (_, index) {
} if (index == 0) {
if (index == 1) { return _buildHeader(isDarkMode);
return _buildUsageCard(isDarkMode); }
} if (index == 1) {
final itemIndex = index - 2; return _buildUsageCard(isDarkMode);
if (itemIndex < controller.items.length) { }
final item = controller.items[itemIndex]; final itemIndex = index - 2;
return _buildCard(item, isDarkMode); if (itemIndex < controller.items.length) {
} final item = controller.items[itemIndex];
if (index == controller.items.length + 2) { return _buildCard(item, isDarkMode);
return _buildFeaturesSection(isDarkMode); }
} if (index == controller.items.length + 2) {
return GoodsFooterSection(isDarkMode: isDarkMode); return _buildFeaturesSection(isDarkMode);
}, }
); return GoodsFooterSection(isDarkMode: isDarkMode);
}), },
);
}),
),
); );
} }

65
lib/modules/goods/views/goodstrans_view.dart

@ -37,37 +37,40 @@ class GoodstransView extends GetView<GoodstransController> {
), ),
centerTitle: true, centerTitle: true,
), ),
body: Obx(() { body: SafeArea(
final _ = User.refreshTick.value; top: false,
if (controller.loading.value) { child: Obx(() {
return const Center(child: CircularProgressIndicator()); final _ = User.refreshTick.value;
} if (controller.loading.value) {
if (controller.error.isNotEmpty) { return const Center(child: CircularProgressIndicator());
return Center(child: Text(controller.error.value)); }
} if (controller.error.isNotEmpty) {
return ListView.separated( return Center(child: Text(controller.error.value));
padding: EdgeInsets.all(16.w), }
itemCount: controller.items.length + 4, return ListView.separated(
separatorBuilder: (_, __) => SizedBox(height: 12.h), padding: EdgeInsets.all(16.w),
itemBuilder: (_, index) { itemCount: controller.items.length + 4,
if (index == 0) { separatorBuilder: (_, __) => SizedBox(height: 12.h),
return _buildHeader(isDarkMode); itemBuilder: (_, index) {
} if (index == 0) {
if (index == 1) { return _buildHeader(isDarkMode);
return _buildUsageCard(isDarkMode); }
} if (index == 1) {
final itemIndex = index - 2; return _buildUsageCard(isDarkMode);
if (itemIndex < controller.items.length) { }
final item = controller.items[itemIndex]; final itemIndex = index - 2;
return _buildCard(item, isDarkMode); if (itemIndex < controller.items.length) {
} final item = controller.items[itemIndex];
if (index == controller.items.length + 2) { return _buildCard(item, isDarkMode);
return _buildFeaturesSection(isDarkMode); }
} if (index == controller.items.length + 2) {
return GoodsFooterSection(isDarkMode: isDarkMode); return _buildFeaturesSection(isDarkMode);
}, }
); return GoodsFooterSection(isDarkMode: isDarkMode);
}), },
);
}),
),
); );
} }

105
lib/modules/goods/views/goodsvip_view.dart

@ -38,62 +38,65 @@ class GoodsvipView extends GetView<GoodsvipController> {
), ),
centerTitle: true, centerTitle: true,
), ),
body: Obx(() { body: SafeArea(
final userTick = User.refreshTick.value; top: false,
Widget content; child: Obx(() {
if (controller.loading.value) { final userTick = User.refreshTick.value;
content = const Center(child: CircularProgressIndicator()); Widget content;
} else if (controller.error.isNotEmpty) { if (controller.loading.value) {
content = Center(child: Text(controller.error.value)); content = const Center(child: CircularProgressIndicator());
} else { } else if (controller.error.isNotEmpty) {
final Map<UsageType, List<DBGoods>> grouped = {}; content = Center(child: Text(controller.error.value));
for (final g in controller.items) { } else {
grouped.putIfAbsent(g.usagetype, () => []).add(g); final Map<UsageType, List<DBGoods>> grouped = {};
} for (final g in controller.items) {
final order = [UsageType.Vip]; grouped.putIfAbsent(g.usagetype, () => []).add(g);
final children = <Widget>[]; }
children.add(_buildFeaturesSection(isDarkMode)); final order = [UsageType.Vip];
children.add(SizedBox(height: 16.h)); final children = <Widget>[];
// children.add(_buildScenesSection(isDarkMode)); children.add(_buildFeaturesSection(isDarkMode));
// children.add(SizedBox(height: 16.h)); children.add(SizedBox(height: 16.h));
for (int i = 0; i < order.length; i++) { // children.add(_buildScenesSection(isDarkMode));
final t = order[i]; // children.add(SizedBox(height: 16.h));
final list = grouped[t]; for (int i = 0; i < order.length; i++) {
if (list == null || list.isEmpty) continue; final t = order[i];
children.add(_buildTypeSection(t, list, isDarkMode)); final list = grouped[t];
if (i != order.length - 1) { if (list == null || list.isEmpty) continue;
children.add(SizedBox(height: 16.h)); children.add(_buildTypeSection(t, list, isDarkMode));
children.add( if (i != order.length - 1) {
Divider(color: isDarkMode ? Colors.white24 : Colors.black12)); children.add(SizedBox(height: 16.h));
children.add(SizedBox(height: 16.h)); children.add(Divider(
color: isDarkMode ? Colors.white24 : Colors.black12));
children.add(SizedBox(height: 16.h));
}
} }
}
children.add(GoodsFooterSection(isDarkMode: isDarkMode)); children.add(GoodsFooterSection(isDarkMode: isDarkMode));
content = ListView( content = ListView(
key: ValueKey(userTick), key: ValueKey(userTick),
padding: EdgeInsets.all(16.w), padding: EdgeInsets.all(16.w),
children: children, children: children,
); );
} }
return Stack( return Stack(
children: [ children: [
content, content,
if (controller.isPaying.value) if (controller.isPaying.value)
Positioned.fill( Positioned.fill(
child: AbsorbPointer( child: AbsorbPointer(
absorbing: true, absorbing: true,
child: Container( child: Container(
color: Colors.black.withOpacity(0.35), color: Colors.black.withOpacity(0.35),
child: const Center( child: const Center(
child: CircularProgressIndicator(), child: CircularProgressIndicator(),
),
), ),
), ),
), ),
), ],
], );
); }),
}), ),
); );
} }

113
lib/modules/meeting/views/bottomSheet/ai_bottom_sheet.dart

@ -74,65 +74,68 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w), top: false,
constraints: BoxConstraints( child: Container(
maxHeight: 1.sh - 50.h - MediaQuery.of(context).viewInsets.bottom, padding: EdgeInsets.symmetric(horizontal: 12.w),
), constraints: BoxConstraints(
child: Column( maxHeight: 1.sh - 50.h - MediaQuery.of(context).viewInsets.bottom,
children: [ ),
Container( child: Column(
padding: EdgeInsets.symmetric(vertical: 10.w), children: [
child: Row( Container(
mainAxisAlignment: MainAxisAlignment.spaceBetween, padding: EdgeInsets.symmetric(vertical: 10.w),
children: [ child: Row(
26.horizontalSpace, mainAxisAlignment: MainAxisAlignment.spaceBetween,
Text( children: [
'Ask AI', 26.horizontalSpace,
style: TextStyle( Text(
fontSize: 16.sp, 'Ask AI',
color: Colors.black87, style: TextStyle(
fontWeight: FontWeight.bold, fontSize: 16.sp,
), color: Colors.black87,
), fontWeight: FontWeight.bold,
GestureDetector(
onTap: () => Get.back(),
child: Container(
width: 26.w,
height: 26.w,
decoration: BoxDecoration(
color: Colors.grey[100],
borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( ),
Icons.close, GestureDetector(
size: 18.w, onTap: () => Get.back(),
color: Colors.grey[400], child: Container(
width: 26.w,
height: 26.w,
decoration: BoxDecoration(
color: Colors.grey[100],
borderRadius: BorderRadius.circular(26.r),
),
child: Icon(
Icons.close,
size: 18.w,
color: Colors.grey[400],
),
), ),
), ),
), ],
], ),
), ),
), Expanded(
Expanded( child: _dataList.isNotEmpty
child: _dataList.isNotEmpty ? Align(
? Align( alignment: Alignment.topCenter,
alignment: Alignment.topCenter, child: ListView.builder(
child: ListView.builder( controller: _scrollController,
controller: _scrollController, itemCount: _dataList.length,
itemCount: _dataList.length, shrinkWrap: true,
shrinkWrap: true, reverse: true,
reverse: true, itemBuilder: (BuildContext context, int index) {
itemBuilder: (BuildContext context, int index) { Map data = _dataList[index];
Map data = _dataList[index]; return _item(index, data);
return _item(index, data); },
}, ),
), )
) : _empty(),
: _empty(), ),
), _inputBox(),
_inputBox(), ],
], ),
), ),
); );
} }

15
lib/modules/meeting/views/bottomSheet/edit_title_bottom_sheet.dart

@ -11,11 +11,13 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w), top: false,
child: Column( child: Padding(
mainAxisSize: MainAxisSize.min, padding: EdgeInsets.symmetric(horizontal: 12.w),
children: [ child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container( Container(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row( child: Row(
@ -135,7 +137,8 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
], ],
), ),
), ),
], ],
),
), ),
); );
} }

11
lib/modules/meeting/views/bottomSheet/generate_bottom_sheet.dart

@ -88,9 +88,11 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return SafeArea(
mainAxisSize: MainAxisSize.min, top: false,
children: [ child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container( Container(
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 10.w), padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 10.w),
child: Row( child: Row(
@ -370,7 +372,8 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
), ),
), ),
), ),
], ],
),
); );
} }

35
lib/modules/meeting/views/bottomSheet/member_bottom_sheet.dart

@ -9,22 +9,24 @@ class MemberBottomSheet extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w), top: false,
decoration: BoxDecoration( child: Container(
borderRadius: BorderRadius.vertical( padding: EdgeInsets.symmetric(horizontal: 12.w),
top: Radius.circular(12.r), decoration: BoxDecoration(
), borderRadius: BorderRadius.vertical(
image: const DecorationImage( top: Radius.circular(12.r),
alignment: Alignment.topCenter, ),
image: AssetImage('assets/images/mine-background.png'), image: const DecorationImage(
fit: BoxFit.fitWidth, alignment: Alignment.topCenter,
image: AssetImage('assets/images/mine-background.png'),
fit: BoxFit.fitWidth,
),
), ),
), child: Column(
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min,
mainAxisSize: MainAxisSize.min, children: [
children: [
Container( Container(
margin: EdgeInsets.only(top: 12.w), margin: EdgeInsets.only(top: 12.w),
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
@ -130,7 +132,8 @@ class MemberBottomSheet extends StatelessWidget {
], ],
), ),
), ),
], ],
),
), ),
); );
} }

15
lib/modules/meeting/views/bottomSheet/more_bottom_sheet.dart

@ -19,11 +19,13 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 10.w), top: false,
child: Column( child: Padding(
mainAxisSize: MainAxisSize.min, padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 10.w),
children: [ child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(height: 10.w), SizedBox(height: 10.w),
_shareItem(Icons.refresh, 'reSummarize'.tr, //重新总结 _shareItem(Icons.refresh, 'reSummarize'.tr, //重新总结
onTap: _detailsController.meetingDetails.value.tasktype >= 5 && onTap: _detailsController.meetingDetails.value.tasktype >= 5 &&
@ -52,7 +54,8 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
Get.back(); Get.back();
Get.back(); Get.back();
}), }),
], ],
),
), ),
); );
} }

15
lib/modules/meeting/views/bottomSheet/record_language_bottom_sheet.dart

@ -29,11 +29,13 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w), top: false,
child: Column( child: Padding(
mainAxisSize: MainAxisSize.min, padding: EdgeInsets.symmetric(horizontal: 12.w),
children: [ child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container( Container(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row( child: Row(
@ -88,7 +90,8 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
}, },
), ),
), ),
], ],
),
), ),
); );
} }

17
lib/modules/meeting/views/bottomSheet/second_level_bottom_sheet.dart

@ -21,12 +21,14 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w), top: false,
child: Column( child: Padding(
mainAxisSize: MainAxisSize.min, padding: EdgeInsets.symmetric(horizontal: 12.w),
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: [ mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container( Container(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row( child: Row(
@ -157,7 +159,8 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
), ),
), ),
), ),
], ],
),
), ),
); );
} }

15
lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart

@ -31,11 +31,13 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w), top: false,
child: Column( child: Padding(
mainAxisSize: MainAxisSize.min, padding: EdgeInsets.symmetric(horizontal: 12.w),
children: [ child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container( Container(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row( child: Row(
@ -267,7 +269,8 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
], ],
), ),
), ),
], ],
),
), ),
); );
} }

15
lib/modules/meeting/views/bottomSheet/speaker_all_bottom_sheet.dart

@ -89,11 +89,13 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w), top: false,
child: Column( child: Padding(
mainAxisSize: MainAxisSize.min, padding: EdgeInsets.symmetric(horizontal: 12.w),
children: [ child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container( Container(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row( child: Row(
@ -487,7 +489,8 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
], ],
), ),
), ),
], ],
),
), ),
); );
} }

15
lib/modules/meeting/views/bottomSheet/speaker_bottom_sheet.dart

@ -60,11 +60,13 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return SafeArea(
padding: EdgeInsets.symmetric(horizontal: 12.w), top: false,
child: Column( child: Padding(
mainAxisSize: MainAxisSize.min, padding: EdgeInsets.symmetric(horizontal: 12.w),
children: [ child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container( Container(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row( child: Row(
@ -228,7 +230,8 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
), ),
), ),
), ),
], ],
),
), ),
); );
} }

7
lib/modules/meeting/views/tabs/mind_map_tab.dart

@ -21,8 +21,11 @@ class _MindMapTabState extends State<MindMapTab>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
super.build(context); super.build(context);
return WebViewWidget( return SafeArea(
controller: _controller.webViewController, top: false,
child: WebViewWidget(
controller: _controller.webViewController,
),
); );
} }
} }

2
lib/modules/meeting/views/tabs/overview_tab.dart

@ -93,7 +93,7 @@ class _OverviewTabState extends State<OverviewTab> {
: _empty(), : _empty(),
Obx( Obx(
() => Positioned( () => Positioned(
bottom: 20.w, bottom: MediaQuery.of(context).padding.bottom + 20.w,
left: 0, left: 0,
right: 0, right: 0,
child: Row( child: Row(

12
lib/modules/meeting/views/tabs/speech_tab.dart

@ -276,7 +276,7 @@ class SpeechTab extends GetView<MeetingDetailsController> {
), ),
Obx( Obx(
() => Positioned( () => Positioned(
bottom: 20.w, bottom: MediaQuery.of(context).padding.bottom + 20.w,
left: 0, left: 0,
right: 0, right: 0,
child: Row( child: Row(
@ -344,8 +344,9 @@ class SpeechTab extends GetView<MeetingDetailsController> {
Get.bottomSheet( Get.bottomSheet(
const GenerateBottomSheet(), const GenerateBottomSheet(),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: backgroundColor: isDarkMode
isDarkMode ? Colors.grey[800] : Colors.grey[100], ? Colors.grey[800]
: Colors.grey[100],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),
@ -365,8 +366,9 @@ class SpeechTab extends GetView<MeetingDetailsController> {
Get.bottomSheet( Get.bottomSheet(
const GenerateBottomSheet(), const GenerateBottomSheet(),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: backgroundColor: isDarkMode
isDarkMode ? Colors.grey[800] : Colors.grey[100], ? Colors.grey[800]
: Colors.grey[100],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),

19
lib/modules/meeting/views/tabs/summary_tab.dart

@ -360,7 +360,7 @@ class _SummaryTabState extends State<SummaryTab> {
if (!_hasFocus) if (!_hasFocus)
Obx( Obx(
() => Positioned( () => Positioned(
bottom: 20.w, bottom: MediaQuery.of(context).padding.bottom + 20.w,
left: 0, left: 0,
right: 0, right: 0,
child: Row( child: Row(
@ -481,13 +481,16 @@ class _SummaryTabState extends State<SummaryTab> {
bottom: 0, bottom: 0,
left: -12.w, left: -12.w,
right: -12.w, right: -12.w,
child: Container( child: SafeArea(
height: 40, top: false,
color: isDarkMode ? Colors.grey[800] : Colors.white, child: Container(
alignment: Alignment.center, height: 40,
child: FleatherToolbar.basic( color: isDarkMode ? Colors.grey[800] : Colors.white,
controller: _fleatherController!, alignment: Alignment.center,
editorKey: _editorKey, child: FleatherToolbar.basic(
controller: _fleatherController!,
editorKey: _editorKey,
),
), ),
), ),
), ),

37
lib/modules/payment/views/payment_view.dart

@ -32,23 +32,26 @@ class PaymentView extends GetView<PaymentController> {
onPressed: () => Get.back(), onPressed: () => Get.back(),
), ),
), ),
body: SingleChildScrollView( body: SafeArea(
padding: EdgeInsets.all(16.w), top: false,
child: Column( child: SingleChildScrollView(
crossAxisAlignment: CrossAxisAlignment.start, padding: EdgeInsets.all(16.w),
children: [ child: Column(
_buildTestInfoCard(isDarkMode), crossAxisAlignment: CrossAxisAlignment.start,
SizedBox(height: 20.h), children: [
_buildPaymentMethodSelector(isDarkMode), _buildTestInfoCard(isDarkMode),
SizedBox(height: 20.h), SizedBox(height: 20.h),
_buildAmountSelector(isDarkMode), _buildPaymentMethodSelector(isDarkMode),
SizedBox(height: 20.h), SizedBox(height: 20.h),
_buildPaymentButton(isDarkMode), _buildAmountSelector(isDarkMode),
SizedBox(height: 20.h), SizedBox(height: 20.h),
_buildStatusCard(isDarkMode), _buildPaymentButton(isDarkMode),
SizedBox(height: 20.h), SizedBox(height: 20.h),
_buildInstructions(isDarkMode), _buildStatusCard(isDarkMode),
], SizedBox(height: 20.h),
_buildInstructions(isDarkMode),
],
),
), ),
), ),
); );

27
lib/modules/permissions/views/permissions_view.dart

@ -38,19 +38,22 @@ class PermissionsView extends GetView<PermissionsController> {
), ),
centerTitle: true, centerTitle: true,
), ),
body: Obx(() { body: SafeArea(
if (controller.permissionStatuses.isEmpty) { top: false,
return const Center(child: CircularProgressIndicator()); child: Obx(() {
} if (controller.permissionStatuses.isEmpty) {
return const Center(child: CircularProgressIndicator());
}
return RefreshIndicator( return RefreshIndicator(
onRefresh: controller.checkAllPermissions, onRefresh: controller.checkAllPermissions,
child: SingleChildScrollView( child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h), padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h),
child: _buildPermissionGroups(isDarkMode), child: _buildPermissionGroups(isDarkMode),
), ),
); );
}), }),
),
); );
} }

Loading…
Cancel
Save