98 lines
3.4 KiB
Dart
98 lines
3.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:virtual_keyboard_multi_language/virtual_keyboard_multi_language.dart';
|
|
|
|
import '../settings/custom_layout.dart';
|
|
|
|
class TextInputDialog extends ConsumerWidget {
|
|
const TextInputDialog({
|
|
required this.controller,
|
|
this.title = 'Text Input',
|
|
this.onReturnPress,
|
|
this.hintText,
|
|
super.key,
|
|
});
|
|
|
|
final TextEditingController controller;
|
|
final String title;
|
|
final Function? onReturnPress;
|
|
final String? hintText;
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
return TextField(
|
|
controller: controller,
|
|
decoration: InputDecoration(hintText: hintText),
|
|
onTap: () {
|
|
// always move the cursor to the end position by default
|
|
controller.value = TextEditingValue(
|
|
text: controller.text,
|
|
selection: TextSelection.collapsed(
|
|
offset: controller.text.length,
|
|
),
|
|
);
|
|
showDialog(
|
|
context: context,
|
|
builder: (context) => Dialog.fullscreen(
|
|
// backgroundColor: Colors.transparent,
|
|
child: ClipRect(
|
|
// TODO: Blur background causes lag on the raspberry pi
|
|
// BackdropFilter() with:
|
|
// filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
|
|
child: Scaffold(
|
|
backgroundColor:
|
|
Theme.of(context).colorScheme.background.withOpacity(0.5),
|
|
appBar: AppBar(
|
|
// backgroundColor: Colors.transparent,
|
|
title: Text(title),
|
|
centerTitle: false,
|
|
leading: IconButton(
|
|
onPressed: () {
|
|
FocusScope.of(context).unfocus();
|
|
context.pop();
|
|
},
|
|
icon: const Icon(Icons.close),
|
|
),
|
|
),
|
|
body: Stack(
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Align(
|
|
alignment: Alignment.topCenter,
|
|
child: Container(
|
|
constraints: const BoxConstraints(maxWidth: 400),
|
|
child: TextField(
|
|
controller: controller,
|
|
autofocus: true,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
Align(
|
|
alignment: Alignment.bottomCenter,
|
|
child: TextFieldTapRegion(
|
|
child: VirtualKeyboard(
|
|
textController: controller,
|
|
textColor:
|
|
Theme.of(context).textTheme.headlineLarge!.color!,
|
|
type: VirtualKeyboardType.Alphanumeric,
|
|
// onKeyPress: (key) => onKeyPress(key, context),
|
|
customLayoutKeys: CustomLayoutKeys(),
|
|
onReturnKey: onReturnPress,
|
|
unfocus: true,
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|