-
Notifications
You must be signed in to change notification settings - Fork 137
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
17 changed files
with
731 additions
and
426 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
class FadeAnimation extends StatelessWidget { | ||
const FadeAnimation({ | ||
Key? key, | ||
required this.controller, | ||
required this.child, | ||
}) : super(key: key); | ||
|
||
final AnimationController controller; | ||
|
||
final Widget child; | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return FadeTransition( | ||
opacity: CurvedAnimation(parent: controller, curve: Curves.linear), | ||
child: child, | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
import '../attach_dialog_widget.dart'; | ||
|
||
class HighlightMaskAnimation extends StatelessWidget { | ||
const HighlightMaskAnimation({ | ||
Key? key, | ||
required this.controller, | ||
required this.maskWidget, | ||
required this.maskColor, | ||
required this.usePenetrate, | ||
required this.targetOffset, | ||
required this.targetSize, | ||
required this.highlightBuilder, | ||
}) : super(key: key); | ||
|
||
final AnimationController controller; | ||
|
||
final Widget? maskWidget; | ||
|
||
final Color maskColor; | ||
|
||
final bool usePenetrate; | ||
|
||
final Offset targetOffset; | ||
final Size targetSize; | ||
|
||
final HighlightBuilder highlightBuilder; | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
//handle mask | ||
late Widget mask; | ||
if (usePenetrate) { | ||
mask = Container(); | ||
} else if (maskWidget != null) { | ||
mask = maskWidget!; | ||
} else { | ||
mask = ColorFiltered( | ||
colorFilter: ColorFilter.mode( | ||
// mask color | ||
maskColor, | ||
BlendMode.srcOut, | ||
), | ||
child: Stack(children: [ | ||
Container( | ||
decoration: BoxDecoration( | ||
// any color | ||
color: Colors.white, | ||
backgroundBlendMode: BlendMode.dstOut, | ||
), | ||
), | ||
|
||
//dissolve mask, highlight location | ||
highlightBuilder(targetOffset, targetSize) | ||
]), | ||
); | ||
} | ||
|
||
return FadeTransition( | ||
opacity: CurvedAnimation(parent: controller, curve: Curves.linear), | ||
child: mask, | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
class MaskAnimation extends StatelessWidget { | ||
const MaskAnimation({ | ||
Key? key, | ||
required this.controller, | ||
required this.maskWidget, | ||
required this.maskColor, | ||
required this.usePenetrate, | ||
}) : super(key: key); | ||
|
||
final AnimationController controller; | ||
|
||
final Widget? maskWidget; | ||
|
||
final Color maskColor; | ||
|
||
final bool usePenetrate; | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return FadeTransition( | ||
opacity: CurvedAnimation(parent: controller, curve: Curves.linear), | ||
child: (maskWidget != null && !usePenetrate) | ||
? maskWidget | ||
: Container(color: usePenetrate ? null : maskColor), | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
class ScaleAnimation extends StatelessWidget { | ||
const ScaleAnimation({ | ||
Key? key, | ||
required this.controller, | ||
required this.child, | ||
this.alignment, | ||
}) : super(key: key); | ||
|
||
final AnimationController controller; | ||
|
||
final Widget child; | ||
|
||
final Alignment? alignment; | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return ScaleTransition( | ||
alignment: alignment ?? Alignment(0, 0), | ||
scale: CurvedAnimation(parent: controller, curve: Curves.linear), | ||
child: child, | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
class SizeAnimation extends StatelessWidget { | ||
const SizeAnimation({ | ||
Key? key, | ||
required this.controller, | ||
required this.alignment, | ||
required this.child, | ||
}) : super(key: key); | ||
|
||
final AnimationController controller; | ||
|
||
final AlignmentGeometry alignment; | ||
|
||
final Widget child; | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return SizeTransition( | ||
axis: _handleAxis(), | ||
sizeFactor: controller, | ||
child: child, | ||
); | ||
} | ||
|
||
Axis _handleAxis() { | ||
var axis = Axis.vertical; | ||
|
||
if (alignment == Alignment.centerLeft || | ||
alignment == Alignment.centerRight) { | ||
axis = Axis.horizontal; | ||
} | ||
return axis; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
class SlideAnimation extends StatefulWidget { | ||
const SlideAnimation({ | ||
Key? key, | ||
required this.alignment, | ||
required this.controller, | ||
required this.child, | ||
}) : super(key: key); | ||
|
||
final AlignmentGeometry alignment; | ||
|
||
final Widget child; | ||
|
||
final AnimationController controller; | ||
|
||
@override | ||
State<SlideAnimation> createState() => _SlideAnimationState(); | ||
} | ||
|
||
class _SlideAnimationState extends State<SlideAnimation> | ||
with TickerProviderStateMixin { | ||
late Tween<Offset> _tween; | ||
|
||
@override | ||
void initState() { | ||
_dealContentAnimate(); | ||
super.initState(); | ||
} | ||
|
||
@override | ||
void didUpdateWidget(covariant SlideAnimation oldWidget) { | ||
if (oldWidget.child != widget.child) _dealContentAnimate(); | ||
super.didUpdateWidget(oldWidget); | ||
} | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return SlideTransition( | ||
position: _tween.animate(widget.controller), | ||
child: widget.child, | ||
); | ||
} | ||
|
||
///处理下内容widget动画方向 | ||
void _dealContentAnimate() { | ||
AlignmentGeometry? alignment = widget.alignment; | ||
var _offset = Offset(0, 0); | ||
|
||
if (alignment == Alignment.bottomCenter || | ||
alignment == Alignment.bottomLeft || | ||
alignment == Alignment.bottomRight) { | ||
//靠下 | ||
_offset = Offset(0, 1); | ||
} else if (alignment == Alignment.topCenter || | ||
alignment == Alignment.topLeft || | ||
alignment == Alignment.topRight) { | ||
//靠上 | ||
_offset = Offset(0, -1); | ||
} else if (alignment == Alignment.centerLeft) { | ||
//靠左 | ||
_offset = Offset(-1, 0); | ||
} else if (alignment == Alignment.centerRight) { | ||
//靠右 | ||
_offset = Offset(1, 0); | ||
} else { | ||
//居中使用缩放动画,空结构体,不需要操作 | ||
} | ||
|
||
_tween = Tween<Offset>(begin: _offset, end: Offset.zero); | ||
} | ||
} |
Oops, something went wrong.