Flutter特效插件eeffects的使用
Flutter特效插件eeffects的使用
EEffects
eeffects
是一个提供多种效果的 Flutter 包,包括:
- 点光源
- 光束
- 火焰
- 雷电
示例
示例1:基础用法
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
EScene? scene;
MyApp() {
scene = EScene(
width: 0,
height: 0,
effects: [
ERadialLight(
ERelativePos(0.3, 0.1),
ERelative(100, ERelative.absolute),
EGradient([
EColorShift([Color.fromARGB(150, 255, 255, 255)], 0)
]),
0,
0,
ERelative(30, ERelative.absolute),
ERelative(2, ERelative.absolute),
0.1,
1),
ELightBeam(
ERelativePos(0.5, 0.5),
EVector2D(1, 0),
ERelative(0.6, ERelative.widthAndHeightRelative),
ERelative(10, ERelative.absolute),
ERelative(0, ERelative.absolute),
EGradient([
EColorShift([Color.fromARGB(150, 255, 255, 255)], 0),
]),
1,
0,
ERelative(100, ERelative.absolute),
ERelative(2, ERelative.absolute),
0.1,
1,
name: "Example Beam")
],
darkness: EColorShift([Color.fromARGB(255, 0, 0, 0)], 0),
afterUpdate: () {
EEffect effect = scene!.getEffect("Example Beam")!;
if (effect is ELightBeam) {
ELightBeam ourLightBeam = effect;
//相当于 mousePos - ourLightBeam.direction
EVector2D newDirection = mousePos.getAdd(ourLightBeam.position
.getAbsolutePair(Size(scene!.width, scene!.height))
.getMultiply(-1));
ourLightBeam.direction = newDirection;
}
},
beforeUpdate: () {},
);
}
EVector2D mousePos = EVector2D(0, 0);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(body: LayoutBuilder(builder: (context, size) {
scene!.resize(size.biggest.width, size.biggest.height);
return MouseRegion(
child: Stack(
children: [
Container(
width: 600,
height: 100,
color: Colors.pink,
),
Positioned(
width: 200,
height: 200,
top: 800,
left: 100,
child: Container(
color: Colors.red,
)),
Positioned(
width: 400,
height: 400,
top: 800,
left: 800,
child: Container(
color: Colors.blue,
)),
Positioned(
width: 300,
height: 300,
top: 200,
left: 1700,
child: Container(color: Colors.black)),
Container(
child: scene,
)
],
),
onHover: (PointerHoverEvent pointerHoverEvent) {
mousePos = EVector2D(
pointerHoverEvent.position.dx, pointerHoverEvent.position.dy);
},
);
})));
}
}
示例2:跟随鼠标移动并变色的光束
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
EScene? scene;
MyApp() {
scene = EScene(
width: 0,
height: 0,
effects: [
ELightBeam(
ERelativePos(0.5, 0.5),
EVector2D(1, 0),
ERelative(0.5, ERelative.widthAndHeightRelative),
ERelative(10, ERelative.absolute),
ERelative(0, ERelative.absolute),
EGradient([
EColorShift([Colors.red, Colors.blue], 0.01),
EColorShift([Colors.blue, Colors.red], 0.01)
]),
1,
0,
ERelative(100, ERelative.absolute),
ERelative(2, ERelative.absolute),
0.1,
1,
name: "Example Beam")
],
darkness: EColorShift([Color.fromARGB(255, 0, 0, 0)], 0),
afterUpdate: () {
EEffect effect = scene!.getEffect("Example Beam")!;
if (effect is ELightBeam) {
ELightBeam ourLightBeam = effect;
//相当于 mousePos - ourLightBeam.direction
EVector2D newDirection = mousePos.getAdd(ourLightBeam.position
.getAbsolutePair(Size(scene!.width, scene!.height))
.getMultiply(-1));
ourLightBeam.direction = newDirection;
}
},
beforeUpdate: () {},
);
}
EVector2D mousePos = EVector2D(0, 0);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(body: LayoutBuilder(builder: (context, size) {
scene!.resize(size.biggest.width, size.biggest.height);
return MouseRegion(
child: scene,
onHover: (PointerHoverEvent pointerHoverEvent) {
mousePos = EVector2D(
pointerHoverEvent.position.dx, pointerHoverEvent.position.dy);
},
);
})));
}
}
示例3:火焰效果
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
EScene? scene;
MyApp() {
scene = EScene(
width: 0,
height: 0,
effects: [
EFire(
EGradient([
EColorShift([Colors.red], 0),
EColorShift([Colors.orange.shade800], 0),
EColorShift([Colors.orange.shade600], 0)
]),
EGradient([
EColorShift([Color.fromARGB(10, 100, 100, 100)], 0)
]),
EGradient([
EColorShift([Color.fromARGB(20, 140, 100, 60)], 0),
EColorShift([Color.fromARGB(10, 140, 100, 60)], 0)
]),
1,
0,
ERelativePos(0.5, 0.5),
EVector2D(0, -1),
ERelative(30, ERelative.absolute),
ERelative(40, ERelative.absolute),
ERelative(2, ERelative.absolute),
ERelative(40, ERelative.absolute),
ERelative(150, ERelative.absolute),
ERelative(8, ERelative.absolute)),
],
darkness: EColorShift([Color.fromARGB(255, 0, 0, 0)], 0),
afterUpdate: () {},
beforeUpdate: () {},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(body: LayoutBuilder(builder: (context, size) {
scene!.resize(size.biggest.width, size.biggest.height);
return Container(
child: scene,
);
})));
}
}
示例4:点击屏幕产生雷电
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
EScene? scene;
MyApp() {
scene = EScene(
width: 0,
height: 0,
effects: [
ELightning(
ERelativePos(0.5, 0),
0.02,
ERelative(1, ERelative.absolute),
ERelative(20, ERelative.absolute),
ERelative(600, ERelative.absolute),
50,
5,
EColorShift([Color.fromARGB(255, 80, 0, 255)], 0),
true,
8,
1,
name: "Example Lightning"),
],
darkness: EColorShift([Color.fromARGB(255, 0, 0, 0)], 0),
afterUpdate: () {},
beforeUpdate: () {},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(body: LayoutBuilder(builder: (context, size) {
scene!.resize(size.biggest.width, size.biggest.height);
return GestureDetector(
child: scene,
onTapDown: (TapDownDetails tapDownDetails) {
EEffect effect = scene!.getEffect("Example Lightning")!;
if (effect is ELightning) {
ELightning ourLightning = effect;
ourLightning.buildLightningOnNextTickATTarget(ERelativePair(
ERelative(tapDownDetails.globalPosition.dx, ERelative.absolute),
ERelative(
tapDownDetails.globalPosition.dy, ERelative.absolute)));
ourLightning.fireLightningIn(1);
}
},
);
})));
}
}
更多关于Flutter特效插件eeffects的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter特效插件eeffects的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用eeffects
(假设这是一个提供特效的插件,请注意eeffects
并非一个官方或广泛认可的Flutter插件名,以下代码示例为假设性的)的简单示例。如果eeffects
是一个实际的Flutter插件,你需要查阅其官方文档以获取准确的API和用法。
首先,确保你已经将eeffects
插件添加到了你的pubspec.yaml
文件中:
dependencies:
flutter:
sdk: flutter
eeffects: ^x.y.z # 替换为实际的版本号
然后,运行flutter pub get
来安装插件。
接下来,我们可以在Flutter项目中使用这个插件。以下是一个简单的例子,展示如何在一个Flutter应用中使用eeffects
提供的某个特效(假设该特效名为BlurEffect
)。
import 'package:flutter/material.dart';
import 'package:eeffects/eeffects.dart'; // 假设eeffects插件的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('EEffects Demo'),
),
body: Center(
child: BlurEffectDemo(),
),
),
);
}
}
class BlurEffectDemo extends StatefulWidget {
@override
_BlurEffectDemoState createState() => _BlurEffectDemoState();
}
class _BlurEffectDemoState extends State<BlurEffectDemo> with SingleTickerProviderStateMixin {
bool isBlurred = false;
void toggleBlur() {
setState(() {
isBlurred = !isBlurred;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
BlurEffect(
enabled: isBlurred,
sigmaX: 10.0,
sigmaY: 10.0,
child: Image.network(
'https://example.com/your-image.jpg', // 替换为你的图片URL
fit: BoxFit.cover,
width: 300,
height: 300,
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: toggleBlur,
child: Text('Toggle Blur'),
),
],
);
}
}
// 假设BlurEffect是eeffects插件提供的一个Widget
class BlurEffect extends StatelessWidget {
final bool enabled;
final double sigmaX;
final double sigmaY;
final Widget child;
BlurEffect({
required this.enabled,
required this.sigmaX,
required this.sigmaY,
required this.child,
});
@override
Widget build(BuildContext context) {
// 这里我们假设eeffects插件提供了一个applyBlur函数,用于应用模糊效果
// 实际使用中,你需要根据插件提供的API来实现
return enabled
? BackdropFilter(
filter: ImageFilter.blur(sigmaX: sigmaX, sigmaY: sigmaY),
child: child,
)
: child;
}
}
注意:
- 上述代码中的
BlurEffect
类是一个假设性的实现,用于展示如何在Flutter中使用特效。实际的eeffects
插件可能会有不同的API和用法。 ImageFilter.blur
是Flutter自带的一个模糊效果实现,这里用它来模拟BlurEffect
的效果。如果eeffects
插件提供了更复杂的特效,你需要查阅其文档并相应地调整代码。BackdropFilter
用于在子Widget上应用滤镜效果。
确保查阅eeffects
插件的官方文档以获取准确的使用方法和API。如果eeffects
不是一个真实存在的插件,你可能需要寻找其他提供类似功能的Flutter插件或自己实现所需的特效。