diff --git a/.DS_Store b/.DS_Store
index 42089a8..66ce76a 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/README.md b/README.md
index c08e515..b53286e 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
# Flutter UI apps
-A collection of beautiful apps created using flutter , inpired by dribble or youtube UI projects . I will update this repository every single day / every 2 days , so star this repo in order to get updates !
+A collection of beautiful apps created using flutter , inpired by dribble or youtube UI projects .
> Please note that I am not commiting android and xcode builds . I have made no changes in those folders
@@ -16,9 +16,11 @@ All of the apps are listed as below
| Dribble UI | [git](https://bit.ly/2P2eFeF) | [dribble](https://bit.ly/2Lwnuvl) | |
| Magazine UI | [git](https://bit.ly/35eDutB) | [dribble](https://bit.ly/35eabaH) | |
| IOS Unlock | [git](https://bit.ly/39rPQQt) | Custom | |
+| Bloom app | [git](https://bit.ly/2UVtnqQ) | [Youtube](https://bit.ly/2y01V2i) | |
| Movie Rating App | [git](https://github.com/imSanjaySoni/Movie-Rating-app-with-flutter-Bloc-patten) | Custom | |
| BMI Calculator App| [git](https://github.com/imSanjaySoni/BMI-Calculator-with-flutter) | Custom | |
+
You can however download and use this projects . But in order to show support please consider starring this project .
Also check out Sani's profile on [github](https://github.com/imSanjaySoni)
diff --git a/bloom/.gitignore b/bloom/.gitignore
new file mode 100644
index 0000000..ae1f183
--- /dev/null
+++ b/bloom/.gitignore
@@ -0,0 +1,37 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Web related
+lib/generated_plugin_registrant.dart
+
+# Exceptions to above rules.
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
diff --git a/bloom/.metadata b/bloom/.metadata
new file mode 100644
index 0000000..01d2dcb
--- /dev/null
+++ b/bloom/.metadata
@@ -0,0 +1,10 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: 0b8abb4724aa590dd0f429683339b1e045a1594d
+ channel: stable
+
+project_type: app
diff --git a/bloom/README.md b/bloom/README.md
new file mode 100644
index 0000000..c6033b2
--- /dev/null
+++ b/bloom/README.md
@@ -0,0 +1,5 @@
+# bloom
+
+A beautiful app with parallax animation
+
+Design by [Punit Chawla on youtube](https://bit.ly/2y01V2i)
diff --git a/bloom/fonts/WorkSans-ExtraBold.ttf b/bloom/fonts/WorkSans-ExtraBold.ttf
new file mode 100755
index 0000000..486dbf7
Binary files /dev/null and b/bloom/fonts/WorkSans-ExtraBold.ttf differ
diff --git a/bloom/fonts/WorkSans-Light.ttf b/bloom/fonts/WorkSans-Light.ttf
new file mode 100755
index 0000000..319e440
Binary files /dev/null and b/bloom/fonts/WorkSans-Light.ttf differ
diff --git a/bloom/fonts/WorkSans-Medium.ttf b/bloom/fonts/WorkSans-Medium.ttf
new file mode 100755
index 0000000..7eccd15
Binary files /dev/null and b/bloom/fonts/WorkSans-Medium.ttf differ
diff --git a/bloom/fonts/WorkSans-Regular.ttf b/bloom/fonts/WorkSans-Regular.ttf
new file mode 100755
index 0000000..15047f2
Binary files /dev/null and b/bloom/fonts/WorkSans-Regular.ttf differ
diff --git a/bloom/images/arrow.png b/bloom/images/arrow.png
new file mode 100644
index 0000000..018cfa5
Binary files /dev/null and b/bloom/images/arrow.png differ
diff --git a/bloom/images/background.png b/bloom/images/background.png
new file mode 100644
index 0000000..ae6e93f
Binary files /dev/null and b/bloom/images/background.png differ
diff --git a/bloom/images/bloom.gif b/bloom/images/bloom.gif
new file mode 100644
index 0000000..7ea781d
Binary files /dev/null and b/bloom/images/bloom.gif differ
diff --git a/bloom/images/menu.png b/bloom/images/menu.png
new file mode 100644
index 0000000..50863db
Binary files /dev/null and b/bloom/images/menu.png differ
diff --git a/bloom/images/xd.png b/bloom/images/xd.png
new file mode 100644
index 0000000..d989e7b
Binary files /dev/null and b/bloom/images/xd.png differ
diff --git a/bloom/lib/main.dart b/bloom/lib/main.dart
new file mode 100644
index 0000000..533bc06
--- /dev/null
+++ b/bloom/lib/main.dart
@@ -0,0 +1,201 @@
+import 'dart:math' as math;
+
+import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+import 'package:flutter_gifimage/flutter_gifimage.dart';
+
+void main() => runApp(MyApp());
+
+class MyApp extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ title: 'Bloom',
+ theme: ThemeData(
+ primarySwatch: Colors.blue,
+ ),
+ home: Home(),
+ debugShowCheckedModeBanner: false,
+ );
+ }
+}
+
+class Home extends StatefulWidget {
+ Home({Key key}) : super(key: key);
+
+ @override
+ _HomeState createState() => _HomeState();
+}
+
+enum Direction { up, down }
+
+class _HomeState extends State with SingleTickerProviderStateMixin {
+ ScrollController _scrollController;
+ Direction _direction;
+ GifController _gifController;
+ double _frame = 0.0;
+
+ @override
+ void initState() {
+ super.initState();
+
+ _gifController = GifController(vsync: this);
+ _gifController.value = _frame;
+
+ _scrollController = ScrollController();
+ _direction = Direction.down;
+
+ _scrollController.addListener(_handleScrollEvent);
+ }
+
+ void _handleScrollEvent() {
+ if (_direction == Direction.down) {
+ setState(() {
+ _frame -= 0.5;
+ _gifController.value = math.min(math.max(_frame, 0.0), 59.0);
+ });
+ } else if (_direction == Direction.up) {
+ setState(() {
+ _frame += 0.5;
+ _gifController.value = math.min(math.max(_frame, 0.0), 59.0);
+ });
+ }
+ }
+
+ @override
+ void dispose() {
+ _scrollController.removeListener(_handleScrollEvent);
+ _scrollController.dispose();
+ super.dispose();
+ }
+
+ bool _handleNotification(Notification notification) {
+ if (notification is ScrollNotification) {
+ if (notification is UserScrollNotification &&
+ notification.direction == ScrollDirection.forward) {
+ setState(() {
+ _direction = Direction.down;
+ });
+ } else if (notification is UserScrollNotification &&
+ notification.direction == ScrollDirection.reverse) {
+ setState(() {
+ _direction = Direction.up;
+ });
+ }
+ }
+
+ return true;
+ }
+
+ Widget _upperSection() {
+ final TextStyle textStyle =
+ TextStyle(fontFamily: 'worksans', color: Colors.white);
+
+ return Container(
+ width: MediaQuery.of(context).size.width,
+ height: MediaQuery.of(context).size.height,
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: AssetImage('images/background.png'), fit: BoxFit.cover)),
+ child: Scaffold(
+ backgroundColor: Colors.transparent,
+ appBar: AppBar(
+ elevation: 0.0,
+ backgroundColor: Colors.transparent,
+ leading: Image.asset('images/xd.png'),
+ actions: [Image.asset('images/menu.png')],
+ ),
+ body: Column(
+ children: [
+ SizedBox(
+ height: 60.0,
+ ),
+ Text(
+ "Let your ideas",
+ style: textStyle.copyWith(
+ fontSize: 23,
+ fontWeight: FontWeight.w600,
+ ),
+ ),
+ Text(
+ "Bloom",
+ style: textStyle.copyWith(
+ fontSize: 100, fontWeight: FontWeight.w700),
+ ),
+ SizedBox(
+ height: 30.0,
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 30.0),
+ child: Text(
+ "Share your amazing Adobe Xd Projects for the world to see",
+ style: textStyle.copyWith(
+ fontSize: 18,
+ fontWeight: FontWeight.w400,
+ ),
+ textAlign: TextAlign.center,
+ ),
+ ),
+ SizedBox(
+ height: 37,
+ ),
+ Image.asset('images/arrow.png'),
+ Spacer(),
+ FittedBox(
+ child: GifImage(
+ controller: _gifController,
+ image: AssetImage('images/bloom.gif'),
+ height: 300.0,
+ width: 400.0,
+ ),
+ )
+ ],
+ ),
+ ),
+ );
+ }
+
+ Widget _lowerPart() {
+ return Material(
+ child: Container(
+ width: MediaQuery.of(context).size.width,
+ height: MediaQuery.of(context).size.height / 2,
+ color: Colors.pink.shade50,
+ child: Align(
+ alignment: Alignment.bottomCenter,
+ child: Container(
+ margin: EdgeInsets.only(bottom: 20.0),
+ child: FloatingActionButton(
+ backgroundColor: Colors.pink.shade100,
+ splashColor: Colors.green,
+ child: Icon(
+ Icons.refresh,
+ color: Colors.black,
+ ),
+ onPressed: () {
+ _scrollController.animateTo(0.0,
+ duration: Duration(milliseconds: 800),
+ curve: Curves.fastLinearToSlowEaseIn);
+ _gifController.animateTo(0.0, duration: Duration(seconds: 1));
+ setState(() {
+ _frame = 0.0;
+ });
+ },
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return NotificationListener(
+ onNotification: _handleNotification,
+ child: ListView(
+ controller: _scrollController,
+ children: [_upperSection(), _lowerPart()],
+ ),
+ );
+ }
+}
diff --git a/bloom/pubspec.yaml b/bloom/pubspec.yaml
new file mode 100644
index 0000000..40c7d80
--- /dev/null
+++ b/bloom/pubspec.yaml
@@ -0,0 +1,71 @@
+name: bloom
+description: A new Flutter project.
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# In Android, build-name is used as versionName while build-number used as versionCode.
+# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
+# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
+# Read more about iOS versioning at
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
+version: 1.0.0+1
+
+environment:
+ sdk: ">=2.1.0 <3.0.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+ # The following adds the Cupertino Icons font to your application.
+ # Use with the CupertinoIcons class for iOS style icons.
+ cupertino_icons: ^0.1.2
+ flutter_gifimage: ^1.0.0
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter.
+flutter:
+
+ # The following line ensures that the Material Icons font is
+ # included with your application, so that you can use the icons in
+ # the material Icons class.
+ uses-material-design: true
+
+ # To add assets to your application, add an assets section, like this:
+ assets:
+ - images/
+
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/assets-and-images/#resolution-aware.
+
+ # For details regarding adding assets from package dependencies, see
+ # https://flutter.dev/assets-and-images/#from-packages
+
+ # To add custom fonts to your application, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ fonts:
+ - family: worksans
+ fonts:
+ - asset: fonts/WorkSans-Regular.ttf
+ - asset: fonts/WorkSans-Medium.ttf
+ weight: 600
+ - asset: fonts/WorkSans-Light.ttf
+ weight: 400
+ - asset: fonts/WorkSans-ExtraBold.ttf
+ weight: 700
+ #
+ # For details regarding fonts from package dependencies,
+ # see https://flutter.dev/custom-fonts/#from-packages
diff --git a/bloom/test/widget_test.dart b/bloom/test/widget_test.dart
new file mode 100644
index 0000000..965345a
--- /dev/null
+++ b/bloom/test/widget_test.dart
@@ -0,0 +1,30 @@
+// This is a basic Flutter widget test.
+//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility that Flutter provides. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:bloom/main.dart';
+
+void main() {
+ testWidgets('Counter increments smoke test', (WidgetTester tester) async {
+ // Build our app and trigger a frame.
+ await tester.pumpWidget(MyApp());
+
+ // Verify that our counter starts at 0.
+ expect(find.text('0'), findsOneWidget);
+ expect(find.text('1'), findsNothing);
+
+ // Tap the '+' icon and trigger a frame.
+ await tester.tap(find.byIcon(Icons.add));
+ await tester.pump();
+
+ // Verify that our counter has incremented.
+ expect(find.text('0'), findsNothing);
+ expect(find.text('1'), findsOneWidget);
+ });
+}
diff --git a/media/bloom.gif b/media/bloom.gif
new file mode 100644
index 0000000..741643f
Binary files /dev/null and b/media/bloom.gif differ