flutter加水印的问题
在page中加入水印后,弹出的弹框上没有显示水印
flutter有组件可以实现水印在整个视图的最上层吗?
肯定有组件啊,不难
给你写个在整个试图最上层添加水印的
import 'package:flutter/material.dart';
class Watermark extends StatelessWidget {
final Widget child;
final String text;
Watermark({required this.child, required this.text});
@override
Widget build(BuildContext context) {
return Stack(
children: [
child,
Positioned.fill(
child: Opacity(
opacity: 0.3,
child: Center(
child: Transform.rotate(
angle: -0.785398, // 旋转角度,这里是45度
child: Text(
text,
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.bold,
color: Colors.grey,
),
),
),
),
),
),
],
);
}
}
在Flutter中,可以使用Stack来实现弹框上添加水印的效果。首先,我们需要创建一个Stack,将弹框作为Stack的子元素,然后在Stack中添加一个Positioned元素,用来放置水印。
以下是一个示例代码:
import 'package:flutter/material.dart';
class WatermarkDialog extends StatelessWidget {
final String content;
WatermarkDialog({this.content});
@override
Widget build(BuildContext context) {
return Stack(
children: [
AlertDialog(
title: Text('弹框标题'),
content: Text(content),
actions: [
FlatButton(
child: Text('取消'),
onPressed: () {
Navigator.of(context).pop();
},
),
FlatButton(
child: Text('确定'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
),
Positioned(
top: 0,
left: 0,
child: Container(
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.5),
),
child: Text(
'水印',
style: TextStyle(
fontSize: 24.0,
fontWeight: FontWeight.bold,
color: Colors.grey,
),
),
),
),
],
);
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Watermark Dialog',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Watermark Dialog'),
),
body: Center(
child: RaisedButton(
child: Text('显示弹框'),
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return WatermarkDialog(
content: '弹框内容',
);
},
);
},
),
),
),
);
}
}
在上述示例代码中,我们创建了一个WatermarkDialog小部件,它继承自StatelessWidget。在WatermarkDialog中,我们使用Stack来包裹AlertDialog和水印。水印是一个Positioned元素,它位于Stack的左上角,并使用Container来实现水印的样式。
在MyApp中,我们创建了一个按钮,当按钮被点击时,显示弹框。弹框使用showDialog函数来显示WatermarkDialog。
注意:在实际应用中,你可能需要根据实际需求来调整水印的样式和位置。