fix: release/0.1.1 known issues. (#1984)

* fix: #1976 Adding a cover image via upload doesn't work

* fix: #1973 Using the mouse to highlight text very easy to miss the first letter

* fix: #1962 Disable but still show the AI assistants icon in the toolbar menu when an OpenAI key is not provided

* fix: #1964 Text on the UI

* fix: #1966 the loading icon too close to the edge

* fix: #1967  the summarize feature generates duplicate answers

* fix: flutter analyze
This commit is contained in:
Lucas.Xu
2023-03-14 01:06:08 +08:00
committed by GitHub
parent ad5213cfad
commit 3686eabcb3
14 changed files with 296 additions and 37 deletions

View File

@ -16,6 +16,7 @@ import 'package:flowy_infra_ui/style_widget/icon_button.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:path/path.dart' as path;
const String kLocalImagesKey = 'local_images';
@ -263,7 +264,7 @@ class _ChangeCoverPopoverState extends State<ChangeCoverPopover> {
if (path != null) {
final directory = await _coverPath();
final newPath = await File(path).copy(
'$directory/${path.split('/').last}',
'$directory/${path.split(path).last}}',
);
imageNames.add(newPath.path);
}
@ -274,7 +275,7 @@ class _ChangeCoverPopoverState extends State<ChangeCoverPopover> {
Future<String> _coverPath() async {
final directory = await getIt<SettingsLocationCubit>().fetchLocation();
return Directory('$directory/covers')
return Directory(path.join(directory, 'covers'))
.create(recursive: true)
.then((value) => value.path);
}

View File

@ -10,9 +10,9 @@ enum SmartEditAction {
String get toInstruction {
switch (this) {
case SmartEditAction.summarize:
return 'Make it shorter';
return 'Make this shorter and more concise:';
case SmartEditAction.fixSpelling:
return 'Fix all the spelling mistakes';
return 'Correct this to standard English:';
}
}
}

View File

@ -140,9 +140,12 @@ class _SmartEditInputState extends State<_SmartEditInput> {
}
Widget _buildResultWidget(BuildContext context) {
final loading = SizedBox.fromSize(
size: const Size.square(14),
child: const CircularProgressIndicator(),
final loading = Padding(
padding: const EdgeInsets.symmetric(horizontal: 4.0),
child: SizedBox.fromSize(
size: const Size.square(14),
child: const CircularProgressIndicator(),
),
);
if (result == null) {
return loading;
@ -222,7 +225,6 @@ class _SmartEditInputState extends State<_SmartEditInput> {
final texts = result!.asRight().choices.first.text.split('\n')
..removeWhere((element) => element.isEmpty);
assert(texts.length == selectedNodes.length);
final transaction = widget.editorState.transaction;
transaction.replaceTexts(
selectedNodes.toList(growable: false),
@ -254,7 +256,7 @@ class _SmartEditInputState extends State<_SmartEditInput> {
final edits = await openAIRepository.getEdits(
input: input,
instruction: instruction,
n: input.split('\n').length,
n: 1,
);
return edits.fold((error) async {
return dartz.Left(

View File

@ -1,10 +1,14 @@
import 'package:appflowy/plugins/document/presentation/plugins/openai/widgets/smart_edit_action.dart';
import 'package:appflowy/plugins/document/presentation/plugins/openai/widgets/smart_edit_node_widget.dart';
import 'package:appflowy/user/application/user_service.dart';
import 'package:appflowy/workspace/presentation/widgets/pop_up_action.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:flowy_infra_ui/style_widget/icon_button.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flutter/material.dart';
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:easy_localization/easy_localization.dart';
ToolbarItem smartEditItem = ToolbarItem(
id: 'appflowy.toolbar.smart_edit',
@ -33,6 +37,20 @@ class _SmartEditWidget extends StatefulWidget {
}
class _SmartEditWidgetState extends State<_SmartEditWidget> {
bool isOpenAIEnabled = false;
@override
void initState() {
super.initState();
UserBackendService.getCurrentUserProfile().then((value) {
setState(() {
isOpenAIEnabled =
value.fold((l) => l.openaiKey.isNotEmpty, (r) => false);
});
});
}
@override
Widget build(BuildContext context) {
return PopoverActionList<SmartEditActionWrapper>(
@ -43,7 +61,9 @@ class _SmartEditWidgetState extends State<_SmartEditWidget> {
buildChild: (controller) {
return FlowyIconButton(
hoverColor: Colors.transparent,
tooltipText: 'Smart Edit',
tooltipText: isOpenAIEnabled
? LocaleKeys.document_plugins_smartEdit.tr()
: LocaleKeys.document_plugins_smartEditDisabled.tr(),
preferBelow: false,
icon: const Icon(
Icons.lightbulb_outline,
@ -51,7 +71,11 @@ class _SmartEditWidgetState extends State<_SmartEditWidget> {
color: Colors.white,
),
onPressed: () {
controller.show();
if (isOpenAIEnabled) {
controller.show();
} else {
_showError(LocaleKeys.document_plugins_smartEditDisabled.tr());
}
},
);
},
@ -97,4 +121,18 @@ class _SmartEditWidgetState extends State<_SmartEditWidget> {
withUpdateCursor: false,
);
}
Future<void> _showError(String message) async {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
action: SnackBarAction(
label: LocaleKeys.button_Cancel.tr(),
onPressed: () {
ScaffoldMessenger.of(context).hideCurrentSnackBar();
},
),
content: FlowyText(message),
),
);
}
}