toolbar is now only present when textfield is focused
also added it to manage account page
This commit is contained in:
parent
55daacf221
commit
cc8441dabc
|
@ -31,6 +31,7 @@ class CreatePostPage extends HookWidget {
|
||||||
);
|
);
|
||||||
|
|
||||||
final titleFocusNode = useFocusNode();
|
final titleFocusNode = useFocusNode();
|
||||||
|
final editorFocusNode = useFocusNode();
|
||||||
|
|
||||||
handleSubmit(Jwt token) async {
|
handleSubmit(Jwt token) async {
|
||||||
if (formKey.currentState!.validate()) {
|
if (formKey.currentState!.validate()) {
|
||||||
|
@ -63,6 +64,7 @@ class CreatePostPage extends HookWidget {
|
||||||
labelText: L10n.of(context).body,
|
labelText: L10n.of(context).body,
|
||||||
instanceHost: store.instanceHost,
|
instanceHost: store.instanceHost,
|
||||||
fancy: store.showFancy,
|
fancy: store.showFancy,
|
||||||
|
focusNode: editorFocusNode,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -146,6 +148,7 @@ class CreatePostPage extends HookWidget {
|
||||||
children: [
|
children: [
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
EditorToolbar(
|
EditorToolbar(
|
||||||
|
editorFocusNode: editorFocusNode,
|
||||||
controller: bodyController,
|
controller: bodyController,
|
||||||
instanceHost: context.read<CreatePostStore>().instanceHost,
|
instanceHost: context.read<CreatePostStore>().instanceHost,
|
||||||
),
|
),
|
||||||
|
|
|
@ -234,7 +234,9 @@ class _ManageAccount extends HookWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ListView(
|
return Stack(
|
||||||
|
children: [
|
||||||
|
ListView(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 15),
|
padding: const EdgeInsets.symmetric(horizontal: 15),
|
||||||
children: [
|
children: [
|
||||||
_ImagePicker(
|
_ImagePicker(
|
||||||
|
@ -253,7 +255,8 @@ class _ManageAccount extends HookWidget {
|
||||||
informAcceptedRef: informAcceptedBannerRef,
|
informAcceptedRef: informAcceptedBannerRef,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Text(L10n.of(context).display_name, style: theme.textTheme.headline6),
|
Text(L10n.of(context).display_name,
|
||||||
|
style: theme.textTheme.headline6),
|
||||||
TextField(
|
TextField(
|
||||||
controller: displayNameController,
|
controller: displayNameController,
|
||||||
onSubmitted: (_) => bioFocusNode.requestFocus(),
|
onSubmitted: (_) => bioFocusNode.requestFocus(),
|
||||||
|
@ -277,7 +280,8 @@ class _ManageAccount extends HookWidget {
|
||||||
onSubmitted: (_) => matrixUserFocusNode.requestFocus(),
|
onSubmitted: (_) => matrixUserFocusNode.requestFocus(),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Text(L10n.of(context).matrix_user, style: theme.textTheme.headline6),
|
Text(L10n.of(context).matrix_user,
|
||||||
|
style: theme.textTheme.headline6),
|
||||||
TextField(
|
TextField(
|
||||||
focusNode: matrixUserFocusNode,
|
focusNode: matrixUserFocusNode,
|
||||||
controller: matrixUserController,
|
controller: matrixUserController,
|
||||||
|
@ -379,6 +383,21 @@ class _ManageAccount extends HookWidget {
|
||||||
),
|
),
|
||||||
const BottomSafe(),
|
const BottomSafe(),
|
||||||
],
|
],
|
||||||
|
),
|
||||||
|
SafeArea(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
const Spacer(),
|
||||||
|
EditorToolbar(
|
||||||
|
editorFocusNode: bioFocusNode,
|
||||||
|
controller: bioController,
|
||||||
|
instanceHost: user.instanceHost,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,9 +52,11 @@ class Editor extends HookWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TextField(
|
return FocusScope(
|
||||||
controller: actualController,
|
child: Focus(
|
||||||
focusNode: focusNode,
|
focusNode: focusNode,
|
||||||
|
child: TextField(
|
||||||
|
controller: actualController,
|
||||||
autofocus: autofocus,
|
autofocus: autofocus,
|
||||||
keyboardType: TextInputType.multiline,
|
keyboardType: TextInputType.multiline,
|
||||||
textCapitalization: TextCapitalization.sentences,
|
textCapitalization: TextCapitalization.sentences,
|
||||||
|
@ -64,6 +66,8 @@ class Editor extends HookWidget {
|
||||||
minLines: minLines,
|
minLines: minLines,
|
||||||
decoration: InputDecoration(labelText: labelText),
|
decoration: InputDecoration(labelText: labelText),
|
||||||
inputFormatters: [MarkdownFormatter()],
|
inputFormatters: [MarkdownFormatter()],
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,24 +39,36 @@ enum HeaderLevel {
|
||||||
final int value;
|
final int value;
|
||||||
}
|
}
|
||||||
|
|
||||||
class EditorToolbar extends StatelessWidget {
|
class EditorToolbar extends HookWidget {
|
||||||
final TextEditingController controller;
|
final TextEditingController controller;
|
||||||
final String instanceHost;
|
final String instanceHost;
|
||||||
final EditorToolbarStore store;
|
final EditorToolbarStore store;
|
||||||
|
final FocusNode editorFocusNode;
|
||||||
static const _height = 50.0;
|
static const _height = 50.0;
|
||||||
|
|
||||||
EditorToolbar({
|
EditorToolbar({
|
||||||
required this.controller,
|
required this.controller,
|
||||||
required this.instanceHost,
|
required this.instanceHost,
|
||||||
|
required this.editorFocusNode,
|
||||||
}) : store = EditorToolbarStore(instanceHost);
|
}) : store = EditorToolbarStore(instanceHost);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final visible = useState(editorFocusNode.hasFocus);
|
||||||
|
useEffect(() {
|
||||||
|
editorFocusNode.addListener(() {
|
||||||
|
visible.value = editorFocusNode.hasFocus;
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}, [editorFocusNode]);
|
||||||
|
|
||||||
return MobxProvider(
|
return MobxProvider(
|
||||||
create: (context) => store,
|
create: (context) => store,
|
||||||
child: AsyncStoreListener(
|
child: AsyncStoreListener(
|
||||||
asyncStore: store.imageUploadState,
|
asyncStore: store.imageUploadState,
|
||||||
child: Container(
|
child: visible.value
|
||||||
|
? Container(
|
||||||
height: _height,
|
height: _height,
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
color: Theme.of(context).cardColor,
|
color: Theme.of(context).cardColor,
|
||||||
|
@ -69,7 +81,8 @@ class EditorToolbar extends StatelessWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
|
: const SizedBox.shrink(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ class WriteComment extends HookWidget {
|
||||||
final showFancy = useState(false);
|
final showFancy = useState(false);
|
||||||
final delayed = useDelayedLoading();
|
final delayed = useDelayedLoading();
|
||||||
final loggedInAction = useLoggedInAction(post.instanceHost);
|
final loggedInAction = useLoggedInAction(post.instanceHost);
|
||||||
|
final editorFocusNode = useFocusNode();
|
||||||
|
|
||||||
final preview = () {
|
final preview = () {
|
||||||
final body = () {
|
final body = () {
|
||||||
|
@ -117,6 +118,7 @@ class WriteComment extends HookWidget {
|
||||||
controller: controller,
|
controller: controller,
|
||||||
autofocus: true,
|
autofocus: true,
|
||||||
fancy: showFancy.value,
|
fancy: showFancy.value,
|
||||||
|
focusNode: editorFocusNode,
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
@ -141,6 +143,7 @@ class WriteComment extends HookWidget {
|
||||||
children: [
|
children: [
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
EditorToolbar(
|
EditorToolbar(
|
||||||
|
editorFocusNode: editorFocusNode,
|
||||||
controller: controller,
|
controller: controller,
|
||||||
instanceHost: post.instanceHost,
|
instanceHost: post.instanceHost,
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in New Issue