Update NavigationRailM3E implementation; update FAB and navigation sections to adapt to changes.

This commit is contained in:
Emily Pauli 2025-10-23 12:31:46 +02:00
commit 83f5a02943
49 changed files with 1651 additions and 661 deletions

View file

@ -1,7 +1,7 @@
library fab_m3e;
export 'src/enums.dart';
export 'src/fab_theme_m3e.dart' show FabTokensAdapter;
export 'src/fab_m3e.dart';
export 'src/extended_fab_m3e.dart';
export 'src/fab_m3e.dart';
export 'src/fab_menu_m3e.dart';
export 'src/fab_theme_m3e.dart' show FabTokensAdapter;

View file

@ -39,7 +39,7 @@ class ExtendedFabM3E extends StatelessWidget {
final m = tokens.metrics(density);
final bg = tokens.bg(kind);
final fg = tokens.fg(kind);
final shape = tokens.shape(shapeFamily, size, extended: true);
final shape = tokens.shape(shapeFamily, size);
final minH = m.extendedHeight;
final child = DefaultTextStyle.merge(

View file

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:m3e_design/m3e_design.dart';
import 'enums.dart';
@immutable
@ -28,7 +29,8 @@ class _FabMetrics {
_FabMetrics _metricsFor(BuildContext context, FabM3EDensity density) {
final theme = Theme.of(context);
final m3e = theme.extension<M3ETheme>() ?? M3ETheme.defaults(theme.colorScheme);
final m3e =
theme.extension<M3ETheme>() ?? M3ETheme.defaults(theme.colorScheme);
final sp = m3e.spacing;
double small = 40;
@ -38,7 +40,10 @@ _FabMetrics _metricsFor(BuildContext context, FabM3EDensity density) {
double icon = 24;
if (density == FabM3EDensity.compact) {
small -= 4; regular -= 4; large -= 4; extH -= 4;
small -= 4;
regular -= 4;
large -= 4;
extH -= 4;
}
return _FabMetrics(
@ -93,11 +98,16 @@ class FabTokensAdapter {
}
// Shapes
ShapeBorder shape(FabM3EShapeFamily family, FabM3ESize size, {bool extended = false}) {
final set = family == FabM3EShapeFamily.round ? _m3e.shapes.round : _m3e.shapes.square;
if (extended) return StadiumBorder(side: BorderSide.none);
ShapeBorder shape(FabM3EShapeFamily family, FabM3ESize size) {
final set = family == FabM3EShapeFamily.round
? _m3e.shapes.round
: _m3e.shapes.square;
// circular-ish fab: use large radius to approach circle; actual size enforced by constraints
final radius = switch (size) { FabM3ESize.small => set.lg, FabM3ESize.regular => set.xl, FabM3ESize.large => set.xl };
final radius = switch (size) {
FabM3ESize.small => set.lg,
FabM3ESize.regular => set.xl,
FabM3ESize.large => set.xl
};
return RoundedRectangleBorder(borderRadius: radius);
}