- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Flutter tween 基本动画在 FutureBuilder
中不起作用
我已经使用 gridview.builder 创建了一个图片库页面,但出于某种原因,动画在 futurebuilder
中不起作用。我直接在 body 容器内的静态图像上尝试了相同的动画,它工作得非常好。需要一些方法来为 futurebuilder 中的网络图像设置动画。
class _GalleryGridState extends State<GalleryGrid>
with TickerProviderStateMixin {
AnimationController _controller;
Animation _squeezeOutAnimation, transformationAnim;
List<GalleryModel> lists = List();
Future<List<GalleryModel>> fetchPost() async {
final response =
await http.get("https://jsonplaceholder.typicode.com/photos");
if (response.statusCode == 200) {
var datas = json.decode(response.body);
lists = (datas as List)
.map((data) => new GalleryModel.fromJson(data))
.toList();
return lists;
} else {
throw Exception("Failed to load photos");
}
}
@override
void initState() {
super.initState();
_controller =
AnimationController(duration: Duration(seconds: 3), vsync: this);
transformationAnim = BorderRadiusTween(
begin: BorderRadius.circular(150.0),
end: BorderRadius.circular(0.0))
.animate(CurvedAnimation(parent: _controller, curve: Curves.ease));
_squeezeOutAnimation = Tween<double>(begin: 150.0, end: 1000.0)
.animate(CurvedAnimation(parent: _controller, curve: Curves.ease));
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: fetchPost(),
builder: (context, data) {
switch (data.connectionState) {
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
default:
return GridView.builder(
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
itemCount: lists.length,
itemBuilder: (BuildContext context, int index) {
return Stack(
children: <Widget>[
Container(
child: Card(
shape: BeveledRectangleBorder(
borderRadius: transformationAnim.value),
elevation: 10.0,
child: GestureDetector(
onTap: () {
_controller.forward();
},
child: Container(
width: _squeezeOutAnimation.value,
height: _squeezeOutAnimation.value,
child: Image.network(
lists[index].thumbnailUrl,
fit: BoxFit.fill,
width: _squeezeOutAnimation.value,
),
),
),
),
),
])
最佳答案
动画正在运行,但您的构建小部件未更新,即重建
尝试此代码,如果它按您预期的那样工作,请告诉我。
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';
void main() => runApp(GalleryGrid());
class GalleryGrid extends StatefulWidget {
@override
_GalleryGridState createState() => _GalleryGridState();
}
class GalleryModel {
final String thumbnailUrl;
GalleryModel(this.thumbnailUrl);
factory GalleryModel.fromJson(Map<String, dynamic> data) {
return GalleryModel(data['thumbnailUrl']);
}
}
class _GalleryGridState extends State<GalleryGrid>
{
List<GalleryModel> lists = List();
Future<List<GalleryModel>> fetchPost() async {
final response =
await http.get("https://jsonplaceholder.typicode.com/photos");
if (response.statusCode == 200) {
var datas = json.decode(response.body);
lists = (datas as List)
.map((data) => new GalleryModel.fromJson(data))
.toList();
return lists;
} else {
throw Exception("Failed to load photos");
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: FutureBuilder(
future: fetchPost(),
builder: (context, data) {
switch (data.connectionState) {
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
default:
return new GridWidget(lists: lists);
}
},
),
),
);
//),
//);
}
}
class GridWidget extends StatefulWidget {
const GridWidget({
Key key,
@required this.lists,
}) ;
final List<GalleryModel> lists;
@override
GridWidgetState createState() {
return new GridWidgetState();
}
}
class GridWidgetState extends State<GridWidget> with TickerProviderStateMixin{
AnimationController _controller;
Animation _squeezeOutAnimation, transformationAnim;
@override
void initState() {
super.initState();
_controller =
AnimationController(duration: Duration(seconds: 3), vsync: this);
transformationAnim = BorderRadiusTween(
begin: BorderRadius.circular(150.0),
end: BorderRadius.circular(0.0))
.animate(CurvedAnimation(parent: _controller, curve: Curves.ease))
..addListener(() {
setState(() {});
});
_squeezeOutAnimation = Tween<double>(begin: 150.0, end: 1000.0)
.animate(CurvedAnimation(parent: _controller, curve: Curves.ease));
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
@override
Widget build(BuildContext context) {
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2),
itemCount: widget.lists.length,
itemBuilder: (BuildContext context, int index) {
return Stack(children: <Widget>[
Container(
child: Card(
shape: BeveledRectangleBorder(
borderRadius: transformationAnim.value),
elevation: 10.0,
child: GestureDetector(
onTap: () {
print('Card $index is pressed');
_controller.reset();
_controller.forward();
},
child: Container(
width: _squeezeOutAnimation.value,
height: _squeezeOutAnimation.value,
child: Image.network(
widget.lists[index].thumbnailUrl,
fit: BoxFit.fill,
width: _squeezeOutAnimation.value,
),
),
),
),
),
]);
},
);
}
}
关于dart - Flutter tween 基本动画在 `FutureBuilder` 内部不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53532792/
我正在尝试更改 Sprite 的 y 位置,翻译有效,我的问题是它忽略了我的目标并每次都转到一个特定点,我不明白为什么 Sprite 访问器代码: public class SpriteAccesso
所以,当我阅读它时 here , TWEEN.update(#) 应该在 # 处渲染动画帧,对吗?因此,如果我运行 TWEEN.update(100),我应该在每次运行 TWEEN.update(10
试图让相机在按下按钮时围绕地球平滑旋转到新位置。我已经完成了位置证明,以检查坐标是否正常 camera.position.set(posX,posY,posZ); camera.lookAt(new
之间有什么区别 ColorTween vs Tween 和 IntTween vs Tween 如果一切都能由Tween处理,为什么这些XXXTween存在? 最佳答案 tldr;您可以使用自己的Tw
在android开发中,animation是用来给控件制作效果的。大多数的控件都可以用这个类,这个类包含了4种基本动作,分别为移动,旋转,淡入淡出,缩放。在使用animation时,可以在.java
我尝试使用 Tweens 使用kineticjs 使文本淡入淡出,我成功地使文本随它们一起移动,但文本似乎没有淡出。 如果有人能解释我做错了什么,那就太好了 这是一个jsfiddle ,当出现“补间完
我有一个 div,我想将其永远移动到向下位置,Tween 重复 -1 从元素开始移动的位置开始。我希望它像循环一样继续。 var tlMain = new TimelineMax({repeat:0}
我正在使用通用补间引擎。到目前为止,我只处理了一种访问器( Sprite 访问器)。但是,现在我需要两个访问器。第二种对象是 Sprite 的扩展。我尝试为其注册一个新的访问器,但补间管理器似乎使用
我正在尝试简化相机旋转以查看图表中选定的对象。 到目前为止,我已经 fourd.render_loop.push(() => TWEEN.update()); fourd.intersect_call
我有一个变量正在增加,比如说从 0 到 99。 然后我有一个div,我想以与增加变量相同的速率移动,但我只想定义移动的两端(例如从上到下移动,我只定义最上面的位置和最下面的位置)。当主变量将其值从 0
function moveCameraTo(position, duration) { var tween = new TWEEN.Tween( camera.position
我正在尝试使用 Tween.js 库。但是,当我的 javascript 代码运行时,我在 degub 控制台中收到一个引用错误,指出未定义 TWEEN。我的代码如下 function armTwee
我仍然无法满足最基本的需求。我想要 2 个按钮:一个运行将图像移动 50 像素的补间动画,另一个按钮在该图像上运行逐帧动画。 补间动画完成后,逐帧动画在错误的位置运行。诡异的。我正在使用 FillAf
我正在使用 Android 平台编写棋盘游戏。我正在使用 Tween Animation,特别是 TranslateAnimation 工具来创建在屏幕上移动 ImageView 对象的动画。我希望
是否有一个类似于 SpriteKit 中的 SKAction 的 CCAction 会在 Action 持续期间被多次调用(因此您可以创建基于流逝时间的自定义效果?) 我找到了 CCActionCal
我正在尝试轻松创建补间(动画) - 我对元素的 x 位置进行动画处理没有问题,但我尝试给它一个缓动。我按照示例代码 here 中所示的适当顺序编写代码。 这是我的代码: this.timeline.a
我一直在尝试围绕世界轴旋转立方体一段时间,但它没有给出准确的结果。回答我的上一个问题 Rotate object around world axis with tween.js帮助我完成了旋转,但没有
我正在尝试在我的网站上使用 ScrollMagic.js 来显示文本段落。我的脚本已经可以让文本淡出,但我想在文本淡入时创建一些暂停,一旦效果结束,滚动就会继续。官方有这样的东西website .标题
我是 LibGDX 和 Android 的新手。顺便说一句,抱歉我的英语不好。 这是我的问题。我只想用 libgdx 制作启动画面,我在 youtube 上观看了 Dustin Riley 的 lib
本文实例讲述了android动画之补间动画。分享给大家供大家参考,具体如下: 前面讲了《android动画之逐帧动画(frame animation)》,今天就来详细讲解一下tween动画的使用。
我是一名优秀的程序员,十分优秀!