12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import 'dart:math' as math;
- import 'package:flutter/material.dart';
- class MindMapFloatingActionButtonLocation extends FloatingActionButtonLocation {
- const MindMapFloatingActionButtonLocation();
- @override
- Offset getOffset(ScaffoldPrelayoutGeometry scaffoldGeometry) {
- // Compute the x-axis offset.
- final double fabX = _endOffset(scaffoldGeometry);
- // Compute the y-axis offset.
- final double contentBottom = scaffoldGeometry.contentBottom;
- final double bottomSheetHeight = scaffoldGeometry.bottomSheetSize.height;
- final double fabHeight = scaffoldGeometry.floatingActionButtonSize.height;
- final double snackBarHeight = scaffoldGeometry.snackBarSize.height;
- double fabY = contentBottom - fabHeight - kFloatingActionButtonMargin;
- if (snackBarHeight > 0.0) {
- fabY = math.min(
- fabY,
- contentBottom -
- snackBarHeight -
- fabHeight -
- kFloatingActionButtonMargin);
- }
- if (bottomSheetHeight > 0.0) {
- fabY =
- math.min(fabY, contentBottom - bottomSheetHeight - fabHeight / 2.0);
- }
- return Offset(fabX, fabY - 32);
- }
- double _endOffset(ScaffoldPrelayoutGeometry scaffoldGeometry,
- {double offset = 0.0}) {
- switch (scaffoldGeometry.textDirection) {
- case TextDirection.rtl:
- return _leftOffset(scaffoldGeometry, offset: offset);
- case TextDirection.ltr:
- return _rightOffset(scaffoldGeometry, offset: offset);
- }
- }
- double _leftOffset(ScaffoldPrelayoutGeometry scaffoldGeometry,
- {double offset = 0.0}) {
- return kFloatingActionButtonMargin +
- scaffoldGeometry.minInsets.left -
- offset;
- }
- double _rightOffset(ScaffoldPrelayoutGeometry scaffoldGeometry,
- {double offset = 0.0}) {
- return scaffoldGeometry.scaffoldSize.width -
- kFloatingActionButtonMargin -
- scaffoldGeometry.minInsets.right -
- scaffoldGeometry.floatingActionButtonSize.width +
- offset;
- }
- }
|