Преглед на файлове

fix: settings dialog files path copy snackbar (#2114)

Mathias Mogensen преди 2 години
родител
ревизия
5ef91a8157

+ 2 - 1
frontend/appflowy_flutter/assets/translations/en.json

@@ -198,7 +198,8 @@
       "browser": "Browse",
       "browser": "Browse",
       "create": "Create",
       "create": "Create",
       "folderPath": "Path to store your folder",
       "folderPath": "Path to store your folder",
-      "locationCannotBeEmpty": "Path cannot be empty"
+      "locationCannotBeEmpty": "Path cannot be empty",
+      "pathCopiedSnackbar": "File storage path copied to clipboard!"
     },
     },
     "user": {
     "user": {
       "name": "Name",
       "name": "Name",

+ 40 - 25
frontend/appflowy_flutter/lib/workspace/presentation/settings/settings_dialog.dart

@@ -12,6 +12,9 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
 
 
+const _dialogHorizontalPadding = EdgeInsets.symmetric(horizontal: 12);
+const _contentInsetPadding = EdgeInsets.fromLTRB(0.0, 12.0, 0.0, 16.0);
+
 class SettingsDialog extends StatelessWidget {
 class SettingsDialog extends StatelessWidget {
   final UserProfilePB user;
   final UserProfilePB user;
   SettingsDialog(this.user, {Key? key}) : super(key: ValueKey(user.id));
   SettingsDialog(this.user, {Key? key}) : super(key: ValueKey(user.id));
@@ -23,34 +26,46 @@ class SettingsDialog extends StatelessWidget {
         ..add(const SettingsDialogEvent.initial()),
         ..add(const SettingsDialogEvent.initial()),
       child: BlocBuilder<SettingsDialogBloc, SettingsDialogState>(
       child: BlocBuilder<SettingsDialogBloc, SettingsDialogState>(
         builder: (context, state) => FlowyDialog(
         builder: (context, state) => FlowyDialog(
-          title: FlowyText(
-            LocaleKeys.settings_title.tr(),
-            fontSize: 20,
-            fontWeight: FontWeight.w700,
+          title: Padding(
+            padding: _dialogHorizontalPadding + _contentInsetPadding,
+            child: FlowyText(
+              LocaleKeys.settings_title.tr(),
+              fontSize: 20,
+              fontWeight: FontWeight.w700,
+            ),
           ),
           ),
-          child: Row(
-            crossAxisAlignment: CrossAxisAlignment.start,
-            children: [
-              SizedBox(
-                width: 200,
-                child: SettingsMenu(
-                  changeSelectedPage: (index) {
-                    context
-                        .read<SettingsDialogBloc>()
-                        .add(SettingsDialogEvent.setSelectedPage(index));
-                  },
-                  currentPage: context.read<SettingsDialogBloc>().state.page,
+          child: ScaffoldMessenger(
+            child: Scaffold(
+              backgroundColor: Colors.transparent,
+              body: Padding(
+                padding: _dialogHorizontalPadding,
+                child: Row(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    SizedBox(
+                      width: 200,
+                      child: SettingsMenu(
+                        changeSelectedPage: (index) {
+                          context
+                              .read<SettingsDialogBloc>()
+                              .add(SettingsDialogEvent.setSelectedPage(index));
+                        },
+                        currentPage:
+                            context.read<SettingsDialogBloc>().state.page,
+                      ),
+                    ),
+                    const VerticalDivider(),
+                    const SizedBox(width: 10),
+                    Expanded(
+                      child: getSettingsView(
+                        context.read<SettingsDialogBloc>().state.page,
+                        context.read<SettingsDialogBloc>().state.userProfile,
+                      ),
+                    )
+                  ],
                 ),
                 ),
               ),
               ),
-              const VerticalDivider(),
-              const SizedBox(width: 10),
-              Expanded(
-                child: getSettingsView(
-                  context.read<SettingsDialogBloc>().state.page,
-                  context.read<SettingsDialogBloc>().state.userProfile,
-                ),
-              )
-            ],
+            ),
           ),
           ),
         ),
         ),
       ),
       ),

+ 11 - 1
frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_file_customize_location_view.dart

@@ -46,7 +46,17 @@ class SettingsFileLocationCustomzierState
               onDoubleTap: () {
               onDoubleTap: () {
                 Clipboard.setData(ClipboardData(
                 Clipboard.setData(ClipboardData(
                   text: state.path,
                   text: state.path,
-                ));
+                )).then((_) {
+                  if (mounted) {
+                    ScaffoldMessenger.of(context).showSnackBar(
+                      SnackBar(
+                        content: FlowyText(
+                          LocaleKeys.settings_files_pathCopiedSnackbar.tr(),
+                        ),
+                      ),
+                    );
+                  }
+                });
               },
               },
               child: FlowyText.regular(
               child: FlowyText.regular(
                 state.path ?? '',
                 state.path ?? '',

+ 2 - 2
frontend/appflowy_flutter/packages/flowy_infra_ui/lib/src/flowy_overlay/flowy_dialog.dart

@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'dart:math';
 import 'dart:math';
 
 
-const _overlayContainerPadding = EdgeInsets.all(12);
+const _overlayContainerPadding = EdgeInsets.symmetric(vertical: 12);
 const overlayContainerMaxWidth = 760.0;
 const overlayContainerMaxWidth = 760.0;
 const overlayContainerMinWidth = 320.0;
 const overlayContainerMinWidth = 320.0;
 
 
@@ -25,6 +25,7 @@ class FlowyDialog extends StatelessWidget {
     final windowSize = MediaQuery.of(context).size;
     final windowSize = MediaQuery.of(context).size;
     final size = windowSize * 0.7;
     final size = windowSize * 0.7;
     return SimpleDialog(
     return SimpleDialog(
+        contentPadding: EdgeInsets.zero,
         title: title,
         title: title,
         shape: shape ??
         shape: shape ??
             RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
             RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
@@ -32,7 +33,6 @@ class FlowyDialog extends StatelessWidget {
           Material(
           Material(
             type: MaterialType.transparency,
             type: MaterialType.transparency,
             child: Container(
             child: Container(
-              padding: padding,
               height: size.height,
               height: size.height,
               width: max(min(size.width, overlayContainerMaxWidth),
               width: max(min(size.width, overlayContainerMaxWidth),
                   overlayContainerMinWidth),
                   overlayContainerMinWidth),