diff --git a/lib/main.dart b/lib/main.dart index 6f637ec..56cd7e9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'package:ppp/slide_scaffold.dart'; import 'package:ppp/slides/about_me.dart'; import 'package:ppp/slides/fractals.dart'; import 'package:ppp/slides/thumbnail.dart'; +import 'package:ppp/slides/widgets.dart'; import 'package:ppp/utils/colors.dart'; void main() => runApp(const MyApp()); @@ -16,11 +17,15 @@ class MyApp extends StatelessWidget { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Material App', - theme: FlexThemeData.dark(colorScheme: ColorScheme.fromSeed(seedColor: C.viren)), + theme: FlexThemeData.dark( + colorScheme: ColorScheme.fromSeed(seedColor: C.viren), + applyElevationOverlayColor: true, + ), home: SlideScaffold( slides: [ const Thumbnail(), for (int i in [0, 1, 2]) Fractals(state: i), + const Widgets(), const AboutMe(), ], ), diff --git a/lib/slide_scaffold.dart b/lib/slide_scaffold.dart index 3eebfe9..58b88ad 100644 --- a/lib/slide_scaffold.dart +++ b/lib/slide_scaffold.dart @@ -53,7 +53,7 @@ class _SlideScaffoldState extends State { initialRoute: _currentSlide.toString(), onGenerateRoute: (settings) => PageRouteBuilder( pageBuilder: (context, animation1, animation2) => DefaultTextStyle( - style: GoogleFonts.openSans(fontWeight: FontWeight.w600), + style: GoogleFonts.rubik(fontWeight: FontWeight.w600), child: F.getSlideFromName(settings.name, widget.slides), ), transitionsBuilder: (context, animation, secondaryAnimation, child) { diff --git a/lib/slides/about_me.dart b/lib/slides/about_me.dart index 0fdb127..9bd6c2b 100644 --- a/lib/slides/about_me.dart +++ b/lib/slides/about_me.dart @@ -17,7 +17,7 @@ class AboutMe extends StatelessWidget { children: [ Row( children: const [ - Text('Viren Khatri', style: TextStyle(fontSize: 50, inherit: true)), + Text('Viren Khatri', style: TextStyle(fontSize: 50)), SizedBox(width: 10), NullSafety(), Spacer(), @@ -28,7 +28,7 @@ class AboutMe extends StatelessWidget { ], ), const SizedBox(height: 20), - const Text(S.oneLineAboutMe, style: TextStyle(fontSize: 20, inherit: true)), + const Text(S.oneLineAboutMe, style: TextStyle(fontSize: 20)), const SizedBox(height: 50), LayoutBuilder(builder: (_, constraints) { final List children = [ @@ -72,7 +72,7 @@ class _YouCanFindMe extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: const [ - Text('You can find me', style: TextStyle(fontSize: 30, inherit: true)), + Text('You can find me', style: TextStyle(fontSize: 30)), SizedBox(height: 15), LinkText(text: 'on YouTube', url: S.youtubeUrl), Text('livestreaming my flutter contributions ⏯.'), diff --git a/lib/slides/widgets.dart b/lib/slides/widgets.dart new file mode 100644 index 0000000..8c05fe3 --- /dev/null +++ b/lib/slides/widgets.dart @@ -0,0 +1,46 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:ppp/widgets/fancy_container.dart'; +import 'package:ppp/widgets/fancy_elevated_button.dart'; +import 'package:ppp/widgets/fancy_image.dart'; + +class Widgets extends StatelessWidget { + const Widgets({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return LayoutBuilder(builder: (context, constraints) { + double minDim = min(constraints.maxHeight, constraints.maxWidth); + + return Stack( + children: [ + Positioned( + top: minDim / 15, + left: minDim / 15, + child: FancyContainer(size: minDim), + ), + Positioned( + top: minDim / 5, + right: minDim / 5, + child: FancyElevatedButton(size: minDim), + ), + Positioned( + bottom: minDim / 10, + left: constraints.maxWidth / 8, + child: FancyImage( + height: constraints.maxHeight, + width: constraints.maxWidth, + ), + ), + Center( + child: Text( + 'Widgets', + style: TextStyle(fontSize: constraints.maxWidth / 7), + ), + ), + ], + ); + }); + } +} diff --git a/lib/widgets/fancy_container.dart b/lib/widgets/fancy_container.dart new file mode 100644 index 0000000..ca1af2f --- /dev/null +++ b/lib/widgets/fancy_container.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; + +class FancyContainer extends StatelessWidget { + const FancyContainer({Key? key, required this.size}) : super(key: key); + + final double size; + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + border: Border.all( + color: Theme.of(context).colorScheme.inverseSurface, + width: size / 75, + strokeAlign: StrokeAlign.center, + ), + gradient: LinearGradient( + colors: [ + Theme.of(context).colorScheme.primary, + Theme.of(context).colorScheme.inversePrimary, + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + offset: Offset(size / 30, size / 30), + color: Theme.of(context).colorScheme.secondary, + blurRadius: 10, + blurStyle: BlurStyle.outer, + ), + ], + ), + child: SizedBox.square( + dimension: size / 3.5, + child: Center( + child: Text( + 'Container', + style: TextStyle( + color: Theme.of(context).colorScheme.onPrimaryContainer, + fontSize: size / 25, + ), + ), + ), + ), + ); + } +} diff --git a/lib/widgets/fancy_elevated_button.dart b/lib/widgets/fancy_elevated_button.dart new file mode 100644 index 0000000..b0603ca --- /dev/null +++ b/lib/widgets/fancy_elevated_button.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; + +class FancyElevatedButton extends StatelessWidget { + const FancyElevatedButton({super.key, required this.size}); + + final double size; + + @override + Widget build(BuildContext context) { + return ElevatedButton( + onPressed: () {}, + style: ElevatedButton.styleFrom( + visualDensity: VisualDensity.standard, + shape: BeveledRectangleBorder( + side: BorderSide( + color: Theme.of(context).colorScheme.inverseSurface, + width: size / 200, + strokeAlign: StrokeAlign.center, + ), + borderRadius: BorderRadius.circular(size / 30), + ), + shadowColor: Theme.of(context).colorScheme.primaryContainer, + elevation: 20, + ), + child: Padding( + padding: EdgeInsets.all(size / 50), + child: Text( + 'ElevatedButton', + style: TextStyle(fontSize: size / 20), + ), + ), + ); + } +} diff --git a/lib/widgets/fancy_image.dart b/lib/widgets/fancy_image.dart new file mode 100644 index 0000000..41f4fa9 --- /dev/null +++ b/lib/widgets/fancy_image.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +class FancyImage extends StatelessWidget { + const FancyImage({super.key, required this.width, required this.height}); + + final double width, height; + + @override + Widget build(BuildContext context) { + return Image.network( + 'https://picsum.photos/${width * 3 ~/ 4}/${height * 2.3 ~/ 10}', + color: Theme.of(context).colorScheme.primary, + colorBlendMode: BlendMode.overlay, + filterQuality: FilterQuality.high, + ); + } +} diff --git a/lib/widgets/link_text.dart b/lib/widgets/link_text.dart index a28939d..e96e6d3 100644 --- a/lib/widgets/link_text.dart +++ b/lib/widgets/link_text.dart @@ -31,10 +31,7 @@ class _LinkTextState extends State { child: GestureDetector( child: Text( widget.text, - style: TextStyle( - color: isHovering ? C.flutterBlue : Colors.lightBlue, - inherit: true, - ), + style: TextStyle(color: isHovering ? C.flutterBlue : Colors.lightBlue), ), ), );