我在一个类中插入了一个覆盖,并试图使用超时将它从另一个类中删除。
这是持有覆盖图的类
class Notify extends StatelessWidget{
@override
Widget build(BuildContext context){
return Text('hey');
}
OverlayEntry? _overlayEntry;
void _insertOverlay(BuildContext context) {
_overlayEntry = OverlayEntry(builder: (context) {
return Positioned(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
top: 0,
left: 0,
child: Material(
color: const Color(0xFF0E3311).withOpacity(0.2),
child: GestureDetector(
onTap: ()=>_overlayEntry?.remove(),
child:Icon(Icons.home, size: 100,),
)
),
);
});
Overlay.of(context).insert(_overlayEntry!);
}
void show(BuildContext context){
_insertOverlay(context);
}
void dismiss(){
_overlayEntry?.remove();
}
}
字符串
我插入了覆盖,并通过在另一个类上粘贴图标来设置超时。这是该类。我想在设置同一类中的时间设置后删除它。请参阅下面的类
class Fd extends StatelessWidget{
late Timer rtime;
int _start=4;
int _dstart=4;
Timer timeItOut() {
const oneSec = const Duration(seconds: 1);
rtime = new Timer.periodic(
oneSec,
(Timer timer)
{
if (_start == 1) {
_start = _dstart;
rtime.cancel();
Notify().dismiss();
} else {
_start = _start - 1;
print('still counting down $_start');
}
}
);
return rtime;
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Feeding the nation'),),
body: Container(
child:IconButton(icon: Icon(Icons.food_bank),onPressed: (){timeItOut(); Notify().show(context);},)
),
);
}
}
型
remove方法在类中工作得很好,我通过在构建的覆盖层上粘贴来插入覆盖层,但当我试图在持有覆盖层的类之外实现它时,它不起作用
1条答案
按热度按时间bgtovc5b1#
好吧,经过几个小时的搜索,我没有找到解决方案,所以我不得不重新构建我的代码,看起来像我需要的东西,它对我来说工作得很好。
我想避免在每个类中有太多的文本,我想实现覆盖,必须在一个单独的类中创建覆盖,并在每个需要的类中实现它。
对于那些可能需要它的人,请看我下面的解决方案
覆盖类在这里...
字符串
在下面的类中调用并实现...
型