Dart 颤振:如何在英雄动画中更改子元素的大小?

Dart 颤振:如何在英雄动画中更改子元素的大小?,dart,flutter,Dart,Flutter,我有一个英雄,它有一个子元素,我想在英雄动画中改变大小(在本例中,我想改变它的纵横比) 以下是我的(精简)构建方法: Widget build(BuildContext build) { final aspect = expanded ? 1.3 : 1.0; return new Hero( child: Column( children: <Widget>[ new AspectRatio( aspect: aspect,

我有一个英雄,它有一个子元素,我想在英雄动画中改变大小(在本例中,我想改变它的纵横比)

以下是我的(精简)构建方法:

Widget build(BuildContext build) {
  final aspect = expanded ? 1.3 : 1.0;
  return new Hero(
    child: Column(
      children: <Widget>[
      new AspectRatio(
        aspect: aspect,
        child: // Stuff that creates a header
      ),
      new Container(
        child: // General descriptions
      )
    ],
  );
}
小部件构建(构建上下文构建){ 最终方面=扩展?1.3:1.0; 回归新英雄( 子:列( 儿童:[ 新方面( 方面:方面,, child://创建标题的内容 ), 新容器( 儿童://一般说明 ) ], ); } 现在,纵横比在这两个值之间跳跃。我的问题是,我是否可以将纵横比与英雄动画一起设置动画,并使其从1.3缓慢移动到1.0,然后再返回

有关完整的示例(其中还显示了英雄动画期间出现的奇怪溢出问题),请参见以下要点:

由于我现在在家,我现在无法尝试您的代码。但我有一个英雄动画示例。请尝试一下

// main.dart class
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart' show timeDilation;
import 'package:flutter_test7/photo_hero.dart';
import 'package:flutter_test7/second_page.dart';

class HeroAnimation extends StatelessWidget {
  Widget build(BuildContext context) {
    timeDilation = 2.5; // 1.0 means normal animation speed.

    return new Scaffold(
      appBar: new AppBar(
        title: const Text('Basic Hero Animation'),
      ),
      body: new Center(
        child: new PhotoHero(
          photo: 'images/flippers-alpha.png',
          width: 300.0,
          onTap: () {
            Navigator.of(context).pushNamed('/second_page');
          },
        ),
      ),
    );
  }
}

void main() {
  runApp(
    new MaterialApp(
      home: new HeroAnimation(),
      routes: <String, WidgetBuilder>{
        '/second_page': (context) => new SecondPage()
      },
    ),
  );
}

// photo_hero.dart class
import 'package:flutter/material.dart';

class PhotoHero extends StatelessWidget {
  const PhotoHero({Key key, this.photo, this.onTap, this.width})
      : super(key: key);

  final String photo;
  final VoidCallback onTap;
  final double width;

  Widget build(BuildContext context) {
    return new SizedBox(
      width: width,
      child: new Hero(
        tag: photo,
        child: new Material(
          color: Colors.transparent,
          child: new InkWell(
            onTap: onTap,
            child: new Image.asset(
              photo,
              fit: BoxFit.contain,
            ),
          ),
        ),
      ),
    );
  }
}

// second_page.dart class
import 'package:flutter/material.dart';
import 'package:flutter_test7/photo_hero.dart';

class SecondPage extends StatefulWidget {
  @override
  _SecondPageState createState() => new _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: const Text('Flippers Page'),
      ),
      body: new Container(
        color: Colors.lightBlueAccent,
        padding: const EdgeInsets.all(16.0),
        alignment: Alignment.topLeft,
        child: new PhotoHero(
          photo: 'images/flippers-alpha.png',
          width: 100.0,
          onTap: () {
            Navigator.of(context).pop();
          },
        ),
      ),
    );
  }
}
//main.dart类
进口“包装:颤振/材料.省道”;
导入“包:flatter/scheduler.dart”显示时间膨胀;
导入“包:flatter_test7/photo_hero.dart”;
导入“package:flatter_test7/second_page.dart”;
类HeroAnimation扩展了无状态小部件{
小部件构建(构建上下文){
TimeDistrict=2.5;//1.0表示正常动画速度。
归还新脚手架(
appBar:新的appBar(
标题:常量文本(“基本英雄动画”),
),
正文:新中心(
孩子:新电影英雄(
照片:'images/flippers alpha.png',
宽度:300.0,
onTap:(){
Navigator.of(context.pushNamed('/second_page');
},
),
),
);
}
}
void main(){
runApp(
新材料聚丙烯(
主页:新HeroAnimation(),
路线:{
“/second_page”:(上下文)=>new SecondPage()
},
),
);
}
//图为英雄级飞镖
进口“包装:颤振/材料.省道”;
类PhotoHero扩展了无状态小部件{
常量PhotoHero({Key,this.photo,this.onTap,this.width})
:super(key:key);
最后的弦乐照片;
最终确认为onTap;
最终双倍宽度;
小部件构建(构建上下文){
返回新的SizedBox(
宽度:宽度,
孩子:新英雄(
标签:照片,
儿童:新材料(
颜色:颜色。透明,
孩子:新墨水井(
onTap:onTap,
子:新建Image.asset(
照片,
适合:BoxFit.contain,
),
),
),
),
);
}
}
//第二页。省道类
进口“包装:颤振/材料.省道”;
导入“包:flatter_test7/photo_hero.dart”;
类SecondPage扩展StatefulWidget{
@凌驾
_SecondPageState createState()=>new_SecondPageState();
}
类_SecondPageState扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:常量文本(“翻转页”),
),
主体:新容器(
颜色:Colors.lightBlueAccent,
填充:常数边集全部(16.0),
对齐:alignment.topLeft,
孩子:新电影英雄(
照片:'images/flippers alpha.png',
宽度:100.0,
onTap:(){
Navigator.of(context.pop();
},
),
),
);
}
}

希望这能有所帮助。

对于这段代码,我不知道问题出在哪里。因此,请发布完整的代码,我将尝试为您提供解决方案。我添加了一个完整示例的要点。即使没有AspectRatio,我也有同样的问题。在我的情况下,它是两个大小不同的图标。我怀疑是否有可能添加缩放动画,因为widget大小是在转换后设置的(但我不确定)。我可以让一个英雄动画与一个布局子项/图像一起工作,但当我组合多个布局子项时,它就不起作用了。@Jeff和你有同样的问题。我在这里提出了一个问题: