1

我必须显示一个bottomModelSheet。此底部模型表包含条款和条件详细信息以及底部的“接受条款和条件”按钮(默认情况下禁用)。

当用户到达滚动的末尾时,我需要启用此接受条款和条件

所以为了实现上述场景,我使用了带有 SingleChildScrollView 的 bottomModelSheet。

我的 bottomModelSheet 代码如下:

  mFormBottomSheet(BuildContext aContext) {
print(reachEnd);
showModalBottomSheet(
  backgroundColor: Colors.transparent,
  context: aContext,
  isScrollControlled: true,
  builder: (BuildContext context) {
    return DraggableScrollableSheet(
          initialChildSize: 0.90, //set this as you want
          maxChildSize: 0.90, //set this as you want
          minChildSize: 0.90, //set this as you want
          expand: true,
          builder: (context, scrollController) {
            return new Scaffold(
              body: new SingleChildScrollView(
                      controller: _controller,
                      child: new Column(
                        children: <Widget>[
                          new Center(
                            child: new Html(
                              data: html,
                            ),
                          ),
                        ],
                      ),
                    ),
                  bottomNavigationBar: Container(
                    margin: EdgeInsets.only(left:16.0, right: 16.0, top: 24.0, bottom: 24.0),
                    child: ButtonTheme(
                        height: 45.0,
                        child: RaisedButton(
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(8.0),
                          side: BorderSide(color: blue20Color)),
                        onPressed: reachEnd
                            ? () {   
                                  finish(context);
                                  setState(() {
                                    isItButtonClick = true;
                                  });
                              }
                            : null,
                        color: blue20Color,
                        textColor: Colors.white,
                        child: Text("Accept the Terms and Conditions".toUpperCase(),
                          style: TextStyle(fontSize: 14)),
                      ),
                    ),
                  ),  
            );
          }
    );
  },
);
// future.then((void value) => _closeModal(value));

}

我已经使用 ScrollController 来确定滚动是否到达末尾?

final ScrollController _controller = new ScrollController();
  @override
  void initState() {
    _controller.addListener(_listener);
    super.initState();
  }

  @override
  void dispose() {
    _controller.removeListener(_listener);
    _controller.dispose();
    super.dispose();
  }

  _listener() {
    final maxScroll = _controller.position.maxScrollExtent;
    final minScroll = _controller.position.minScrollExtent;
    if (_controller.offset >= maxScroll) {
      setState(() {
        reachEnd = true;
      });
    }

    if (_controller.offset <= minScroll) {
      setState(() {
        reachEnd = false;
      });
    }
  }

然而,当滚动到达结束时,reachEnd变量变为真, mFormBottomSheet函数没有被调用。

当我手动热重新加载时,mFormBottomSheet函数被调用并且“接受条款和条件”按钮被启用。

那么如何在滚动到末尾时调用mFormBottomSheet函数。

请找到下面的图片以供参考。Onclick复选框我必须显示modelBottomSheet。所以这个 mFormBottomSheet(context); 每当状态改变时都不会被调用。只有当我单击 CheckboxListTile 时才会发生这种情况。

在此处输入图像描述

                  CheckboxListTile(
                    contentPadding: EdgeInsets.all(0),
                    checkColor: Colors.white,
                    controlAffinity: ListTileControlAffinity.leading,
                    value: isChecked10,
                    onChanged: (checked) {
                      setState(() {
                        if(checked) {
                          mFormBottomSheet(context);
                        } 
                      });
                    },
4

1 回答 1

0

调用setState使您的小部件重建。你调用mFormBottomSheet()你的build()方法吗?

于 2020-12-26T21:17:53.387 回答