美文网首页
Flutter底部弹出TextField评论输入框并且自适应高度

Flutter底部弹出TextField评论输入框并且自适应高度

作者: Faith_K | 来源:发表于2020-04-01 11:17 被阅读0次

先看效果

Untitled.gif

1.首先我们使用的是 showModalBottomSheet,来实现底部弹出输入框,但是发现输入框不能自动跟随键盘向上移动,然后直接换成了一个页面,通过修改路由加载方式在实现push的新页面在老的页面之上。

2.首先我们先写底部弹出输入框 ,这里我们对外暴露的一个方法onEditingCompleteText通过点击键盘上面的发送来回调输入框的内容,当然你也可以根据自己的需求来修改

class InputButtomWidget extends StatelessWidget {

 final ValueChanged onEditingCompleteText;
 final TextEditingController controller = TextEditingController();
  
  InputButtomWidget({this.onEditingCompleteText});

  @override

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      backgroundColor: Colors.transparent,
      body: new Column(
        children: <Widget>[
          Expanded(
              child: new GestureDetector(
                child: new Container(
                  color: Colors.transparent,
                ),
                onTap: () {
                  Navigator.pop(context);
                },
              )
          ),
          new Container(
              color: Color(0xFFF4F4F4),
              padding: EdgeInsets.only(left: 16,top: 8,bottom: 8,right: 16),
              child:  Container(
                decoration: BoxDecoration(
                    color: Colors.white
                ),

                child: TextField(
                  controller: controller,
                  autofocus: true,
                  style: TextStyle(
                      fontSize: 16
                  ),
                  //设置键盘按钮为发送
                  textInputAction: TextInputAction.send,
                  keyboardType: TextInputType.multiline,
                  onEditingComplete: (){
                    //点击发送调用
                    print('onEditingComplete');
                    onEditingCompleteText(controller.text);
                    Navigator.pop(context);

                  },
                  decoration: InputDecoration(
                    hintText: '请输入评论的内容',
                    isDense: true,
                    contentPadding: EdgeInsets.only(left: 10,top: 5,bottom: 5,right: 10),
                    border: const OutlineInputBorder(
                      gapPadding: 0,
                      borderSide: BorderSide(
                        width: 0,
                        style: BorderStyle.none,
                      ),
                    ),

                  ),

                  minLines: 1,
                  maxLines: 5,
                ),
              )
          )
        ],
      ),
    );
  }
}

3.路由过度动画,我们是复制别人写好的。

//过度路由
class PopRoute extends PopupRoute{
  final Duration _duration = Duration(milliseconds: 300);
  Widget child;

  PopRoute({@required this.child});

  @override
  Color get barrierColor => null;

  @override
  bool get barrierDismissible => true;

  @override
  String get barrierLabel => null;

  @override
  Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
    return child;
  }

  @override
  Duration get transitionDuration => _duration;

}

4,调用

                    Navigator.push(context,
                        PopRoute(
                            child: InputButtomWidget(
                              onEditingCompleteText: (text){
                                  print('点击发送 ---$text');
                              },
                            )
                        )
                    );

相关文章

网友评论

      本文标题:Flutter底部弹出TextField评论输入框并且自适应高度

      本文链接:https://www.haomeiwen.com/subject/chyouhtx.html