You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			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.sizeOf(context).height - 32, 600),
 | 
						|
      maxWidth: FluffyThemes.columnWidth * 1.25,
 | 
						|
    ),
 | 
						|
    backgroundColor: Colors.transparent,
 | 
						|
    clipBehavior: Clip.hardEdge,
 | 
						|
  );
 | 
						|
}
 |