美文网首页Flutter圈子
Flutter软键盘输入组件(可@人)

Flutter软键盘输入组件(可@人)

作者: Owen_Lee | 来源:发表于2020-03-08 18:11 被阅读0次

效果图

keyboard_input.gif

使用

 GlobalKey<KeyboardInputState> kbInputKey;

  @override
  void initState() {
    kbInputKey = GlobalKey();
    super.initState();
  }

@override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("键盘输入框+@人示例"),
        ),
        body: KeyboardInput(
          key: kbInputKey,
          mediaQueryData: MediaQuery.of(context),
          builder: (context) => SingleChildScrollView(...),
          unique: "<userId>",
          showContent: "<userName>",
          triggerAtCallback: triggerCallback,
          doneCallback: doneInput,
          rightMenuBuilder: (context) => GestureDetector(
            onTap: () => kbInputKey.currentState.doneInput(),
            child: Icon(
              Icons.send,
              color: Colors.blue,
              size: 20,
            ),
          ),
          decoration: InputDecoration(
            enabledBorder: null,
            disabledBorder: null,
            contentPadding:
                EdgeInsets.only(left: 10, right: 10, top: 6, bottom: 6),
            hintText: "请输入内容,可@人",
            border: InputBorder.none,
          ),
        ));
  }
  
 Future<Map<String, dynamic>> triggerCallback(
      List<Map<String, dynamic>> routerParams) async {
      /// 跳转选择人员页面
    String ret = await Navigator.of(context)
        .push(new MaterialPageRoute(builder: (context) => UserPickerPage()));
    if (ret != null) {
    /// 将关心的信息返回
      Map<String, dynamic> map = {"userName": ret};
      return map;
    }
  }

  Future<bool> doneInput(List<Rule> rules, String value) async {
  /// 这里的Rule.params 属性里 会将刚刚triggerCallback里返回的map带回来
    print("输入完成:  value - $value ,rules.length : ${rules.length}");
    return Future.value(true);
  }

详细使用可见demo,比较简单,见github

相关文章

网友评论

    本文标题:Flutter软键盘输入组件(可@人)

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