从TextWidget flutter获取文本。

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

我正在创建一个天气应用,在这个应用中,我向一个TextField提供一个位置字符串,并在其中获取文本。我知道如果我每次都使用TextField widget,我可以做到这一点,但我想使用代码重用性,这就是为什么我创建了一个不同的Widget,名为TextFieldWidget,我在其中提供了一个提示变量,它将返回其中的文本。我不知道如何做返回文本。这是我的代码。

import 'package:flutter/material.dart';

class TextFieldWidget extends StatefulWidget {

  final String _hint;

  TextFieldWidget(this._hint);

  @override
  _TextFieldWidgetState createState() => _TextFieldWidgetState();
}

class _TextFieldWidgetState extends State<TextFieldWidget> {

  TextEditingController _textEditingController;
  InputDecoration _inputdecoration;

  @override
  void initState() {
    super.initState();
    _textEditingController = TextEditingController();
    _inputdecoration = InputDecoration(hintText: widget._hint,floatingLabelBehavior: FloatingLabelBehavior.always);
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      autocorrect: true,
      controller: _textEditingController,
      keyboardType: TextInputType.text,
      enableSuggestions: true,
      decoration: _inputdecoration,
      onSubmitted: (value){
          // somehow return data
          // I want to access this part..
      },
    );
  }
}
flutter flutter-layout textfield
1个回答
1
投票

1. 你必须在调用类里面创建一个方法

void _setTextValue(String value) {
  // Submitted text should appear here from value
}


TextFieldWidget(_setTextValue)

2. 在TextFormField内使用这个,然后

  final Function _setValue;

  TextFieldWidget(this._setValue);

3. 内部提交的呼叫

widget._setValue(value);

最后,你将在调用类

已编辑。

我们可以在调用widgets的时候添加回调,用指定的参数来调用,这才是正确的方法。

例子:

class _TextFieldWidgetState extends State<TextFieldWidget> {

  TextEditingController _textEditingController;
  InputDecoration _inputdecoration;

  @override
  void initState() {
    super.initState();
    _textEditingController = TextEditingController();
    _inputdecoration = InputDecoration(hintText: 'UserName',floatingLabelBehavior: FloatingLabelBehavior.always);
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      autocorrect: true,
      controller: _textEditingController,
      keyboardType: TextInputType.text,
      enableSuggestions: true,
      decoration: _inputdecoration,
      onSubmitted: (value){
        widget.getUserName(value);
        // somehow return data
        // I want to access this part..
      },
    );
  }
}

调用上面的代码

TextFieldWidget(getUserName: (value) {
         // Get the username here
         print(value);
       }),

注:我们可以像这样添加多个命名参数

© www.soinside.com 2019 - 2024. All rights reserved.