PiuAnimation,piu~~~的一下,可用作加入購物車、保存截屏等動畫特效
Pub.dev地址 piu_animation
GitHub地址: GitHub
Look

Simulator Screen Recording - iPhone 13 Pro - 2022-03-10 at 13.45.04.gif
無用功能第一彈:
懸停動畫一【異步任務(wù)返回true】:

loading_true.gif
懸停動畫二【異步任務(wù)返回false】:

loading_false.gif
添加方法【第一種,普通的縮放piu動畫】
PiuAnimation.addAnimation(
rootKey, //主Widget GlobalKey
piuWidget, //Child
endOffset, //終點坐標
maxWidth: MediaQuery.of(context).size.width, //Child最大寬度
doSomethingBeginCallBack: () { //動畫開始回調(diào)
print("動畫開始");
},
doSomethingFinishCallBack: () { //動畫結(jié)束回調(diào)
print("動畫結(jié)束");
});
//其中還有動畫時長、懸停最小寬度等屬性設(shè)置
添加方法【第二種,懸停loading動畫】
PiuAnimation.addAnimation(rootKey,piuWidget,endOffset,
maxWidth:MediaQuery.of(context).size.width,
loadingCallback:loadingCallBack,
doSomethingBeginCallBack:(){
print("動畫開始");
},doSomethingFinishCallBack:(success){
if(success){
print("loading 成功 動畫結(jié)束");
}else{
print("loading 失敗 動畫結(jié)束");
}
});
//異步方法定義,demo先通過delayed使用,正常業(yè)務(wù)邏輯中可以通過接口回調(diào)控制true和false
//任務(wù)成功
Future<bool> loadingSuccessFunction() {
return Future.delayed(const Duration(milliseconds: 2000),(){
return true;
});
}
//任務(wù)失敗
Future<bool> loadingFieldFunction() {
return Future.delayed(const Duration(milliseconds: 2000),(){
return false;
});
}
使用方式詳見main.dart
//通過GlobalKey獲取終點坐標,及大小等
//demo終點坐標為按鈕的中心點
RenderBox box = key.currentContext!.findRenderObject() as RenderBox;
var offset = box.localToGlobal(Offset.zero);
Offset endOffset =
Offset(offset.dx + box.size.width / 2, offset.dy + box.size.height / 2);