64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'dart:math';
 | |
| 
 | |
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:fluffychat/config/app_config.dart';
 | |
| import 'package:fluffychat/config/themes.dart';
 | |
| 
 | |
| Future<T?> showAdaptiveBottomSheet<T>({
 | |
|   required BuildContext context,
 | |
|   required Widget Function(BuildContext) builder,
 | |
|   bool isDismissible = true,
 | |
|   bool isScrollControlled = true,
 | |
|   bool useRootNavigator = true,
 | |
| }) {
 | |
|   if (FluffyThemes.isColumnMode(context)) {
 | |
|     return showDialog<T>(
 | |
|       context: context,
 | |
|       useRootNavigator: useRootNavigator,
 | |
|       barrierDismissible: isDismissible,
 | |
|       useSafeArea: true,
 | |
|       builder: (context) => Center(
 | |
|         child: Container(
 | |
|           margin: const EdgeInsets.all(16),
 | |
|           constraints: const BoxConstraints(
 | |
|             maxWidth: 480,
 | |
|             maxHeight: 720,
 | |
|           ),
 | |
|           child: Material(
 | |
|             elevation: Theme.of(context).dialogTheme.elevation ?? 4,
 | |
|             shadowColor: Theme.of(context).dialogTheme.shadowColor,
 | |
|             borderRadius: BorderRadius.circular(AppConfig.borderRadius),
 | |
|             color: Theme.of(context).scaffoldBackgroundColor,
 | |
|             clipBehavior: Clip.hardEdge,
 | |
|             child: builder(context),
 | |
|           ),
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   return showModalBottomSheet<T>(
 | |
|     context: context,
 | |
|     builder: (context) => Padding(
 | |
|       padding: EdgeInsets.zero,
 | |
|       child: ClipRRect(
 | |
|         borderRadius: const BorderRadius.only(
 | |
|           topLeft: Radius.circular(AppConfig.borderRadius / 2),
 | |
|           topRight: Radius.circular(AppConfig.borderRadius / 2),
 | |
|         ),
 | |
|         child: builder(context),
 | |
|       ),
 | |
|     ),
 | |
|     useRootNavigator: useRootNavigator,
 | |
|     isDismissible: isDismissible,
 | |
|     isScrollControlled: isScrollControlled,
 | |
|     constraints: BoxConstraints(
 | |
|       maxHeight: min(MediaQuery.of(context).size.height - 32, 600),
 | |
|       maxWidth: FluffyThemes.columnWidth * 1.25,
 | |
|     ),
 | |
|     backgroundColor: Colors.transparent,
 | |
|     clipBehavior: Clip.hardEdge,
 | |
|   );
 | |
| }
 |