在WebView Flutter中输入大写字母的文本。我怎样才能实现这个?

问题描述 投票:0回答:1

我有一个 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,
              ),
            ),
    );
  }
}

``
android ios flutter webview flutterwebviewplugin
1个回答
0
投票

只需将此属性添加到您的 TextField,它将解决您的问题

TextField(
          textCapitalization: TextCapitalization.sentences,
...
© www.soinside.com 2019 - 2024. All rights reserved.