Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何控制颤振中的gif动画?_Flutter_Flutter Animation - Fatal编程技术网

Flutter 如何控制颤振中的gif动画?

Flutter 如何控制颤振中的gif动画?,flutter,flutter-animation,Flutter,Flutter Animation,我正在尝试重新启动flatter上的动画gif。gif图像从网络加载时不会出现问题,加载后会显示动画。我需要在点击按钮时重新启动动画 迄今为止: -设定状态 -将密钥更改为其他唯一密钥,并设置状态以重新生成 按照@chemamolins的建议解决方案: int _robotReloadCount=0; 我做了很多测试,这并不容易。图像由“ImageProvider”缓存,无论您做了什么更改,或者无论您何时调用build()都会从缓存中可用的内容加载图像 显然,你只有两个选择 或者使用新的u

我正在尝试重新启动flatter上的动画gif。gif图像从网络加载时不会出现问题,加载后会显示动画。我需要在点击按钮时重新启动动画

迄今为止: -设定状态 -将密钥更改为其他唯一密钥,并设置状态以重新生成

按照@chemamolins的建议解决方案:

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),
      ),
    );
  }
}