我有一个 Flutter 项目。 使用特定小部件时,我希望在 webview flutter 中输入文本时,用户在屏幕键盘上输入的文本以大写字母开头。我怎样才能达到我需要的结果? 重要提示:文本不应自动更改,需要用户可以独立配置。但与此同时,屏幕键盘的初始外观应由大写字母组成。 我还希望这适用于同一 html 类的所有字段。
我的代码
import 'package:beamer/beamer.dart';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import '../../../../../../app/app.dart';
import '../../widgets/widgets.dart';
class SignUpWebView extends StatefulWidget {
const SignUpWebView({super.key});
@override
State<SignUpWebView> createState() => _SignUpWebViewState();
}
class _SignUpWebViewState extends State<SignUpWebView> {
late final WebViewController _controller;
bool _isLoading = true;
void _transfer(String url) {
final link = url.replaceFirst(
'openid-connect/auth',
'openid-connect/registrations',
);
_controller.loadRequest(Uri.parse(link));
}
@override
void initState() {
_controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..enableZoom(false)
..setNavigationDelegate(
NavigationDelegate(
onPageStarted: (String url) {
if (url.startsWith(
'https://id.synergy.ru/auth/realms/clients/protocol/openid-connect/auth',
)) {
_transfer(url);
}
},
onPageFinished: (String url) {
if (url.startsWith(
'https://id.synergy.ru/auth/realms/clients/protocol/openid-connect/registrations',
)) {
_controller.runJavaScript('''
var inputsField = document.getElementsByClassName('text-field__input');
for (var i = 0; i < inputsField.length; i++) {
inputsField[i].setAttribute('autocapitalize', 'sentences');
inputsField[i].style.appearance="textfield"
}
''');
setState(() {
_isLoading = false;
});
}
},
onNavigationRequest: (NavigationRequest request) {
if (request.url.startsWith(
'https://id.synergy.ru/auth/realms/clients/login-actions/authenticate',
)) {
context.beamToNamed(SignInLocation.signInPath);
}
if (request.url.startsWith(
'https://google.com',
)) {
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
)
..loadRequest(Uri.parse('https://lk.synergy.ru/login/'));
super.initState();
}
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return Scaffold(
backgroundColor: theme.palette.bgContrast,
appBar: const SignUpAppBar(),
body: _isLoading
? const Center(
child: CircularProgressIndicator(),
)
: SafeArea(
child: WebViewWidget(
controller: _controller,
layoutDirection: TextDirection.rtl,
),
),
);
}
}
``
只需将此属性添加到您的 TextField,它将解决您的问题
TextField(
textCapitalization: TextCapitalization.sentences,
...