我制作了一个聊天应用程序,但我在它的聊天屏幕上遇到了问题,因为我使用 emoji_picker_flutte 包来显示表情符号板,并且我已经实现了它,以便每当表情符号板位于 bool 变量上时都是 true ,反之亦然如果用户首先使用后退导航手势,表情符号板将消失,然后如果用户再次使用后退导航手势,则页面将弹出。
使用 WillPopScope 时没有问题,但最近使用 PopScope 时没有问题,我尝试将整个代码放在
onPopInvoked
中,就像迁移所说的那样,将 canPop
设置为 false
但它不起作用。
我还尝试将整个代码使用到返回类型为 bool
的单独函数中,并在 canPop
上使用 t 函数,但它失败了,因为在使用这种方式表情符号板时,当该页面打开时 canPop
一直在运行甚至没有出现,因为当按下表情符号按钮并且变量变为 true
时,它会立即变为 false
,而一切正常工作。
bool _willpop() {
if (_showEmoji) {
setState(() => _showEmoji = !_showEmoji);
return false;
} else {
return true;
}
}
PopScope (
canPop = _willpop();
child:...
)
其他方式
_willpop(bool p) {
if (p) return;
if (_showEmoji) {
change();
return false;
} else {
return true;
}
}
PopScope (
canPop: false,
onPopInvoked: (didpop) => _willpop(didpop),
child:...
)
这两种方法都不起作用,任何人都可以建议更好的方法吗
在第二种方式中,如果 p 为真,则不返回任何内容。只需删除该行即可。
if (p) return;
现在,如果 _showEmoji 为 true,则只需反转其值并调用 setState,但如果为 false,则使用 Navigator.pop(context) 来弹出
_willpop(bool p) {
if (_showEmoji) {
change();
} else {
Navigator.pop(context);
}
}
不确定为什么你的第一种方法不起作用。现在无法测试,但尝试上面的第二种方法,它会起作用。