Browse Source

Merge pull request #216 from ente-io/new-user-redesign

New user redesign
Neeraj Gupta 3 years ago
parent
commit
9a4db83c3f

File diff suppressed because it is too large
+ 0 - 0
assets/loadingGalleryLottie.json


+ 2 - 3
lib/ente_theme_data.dart

@@ -14,11 +14,10 @@ extension CustomColorScheme on ColorScheme {
       ? Color.fromRGBO(240, 240, 240, 1)
       ? Color.fromRGBO(240, 240, 240, 1)
       : Color.fromRGBO(8, 18, 18, 0.4);
       : Color.fromRGBO(8, 18, 18, 0.4);
 
 
-  Color get fabBackgroundColor =>
+  Color get dynamicFABBackgroundColor =>
       brightness == Brightness.light ? Colors.black : Colors.grey[850];
       brightness == Brightness.light ? Colors.black : Colors.grey[850];
 
 
-  Color get fabTextOrIconColor =>
-      brightness == Brightness.light ? Colors.white : Colors.white;
+  Color get dynamicFABTextColor => Colors.white; //same for both themes
 
 
   // todo: use brightness == Brightness.light for changing color for dark/light theme
   // todo: use brightness == Brightness.light for changing color for dark/light theme
   ButtonStyle get optionalActionButtonStyle => buildElevatedButtonThemeData(
   ButtonStyle get optionalActionButtonStyle => buildElevatedButtonThemeData(

+ 23 - 15
lib/ui/backup_folder_selection_page.dart

@@ -104,10 +104,10 @@ class _BackupFolderSelectionPageState extends State<BackupFolderSelectionPage> {
                             ? "Unselect all"
                             ? "Unselect all"
                             : "Select all",
                             : "Select all",
                         textAlign: TextAlign.right,
                         textAlign: TextAlign.right,
-                        style: Theme.of(context)
-                            .textTheme
-                            .overline
-                            .copyWith(decoration: TextDecoration.underline),
+                        style: Theme.of(context).textTheme.overline.copyWith(
+                            decoration: TextDecoration.underline,
+                            fontSize: 16,
+                            letterSpacing: 1),
                       ),
                       ),
                     ),
                     ),
                   ),
                   ),
@@ -133,7 +133,7 @@ class _BackupFolderSelectionPageState extends State<BackupFolderSelectionPage> {
             child: Container(
             child: Container(
               width: double.infinity,
               width: double.infinity,
               padding: EdgeInsets.only(
               padding: EdgeInsets.only(
-                  left: 24, right: 24, bottom: Platform.isIOS ? 60 : 32),
+                  left: 20, right: 20, bottom: Platform.isIOS ? 60 : 32),
               child: OutlinedButton(
               child: OutlinedButton(
                 child: Text(widget.buttonText),
                 child: Text(widget.buttonText),
                 onPressed: _selectedFolders.isEmpty
                 onPressed: _selectedFolders.isEmpty
@@ -213,16 +213,24 @@ class _BackupFolderSelectionPageState extends State<BackupFolderSelectionPage> {
       padding: const EdgeInsets.only(bottom: 1, right: 1),
       padding: const EdgeInsets.only(bottom: 1, right: 1),
       child: Container(
       child: Container(
         decoration: BoxDecoration(
         decoration: BoxDecoration(
-          border: Border.all(
-            color: Theme.of(context).colorScheme.boxUnSelectColor,
-          ),
-          borderRadius: BorderRadius.all(
-            Radius.circular(12),
-          ),
-          color: isSelected
-              ? Theme.of(context).colorScheme.boxSelectColor
-              : Theme.of(context).colorScheme.boxUnSelectColor,
-        ),
+            border: Border.all(
+              color: Theme.of(context).colorScheme.boxUnSelectColor,
+            ),
+            borderRadius: BorderRadius.all(
+              Radius.circular(12),
+            ),
+            // color: isSelected
+            //     ? Theme.of(context).colorScheme.boxSelectColor
+            //     : Theme.of(context).colorScheme.boxUnSelectColor,
+            gradient: isSelected
+                ? LinearGradient(colors: const [
+                    Color(0xFF00DD4D),
+                    Color(0xFF43BA6C)
+                  ]) //same for both themes
+                : LinearGradient(colors: [
+                    Theme.of(context).colorScheme.boxUnSelectColor,
+                    Theme.of(context).colorScheme.boxUnSelectColor
+                  ])),
         padding: EdgeInsets.fromLTRB(8, 4, 4, 4),
         padding: EdgeInsets.fromLTRB(8, 4, 4, 4),
         child: InkWell(
         child: InkWell(
           child: Row(
           child: Row(

+ 2 - 2
lib/ui/common/dynamicFAB.dart

@@ -37,9 +37,9 @@ class DynamicFAB extends StatelessWidget {
             FloatingActionButton(
             FloatingActionButton(
                 //mini: true,
                 //mini: true,
                 backgroundColor:
                 backgroundColor:
-                    Theme.of(context).colorScheme.fabBackgroundColor,
+                    Theme.of(context).colorScheme.dynamicFABBackgroundColor,
                 foregroundColor:
                 foregroundColor:
-                    Theme.of(context).colorScheme.fabTextOrIconColor,
+                    Theme.of(context).colorScheme.dynamicFABTextColor,
                 child: Transform.rotate(
                 child: Transform.rotate(
                   angle: isFormValid ? 0 : math.pi / 2, //var here
                   angle: isFormValid ? 0 : math.pi / 2, //var here
                   child: Icon(
                   child: Icon(

+ 6 - 2
lib/ui/email_entry_page.dart

@@ -335,9 +335,13 @@ class _EmailEntryPageState extends State<EmailEntryPage> {
                                       horizontal: 20),
                                       horizontal: 20),
                                   child: Container(
                                   child: Container(
                                     decoration: BoxDecoration(
                                     decoration: BoxDecoration(
-                                      border: Border.all(
+                                      boxShadow: [
+                                        BoxShadow(
+                                          spreadRadius: 0.5,
                                           color: Theme.of(context).hintColor,
                                           color: Theme.of(context).hintColor,
-                                          width: 0.5),
+                                          offset: Offset(0, -0.325),
+                                        ),
+                                      ],
                                       borderRadius: BorderRadius.only(
                                       borderRadius: BorderRadius.only(
                                         topLeft: Radius.zero,
                                         topLeft: Radius.zero,
                                         topRight: Radius.zero,
                                         topRight: Radius.zero,

+ 71 - 123
lib/ui/grant_permissions_widget.dart

@@ -3,143 +3,91 @@ import 'dart:ui';
 
 
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:photo_manager/photo_manager.dart';
 import 'package:photo_manager/photo_manager.dart';
-import 'package:photos/ente_theme_data.dart';
+// import 'package:photos/ente_theme_data.dart';
 import 'package:photos/services/sync_service.dart';
 import 'package:photos/services/sync_service.dart';
 
 
 class GrantPermissionsWidget extends StatelessWidget {
 class GrantPermissionsWidget extends StatelessWidget {
   @override
   @override
   Widget build(BuildContext context) {
   Widget build(BuildContext context) {
     return Scaffold(
     return Scaffold(
-      body: SingleChildScrollView(
-        child: Column(
-          crossAxisAlignment: CrossAxisAlignment.start,
-          children: [
-            Center(
-              child: Padding(
-                padding: const EdgeInsets.symmetric(vertical: 50),
-                child: Image.asset(
-                  "assets/gallery.png",
-                  height: 250,
-                ),
-              ),
-            ),
-            Padding(
-              padding: const EdgeInsets.symmetric(horizontal: 20),
-              child: Text(
-                'ente needs your permission to access gallery',
-                style:
-                    Theme.of(context).textTheme.headline4.copyWith(height: 1.4),
-              ),
-            ),
-            Padding(
-              padding: const EdgeInsets.symmetric(vertical: 40),
-              child: Divider(
-                thickness: 1.5,
-              ),
-            ),
-            Padding(
-              padding: const EdgeInsets.symmetric(horizontal: 20),
-              child: Text(
-                'Why we need permissions',
-                style: Theme.of(context).textTheme.headline5,
-              ),
-            ),
-            Padding(
-              padding: const EdgeInsets.fromLTRB(0, 20, 0, 5),
-              child: ListTile(
-                leading: ClipRRect(
-                  borderRadius: BorderRadius.circular(10),
-                  child: Container(
-                    height: 40,
-                    width: 40,
-                    color: Colors.greenAccent,
+      body: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        mainAxisAlignment: MainAxisAlignment.spaceBetween,
+        children: [
+          Column(
+            children: [
+              Center(
+                child: Padding(
+                  padding: const EdgeInsets.symmetric(vertical: 50),
+                  child: Image.asset(
+                    "assets/gallery.png",
+                    height: 250,
                   ),
                   ),
                 ),
                 ),
-                title: Text("hey there random stuff"),
-                subtitle: Text(
-                    "Even more random stuff here. blah blabh blahhasdn asidf as"),
               ),
               ),
-            ),
-            Padding(
-              padding: const EdgeInsets.fromLTRB(0, 5, 0, 180),
-              child: ListTile(
-                leading: ClipRRect(
-                  borderRadius: BorderRadius.circular(10),
-                  child: Container(
-                    height: 40,
-                    width: 40,
-                    color: Colors.greenAccent,
-                  ),
+              Padding(
+                padding: const EdgeInsets.symmetric(horizontal: 20),
+                child: Text(
+                  'ente needs your permission to access gallery',
+                  style: Theme.of(context)
+                      .textTheme
+                      .headline4
+                      .copyWith(height: 1.4),
                 ),
                 ),
-                title: Text("hey there random stuff"),
-                subtitle: Text(
-                    "Even more random stuff here. blah blabh blahhasdn asidf as"),
               ),
               ),
-            ),
-          ],
-        ),
-      ),
-      floatingActionButton: Container(
-        decoration: BoxDecoration(boxShadow: [
-          BoxShadow(
-            color: Theme.of(context).backgroundColor,
-            spreadRadius: 200,
-            blurRadius: 100,
-            offset: Offset(0, 150),
-          )
-        ]),
-        width: double.infinity,
-        height: 56,
-        padding: EdgeInsets.symmetric(horizontal: 20),
-        child: FloatingActionButton.extended(
-            backgroundColor: Theme.of(context).colorScheme.fabBackgroundColor,
-            onPressed: () async {
-              final state = await PhotoManager.requestPermissionExtend();
-              if (state == PermissionState.authorized ||
-                  state == PermissionState.limited) {
-                await SyncService.instance.onPermissionGranted(state);
-              } else if (state == PermissionState.denied) {
-                AlertDialog alert = AlertDialog(
-                  title: Text("Please grant permissions"),
-                  content: Text(
-                      "ente can encrypt and preserve files only if you grant access to them"),
-                  actions: [
-                    TextButton(
-                      child: Text(
-                        "OK",
-                        style: Theme.of(context).textTheme.subtitle1.copyWith(
-                            fontSize: 14, fontWeight: FontWeight.w700),
+            ],
+          ),
+          Container(
+            width: double.infinity,
+            padding: EdgeInsets.only(
+                left: 20, right: 20, bottom: Platform.isIOS ? 60 : 32),
+            child: OutlinedButton(
+              child: Text("Grant Permission"),
+              onPressed: () async {
+                final state = await PhotoManager.requestPermissionExtend();
+                if (state == PermissionState.authorized ||
+                    state == PermissionState.limited) {
+                  await SyncService.instance.onPermissionGranted(state);
+                } else if (state == PermissionState.denied) {
+                  AlertDialog alert = AlertDialog(
+                    title: Text("Please grant permissions"),
+                    content: Text(
+                        "ente can encrypt and preserve files only if you grant access to them"),
+                    actions: [
+                      TextButton(
+                        child: Text(
+                          "OK",
+                          style: Theme.of(context).textTheme.subtitle1.copyWith(
+                              fontSize: 14, fontWeight: FontWeight.w700),
+                        ),
+                        onPressed: () {
+                          Navigator.of(context, rootNavigator: true)
+                              .pop('dialog');
+                          if (Platform.isIOS) {
+                            PhotoManager.openSetting();
+                          }
+                        },
                       ),
                       ),
-                      onPressed: () {
-                        Navigator.of(context, rootNavigator: true)
-                            .pop('dialog');
-                        if (Platform.isIOS) {
-                          PhotoManager.openSetting();
-                        }
-                      },
-                    ),
-                  ],
-                );
+                    ],
+                  );
 
 
-                showDialog(
-                  context: context,
-                  builder: (BuildContext context) {
-                    return BackdropFilter(
-                      filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
-                      child: alert,
-                    );
-                  },
-                  barrierColor: Colors.black12,
-                );
-              }
-            },
-            label: Text('Grant permission',
-                style: Theme.of(context).textTheme.headline6.copyWith(
-                    color: Theme.of(context).colorScheme.fabTextOrIconColor)),
-            shape:
-                RoundedRectangleBorder(borderRadius: BorderRadius.circular(8))),
+                  showDialog(
+                    context: context,
+                    builder: (BuildContext context) {
+                      return BackdropFilter(
+                        filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
+                        child: alert,
+                      );
+                    },
+                    barrierColor: Colors.black12,
+                  );
+                }
+              },
+              // padding: EdgeInsets.fromLTRB(12, 20, 12, 20),
+            ),
+          ),
+        ],
       ),
       ),
-      floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
     );
     );
   }
   }
 }
 }

+ 46 - 13
lib/ui/home_widget.dart

@@ -12,6 +12,7 @@ import 'package:photo_manager/photo_manager.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/db/files_db.dart';
 import 'package:photos/db/files_db.dart';
+import 'package:photos/ente_theme_data.dart';
 import 'package:photos/events/account_configured_event.dart';
 import 'package:photos/events/account_configured_event.dart';
 import 'package:photos/events/backup_folders_updated_event.dart';
 import 'package:photos/events/backup_folders_updated_event.dart';
 import 'package:photos/events/files_updated_event.dart';
 import 'package:photos/events/files_updated_event.dart';
@@ -33,7 +34,7 @@ import 'package:photos/services/user_service.dart';
 import 'package:photos/ui/app_update_dialog.dart';
 import 'package:photos/ui/app_update_dialog.dart';
 import 'package:photos/ui/backup_folder_selection_page.dart';
 import 'package:photos/ui/backup_folder_selection_page.dart';
 import 'package:photos/ui/collections_gallery_widget.dart';
 import 'package:photos/ui/collections_gallery_widget.dart';
-import 'package:photos/ui/common_elements.dart';
+import 'package:photos/ui/common/gradientButton.dart';
 import 'package:photos/ui/create_collection_page.dart';
 import 'package:photos/ui/create_collection_page.dart';
 import 'package:photos/ui/extents_page_view.dart';
 import 'package:photos/ui/extents_page_view.dart';
 import 'package:photos/ui/gallery.dart';
 import 'package:photos/ui/gallery.dart';
@@ -421,10 +422,18 @@ class _HomeWidgetState extends State<HomeWidget> {
       mainAxisAlignment: MainAxisAlignment.spaceBetween,
       mainAxisAlignment: MainAxisAlignment.spaceBetween,
       children: [
       children: [
         _headerWidgetWithSettingsButton,
         _headerWidgetWithSettingsButton,
-        Image.asset(
-          "assets/preserved.png",
-          height: 160,
+        Padding(
+          padding: const EdgeInsets.only(top: 64),
+          child: Image.asset(
+            "assets/preserved.png",
+            height: 206,
+          ),
         ),
         ),
+        Text('No photos are being backed up right now',
+            style: Theme.of(context)
+                .textTheme
+                .caption
+                .copyWith(fontFamily: 'Inter-Medium', fontSize: 16)),
         Center(
         Center(
           child: Hero(
           child: Hero(
             tag: "select_folders",
             tag: "select_folders",
@@ -433,13 +442,17 @@ class _HomeWidgetState extends State<HomeWidget> {
               child: Container(
               child: Container(
                 width: double.infinity,
                 width: double.infinity,
                 height: 64,
                 height: 64,
-                padding: const EdgeInsets.fromLTRB(60, 0, 60, 0),
-                child: button(
-                  "start backup",
-                  fontSize: 16,
-                  lineHeight: 1.5,
-                  padding: EdgeInsets.only(bottom: 4),
-                  onPressed: () async {
+                padding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
+                child: GradientButton(
+                  child: Text(
+                    'Start Backup',
+                    style: gradientButtonTextTheme(),
+                  ),
+                  linearGradientColors: const [
+                    Color(0xFF2CD267),
+                    Color(0xFF1DB954),
+                  ],
+                  onTap: () async {
                     if (LocalSyncService.instance
                     if (LocalSyncService.instance
                         .hasGrantedLimitedPermissions()) {
                         .hasGrantedLimitedPermissions()) {
                       PhotoManager.presentLimited();
                       PhotoManager.presentLimited();
@@ -448,12 +461,32 @@ class _HomeWidgetState extends State<HomeWidget> {
                         context,
                         context,
                         BackupFolderSelectionPage(
                         BackupFolderSelectionPage(
                           shouldSelectAll: true,
                           shouldSelectAll: true,
-                          buttonText: "Start backup",
+                          buttonText: "Start Backup",
                         ),
                         ),
                       );
                       );
                     }
                     }
                   },
                   },
                 ),
                 ),
+                // child: button(
+                //   "start backup",
+                //   fontSize: 16,
+                //   lineHeight: 1.5,
+                //   padding: EdgeInsets.only(bottom: 4),
+                //   onPressed: () async {
+                //     if (LocalSyncService.instance
+                //         .hasGrantedLimitedPermissions()) {
+                //       PhotoManager.presentLimited();
+                //     } else {
+                //       routeToPage(
+                //         context,
+                //         BackupFolderSelectionPage(
+                //           shouldSelectAll: true,
+                //           buttonText: "Start backup",
+                //         ),
+                //       );
+                //     }
+                //   },
+                // ),
               ),
               ),
             ),
             ),
           ),
           ),
@@ -474,7 +507,7 @@ class _HomeWidgetState extends State<HomeWidget> {
           width: 180,
           width: 180,
           child: ClipRect(
           child: ClipRect(
             child: BackdropFilter(
             child: BackdropFilter(
-              filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
+              filter: ImageFilter.blur(sigmaX: 4, sigmaY: 4),
               child: GNav(
               child: GNav(
                 curve: Curves.easeOutExpo,
                 curve: Curves.easeOutExpo,
                 backgroundColor: Theme.of(context).bottomAppBarColor,
                 backgroundColor: Theme.of(context).bottomAppBarColor,

+ 24 - 69
lib/ui/loading_photos_widget.dart

@@ -1,8 +1,9 @@
 import 'dart:async';
 import 'dart:async';
 
 
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
-import 'package:loading_animations/loading_animations.dart';
+import 'package:lottie/lottie.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/core/event_bus.dart';
+import 'package:photos/ente_theme_data.dart';
 import 'package:photos/events/sync_status_update_event.dart';
 import 'package:photos/events/sync_status_update_event.dart';
 import 'package:photos/services/local_sync_service.dart';
 import 'package:photos/services/local_sync_service.dart';
 import 'package:photos/ui/backup_folder_selection_page.dart';
 import 'package:photos/ui/backup_folder_selection_page.dart';
@@ -17,20 +18,10 @@ class LoadingPhotosWidget extends StatefulWidget {
 
 
 class _LoadingPhotosWidgetState extends State<LoadingPhotosWidget> {
 class _LoadingPhotosWidgetState extends State<LoadingPhotosWidget> {
   StreamSubscription<SyncStatusUpdate> _firstImportEvent;
   StreamSubscription<SyncStatusUpdate> _firstImportEvent;
-  int _currentPage = 0;
-  final PageController _pageController = PageController(
-    initialPage: 0,
-  );
-  final List<String> _messages = [
-    "web.ente.io has a slick uploader",
-    "we have preserved over a million memories so far",
-    "all our apps are open source",
-    "our encryption protocols have been reviewed by engineers at Google, Apple, Amazon, and Facebook",
-    "you can share files and folders with your loved ones, end-to-end encrypted",
-    "our mobile apps run in the background to encrypt and backup new photos you take",
-    "we use Xchacha20Poly1305 to safely encrypt your data",
-    "one of our data centers is in a fall out shelter 25m underground",
-  ];
+  // final int _currentPage = 0;
+  // final PageController _pageController = PageController(
+  //   initialPage: 0,
+  // );
 
 
   @override
   @override
   void initState() {
   void initState() {
@@ -46,28 +37,11 @@ class _LoadingPhotosWidgetState extends State<LoadingPhotosWidget> {
               context,
               context,
               BackupFolderSelectionPage(
               BackupFolderSelectionPage(
                 shouldSelectAll: true,
                 shouldSelectAll: true,
-                buttonText: "Start backup",
+                buttonText: "Start Backup",
               ));
               ));
         }
         }
       }
       }
     });
     });
-
-    Timer.periodic(Duration(seconds: 5), (Timer timer) {
-      if (!mounted) {
-        return;
-      }
-      if (_currentPage < _messages.length - 1) {
-        _currentPage++;
-      } else {
-        _currentPage = 0;
-      }
-
-      _pageController.animateToPage(
-        _currentPage,
-        duration: Duration(milliseconds: 300),
-        curve: Curves.easeIn,
-      );
-    });
   }
   }
 
 
   @override
   @override
@@ -81,47 +55,28 @@ class _LoadingPhotosWidgetState extends State<LoadingPhotosWidget> {
     return Scaffold(
     return Scaffold(
       body: Center(
       body: Center(
         child: Column(
         child: Column(
-          mainAxisAlignment: MainAxisAlignment.center,
           crossAxisAlignment: CrossAxisAlignment.center,
           crossAxisAlignment: CrossAxisAlignment.center,
           children: [
           children: [
-            LoadingBouncingGrid.square(
-              inverted: true,
-              backgroundColor: Theme.of(context).buttonColor,
-              size: 64,
-            ),
-            Padding(padding: const EdgeInsets.all(20.0)),
-            Text(
-              "loading your gallery...",
-              style: TextStyle(
-                fontSize: 16,
-              ),
-            ),
-            Padding(padding: EdgeInsets.all(10)),
-            Text(
-              "this might take upto 30 seconds 🐣",
-              style: TextStyle(color: Colors.white.withOpacity(0.3)),
-            ),
-            Padding(padding: const EdgeInsets.all(70)),
-            Text(
-              "did you know?",
-              style: TextStyle(
-                fontSize: 16,
-                color: Theme.of(context).buttonColor,
-              ),
+            SizedBox(
+              height: 56,
             ),
             ),
-            Padding(padding: EdgeInsets.all(8)),
+            Lottie.asset('assets/loadingGalleryLottie.json'),
+            Text("Did you know?",
+                style: Theme.of(context).textTheme.headline6.copyWith(
+                    fontFamily: "Inter",
+                    color: Theme.of(context)
+                        .colorScheme
+                        .defaultTextColor
+                        .withOpacity(0.4))),
             SizedBox(
             SizedBox(
-              height: 80,
-              child: PageView.builder(
-                scrollDirection: Axis.vertical,
-                controller: _pageController,
-                itemBuilder: (context, index) {
-                  return _getMessage(_messages[index]);
-                },
-                itemCount: _messages.length,
-                physics: NeverScrollableScrollPhysics(),
-              ),
+              height: 16,
             ),
             ),
+            Text(
+              "ente is amazing",
+              style: Theme.of(context).textTheme.headline6.copyWith(
+                  fontFamily: "Inter",
+                  color: Theme.of(context).colorScheme.defaultTextColor),
+            )
           ],
           ],
         ),
         ),
       ),
       ),

+ 6 - 2
lib/ui/password_entry_page.dart

@@ -358,9 +358,13 @@ class _PasswordEntryPageState extends State<PasswordEntryPage> {
                                       horizontal: 20),
                                       horizontal: 20),
                                   child: Container(
                                   child: Container(
                                     decoration: BoxDecoration(
                                     decoration: BoxDecoration(
-                                      border: Border.all(
+                                      boxShadow: [
+                                        BoxShadow(
+                                          spreadRadius: 0.5,
                                           color: Theme.of(context).hintColor,
                                           color: Theme.of(context).hintColor,
-                                          width: 0.5),
+                                          offset: Offset(0, -0.325),
+                                        ),
+                                      ],
                                       borderRadius: BorderRadius.only(
                                       borderRadius: BorderRadius.only(
                                         topLeft: Radius.zero,
                                         topLeft: Radius.zero,
                                         topRight: Radius.zero,
                                         topRight: Radius.zero,

+ 7 - 0
pubspec.lock

@@ -679,6 +679,13 @@ packages:
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
     version: "1.0.1"
     version: "1.0.1"
+  lottie:
+    dependency: "direct main"
+    description:
+      name: lottie
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.2"
   matcher:
   matcher:
     dependency: transitive
     dependency: transitive
     description:
     description:

+ 1 - 0
pubspec.yaml

@@ -72,6 +72,7 @@ dependencies:
   loading_animations: ^2.1.0
   loading_animations: ^2.1.0
   local_auth: ^1.1.5
   local_auth: ^1.1.5
   logging: ^1.0.1
   logging: ^1.0.1
+  lottie: ^1.2.2
   motionphoto:
   motionphoto:
     git: "https://github.com/ente-io/motionphoto.git"
     git: "https://github.com/ente-io/motionphoto.git"
   move_to_background: ^1.0.2
   move_to_background: ^1.0.2

Some files were not shown because too many files changed in this diff