Flutter SizeTransition和PageRouteBuilder无法正常工作

Phu*_*eat 2 flutter

我正在尝试让我的列表项展开全屏显示。根据材料推荐。PageRouterBuilder看起来很可行,SlideTransition和ScaleTransition都很好用,但是SizeTransition似乎不起作用。当我单击列表项时,新页面立即显示。我希望它会在一开始就被裁剪掉。

下面的代码。

在此先感谢您的帮助!

import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    timeDilation = 10.0;
    return new MaterialApp(
      title: 'Flutter Demo',
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(title: new Text("Test Expand")),
      body: ListView(children: <Widget>[
        new ListTile(
            title: new Text("Todo 1"),
            onTap: () {
              _onTap(context, 1);
            }),
        new ListTile(
            title: new Text("Todo 2"),
            onTap: () {
              _onTap(context, 2);
            })
      ]),
    );
  }

  void _onTap(BuildContext context, int i) {
    Navigator.of(context).push(new PageRouteBuilder(pageBuilder:
            (BuildContext context, Animation animation,
                Animation secondaryAnimation) {
          return TaskPage(task: i);
        }, transitionsBuilder: (BuildContext context,
            Animation<double> animation,
            Animation<double> secondaryAnimation,
            Widget child) {
          return new SizeTransition(sizeFactor: animation, child: child);
        }));
  }
}

class TaskPage extends StatelessWidget {
  final int task;

  TaskPage({this.task});

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(title: new Text("Edit")),
        body: new Text("Task " + task.toString()));
  }
}
Run Code Online (Sandbox Code Playgroud)

Rém*_*let 5

页面的根小部件被强制填充屏幕,原因很简单:Flutter不知道如何对齐实际上未填充屏幕的路线。

因此,为简化起见,只需要填充即可。

为了解决这个问题,只需将您的根窗口小部件包装到中Align

PageRouteBuilder(
  transitionsBuilder: (context, animation, __, child) {
    return Align(
      child: SizeTransition(
        sizeFactor: animation,
        child: child,
      ),
    );
  },
),
Run Code Online (Sandbox Code Playgroud)