我必须显示一个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);
}
});
},