Flutter 如何控制颤振中的gif动画?
我正在尝试重新启动flatter上的动画gif。gif图像从网络加载时不会出现问题,加载后会显示动画。我需要在点击按钮时重新启动动画 迄今为止: -设定状态 -将密钥更改为其他唯一密钥,并设置状态以重新生成 按照@chemamolins的建议解决方案:Flutter 如何控制颤振中的gif动画?,flutter,flutter-animation,Flutter,Flutter Animation,我正在尝试重新启动flatter上的动画gif。gif图像从网络加载时不会出现问题,加载后会显示动画。我需要在点击按钮时重新启动动画 迄今为止: -设定状态 -将密钥更改为其他唯一密钥,并设置状态以重新生成 按照@chemamolins的建议解决方案: int _robotReloadCount=0; 我做了很多测试,这并不容易。图像由“ImageProvider”缓存,无论您做了什么更改,或者无论您何时调用build()都会从缓存中可用的内容加载图像 显然,你只有两个选择 或者使用新的u
int _robotReloadCount=0;
我做了很多测试,这并不容易。图像由“ImageProvider”缓存,无论您做了什么更改,或者无论您何时调用
build()
都会从缓存中可用的内容加载图像
显然,你只有两个选择
或者使用新的url重建,例如在图像url中添加#which
或者从缓存中删除图像,如下面的代码所示
在这两种情况下,您都需要再次从网络获取图像
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String url = "https://media.giphy.com/media/hIfDZ869b7EHu/giphy.gif";
void _evictImage() {
final NetworkImage provider = NetworkImage(url);
provider.evict().then<void>((bool success) {
if (success) debugPrint('removed image!');
});
setState(() {});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Center(
child: Image.network(url),
),
floatingActionButton: new FloatingActionButton(
onPressed: _evictImage,
child: new Icon(Icons.remove),
),
);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
主页:新建MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
字符串url=”https://media.giphy.com/media/hIfDZ869b7EHu/giphy.gif";
void(图像){
最终NetworkImage提供程序=NetworkImage(url);
provider.execute().then((bool成功){
if(成功)debugPrint('removed image!');
});
setState((){});
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
正文:新中心(
子:Image.network(url),
),
floatingActionButton:新的floatingActionButton(
按下按钮:_\n打开图像,
子:新图标(图标。删除),
),
);
}
}
请提供您正在使用的代码。如果你展示你的代码,我们可以根据它为你提供建议。这是一个一般性的问题,不仅仅与代码有关。我正在添加@chemamolins建议的解决方案。谢谢。这似乎是目前唯一也是最好的选择。在FadeInImage上的url后添加了一个?reloadcount。只需保留字节并使用MemoryImage
即可避免从网络重新获取。
onTapRobot() async{
setState(() {
this._robotReloadCount++;
});
}
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String url = "https://media.giphy.com/media/hIfDZ869b7EHu/giphy.gif";
void _evictImage() {
final NetworkImage provider = NetworkImage(url);
provider.evict().then<void>((bool success) {
if (success) debugPrint('removed image!');
});
setState(() {});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Center(
child: Image.network(url),
),
floatingActionButton: new FloatingActionButton(
onPressed: _evictImage,
child: new Icon(Icons.remove),
),
);
}
}