Browse Source

change caption on submit ('done' on keyboard)

ashilkn 2 years ago
parent
commit
358efb20b8

+ 16 - 6
lib/ui/components/info_item_widget.dart → lib/ui/components/info_item_text_widget.dart

@@ -1,23 +1,26 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
+import 'package:photos/models/file.dart';
 import 'package:photos/theme/ente_theme.dart';
 import 'package:photos/theme/ente_theme.dart';
+import 'package:photos/utils/magic_util.dart';
 
 
-class InfoItemWidget extends StatefulWidget {
+class InfoItemTextWidget extends StatefulWidget {
   final String hintText;
   final String hintText;
-  const InfoItemWidget({this.hintText = '', super.key});
+  final File file;
+  const InfoItemTextWidget({required this.file, this.hintText = '', super.key});
 
 
   @override
   @override
-  State<InfoItemWidget> createState() => _InfoItemWidgetState();
+  State<InfoItemTextWidget> createState() => _InfoItemTextWidgetState();
 }
 }
 
 
-class _InfoItemWidgetState extends State<InfoItemWidget> {
+class _InfoItemTextWidgetState extends State<InfoItemTextWidget> {
   int maxLength = 280;
   int maxLength = 280;
   int currentLength = 0;
   int currentLength = 0;
   final _textController = TextEditingController();
   final _textController = TextEditingController();
   final _focusNode = FocusNode();
   final _focusNode = FocusNode();
+  String caption = "";
 
 
   @override
   @override
   void dispose() {
   void dispose() {
-    // save caption here
     _textController.dispose();
     _textController.dispose();
     super.dispose();
     super.dispose();
   }
   }
@@ -28,7 +31,7 @@ class _InfoItemWidgetState extends State<InfoItemWidget> {
     final textTheme = getEnteTextTheme(context);
     final textTheme = getEnteTextTheme(context);
     return TextField(
     return TextField(
       onEditingComplete: () {
       onEditingComplete: () {
-        //save caption here
+        editCaption();
         _focusNode.unfocus();
         _focusNode.unfocus();
       },
       },
       controller: _textController,
       controller: _textController,
@@ -57,8 +60,15 @@ class _InfoItemWidgetState extends State<InfoItemWidget> {
       onChanged: (value) {
       onChanged: (value) {
         setState(() {
         setState(() {
           currentLength = value.length;
           currentLength = value.length;
+          caption = value;
         });
         });
       },
       },
     );
     );
   }
   }
+
+  void editCaption() {
+    if (caption.isNotEmpty) {
+      editFileCaption(context, widget.file, caption);
+    }
+  }
 }
 }

+ 4 - 4
lib/ui/viewer/file/file_info_widget.dart

@@ -11,7 +11,7 @@ import "package:photos/models/file.dart";
 import "package:photos/models/file_type.dart";
 import "package:photos/models/file_type.dart";
 import 'package:photos/ui/components/divider_widget.dart';
 import 'package:photos/ui/components/divider_widget.dart';
 import 'package:photos/ui/components/icon_button_widget.dart';
 import 'package:photos/ui/components/icon_button_widget.dart';
-import 'package:photos/ui/components/info_item_widget.dart';
+import 'package:photos/ui/components/info_item_text_widget.dart';
 import 'package:photos/ui/components/title_bar_widget.dart';
 import 'package:photos/ui/components/title_bar_widget.dart';
 import 'package:photos/ui/viewer/file/collections_list_of_file_widget.dart';
 import 'package:photos/ui/viewer/file/collections_list_of_file_widget.dart';
 import 'package:photos/ui/viewer/file/device_folders_list_of_file_widget.dart';
 import 'package:photos/ui/viewer/file/device_folders_list_of_file_widget.dart';
@@ -93,9 +93,9 @@ class _FileInfoWidgetState extends State<FileInfoWidget> {
     final bool showDimension =
     final bool showDimension =
         _exifData["resolution"] != null && _exifData["megaPixels"] != null;
         _exifData["resolution"] != null && _exifData["megaPixels"] != null;
     final listTiles = <Widget>[
     final listTiles = <Widget>[
-      const Padding(
-        padding: EdgeInsets.only(top: 8, bottom: 4),
-        child: InfoItemWidget(),
+      Padding(
+        padding: const EdgeInsets.only(top: 8, bottom: 4),
+        child: InfoItemTextWidget(file: widget.file),
       ),
       ),
       ListTile(
       ListTile(
         horizontalTitleGap: 2,
         horizontalTitleGap: 2,