初始化,显示浮层
void showDumbbellOverlay() {
overlayFloat = OverlayEntry(
builder: (context) => MyDetailOverlay(
list: actionList,
closeOverlyBlock: () => closeOverlayView(),
),
);
Overlay.of(context).insert(overlayFloat);
}
移除浮层
void closeOverlayView() {
overlayFloat.remove();
overlayFloat = null;
}
浮层组件, 该浮层是一个毛玻璃样式的浮层框
class MyDetailOverlay extends StatefulWidget {
final List<DataModel> list;
final VoidCallback closeOverlyBlock;
const MyDetailOverlay({Key key, this.list, this.closeOverlyBlock})
: super(key: key);
@override
_MyDetailOverlayState createState() => _MyDetailOverlayState();
}
class _MyDetailOverlayState extends State<MyDetailOverlay> {
List<DataModel> dataArray;
@override
void initState() {
setState(() {
dataArray = widget.list;
});
super.initState();
}
void closeOverlayView() {
setState(() {
if (widget.closeOverlyBlock != null) {
widget.closeOverlyBlock();
}
});
}
@override
Widget build(BuildContext context) {
return Positioned.fill(
child: Material(
color: Colors.transparent,
child: ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
child: GestureDetector(
onTap: () => closeOverlayView(),
child: Opacity(
opacity: 0.9,
child: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
color: Color(0xFF121212),
child: Stack(
children: [
Container(
color: Colors.white, //实现具体内容
),
Container(
color: Colors.red, //实现具体内容
),
],
),
),
),
),
),
),
),
);
}
}