jld3103
1 year ago
9 changed files with 114 additions and 6 deletions
@ -0,0 +1,56 @@
|
||||
import 'package:flutter/material.dart'; |
||||
import 'package:meta/meta.dart'; |
||||
import 'package:neon/src/utils/hex_color.dart'; |
||||
import 'package:neon/src/widgets/image.dart'; |
||||
import 'package:nextcloud/core.dart' as core; |
||||
|
||||
@internal |
||||
class NeonCustomBackground extends StatelessWidget { |
||||
const NeonCustomBackground({ |
||||
required this.theme, |
||||
required this.child, |
||||
super.key, |
||||
}); |
||||
|
||||
final core.ThemingPublicCapabilities_Theming? theme; |
||||
final Widget? child; |
||||
|
||||
double _opacity(final BuildContext context) => Theme.of(context).brightness == Brightness.light ? 0.2 : 0.1; |
||||
|
||||
@override |
||||
Widget build(final BuildContext context) { |
||||
if (theme == null) { |
||||
return ColoredBox( |
||||
color: Theme.of(context).colorScheme.background, |
||||
child: child, |
||||
); |
||||
} |
||||
|
||||
if (theme?.backgroundPlain ?? true) { |
||||
return ColoredBox( |
||||
color: |
||||
Color.lerp(HexColor(theme!.background), Theme.of(context).colorScheme.background, 1 - _opacity(context))!, |
||||
child: child, |
||||
); |
||||
} |
||||
|
||||
final image = NeonUrlImage( |
||||
url: theme!.background, |
||||
fit: BoxFit.fill, |
||||
); |
||||
return ColoredBox( |
||||
color: Theme.of(context).colorScheme.background, |
||||
child: Stack( |
||||
children: [ |
||||
Positioned.fill( |
||||
child: Opacity( |
||||
opacity: _opacity(context), |
||||
child: image, |
||||
), |
||||
), |
||||
if (child != null) child!, |
||||
], |
||||
), |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue