Flutter-TextFormField

时间:2020-06-20 12:21:21

标签: flutter

我有一个像这样的TextFormField:

TextFormField(
        cursorColor: Colors.black,
        decoration: InputDecoration(
          prefixIcon: Icon(Icons.email),
          errorMaxLines: 2,
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(10),
          ),
          errorBorder: OutlineInputBorder(
            borderSide: BorderSide(
              width: 2,
            ),
          ),
        ),
        autocorrect: false,
        onChanged: (_) {},
        validator: (_) {},
      ),

无论何时调用 onChanged(),此TextFormField都会从api获取电子邮件,因此我决定将一个进度/加载指示器放入其中,以表明它正在获取数据,但是我很难解决它。

那么有什么方法可以在TextFormField中插入 CircularProgressIndicator()或简单的进度/加载指示器吗?

类似这样的东西:

TextFormField with Loading indicator

3 个答案:

答案 0 :(得分:4)

TextFormEdit没有正确的属性,即Suffix小部件。 尽管如此,InputDecoration仍具有后缀属性,您可以在其中附加所需的任何进度小部件。 进入这里后,您可以直接在小部件中保持可见或不可见(以及其他设置)。

Text("$content", textAlign: lang=='ar'?TextAlign.right:TextAlign.left )

答案 1 :(得分:2)

支持@stefanodecillis,我也可以使用Stack

实现它
              Stack(
                children: <Widget>[
                  TextFormField(
                    cursorColor: Colors.black,
                    decoration: InputDecoration(
                      prefixIcon: Icon(Icons.email),
                      errorMaxLines: 2,
                      border: OutlineInputBorder(
                        borderRadius: BorderRadius.circular(10),
                      ),
                      errorBorder: OutlineInputBorder(
                        borderSide: BorderSide(
                          width: 2,
                        ),
                      ),
                    ),
                    autocorrect: false,
                    onChanged: (_) {},
                    validator: (_) {},
                  ),
                  (state.isSubmitting)
                      ? Positioned(
                          top: 5,
                          right: 5,
                          child: Container(
                            child: CircularProgressIndicator(),
                          ),
                        )
                      : Container(),
                ],
              ),

答案 2 :(得分:1)

在加载之前,将此变量添加到class statefull小部件

bool _isLoading = true; 

因此,当您加载电子邮件时

setState(){
   _isLoading = false;
}

并添加此文本字段代码

TextFormField(
            cursorColor: Colors.black,
            decoration: InputDecoration(
            prefixIcon: Icon(Icons.email),
            suffix: isLoading?CircularProgressIndicator():null,
              errorMaxLines: 2,
              border: OutlineInputBorder(
                borderRadius: BorderRadius.circular(10),
              ),
              errorBorder: OutlineInputBorder(
                borderSide: BorderSide(
                  width: 2,
                ),
              ),
            ),
            autocorrect: false,
            onChanged: (_) {},
            validator: (_) {},
          ),