Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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 使用Dart中的转换在屏幕之间导航_Flutter_Dart - Fatal编程技术网

Flutter 使用Dart中的转换在屏幕之间导航

Flutter 使用Dart中的转换在屏幕之间导航,flutter,dart,Flutter,Dart,我有两个屏幕,我想通过自定义转换在它们之间导航(使用名为flatter\u spinkit)的库)。 如何从第1页转到第2页,显示自定义加载屏幕2-3秒? 这是我的密码: import 'package:flutter/material.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; main() { runApp(MaterialApp( home: Page1(), )); } class Pag

我有两个屏幕,我想通过自定义转换在它们之间导航(使用名为
flatter\u spinkit
)的库)。 如何从第1页转到第2页,显示自定义加载屏幕2-3秒? 这是我的密码:

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

main() {
  runApp(MaterialApp(
    home: Page1(),
  ));
}

class Page1 extends StatelessWidget {
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: RaisedButton(
          child: Text('Go!'),
          onPressed: () {
            Navigator.of(context).push(_createRoute());
          },
        ),
      ),
    );
  }
}

Route _createRoute() {
  return PageRouteBuilder(
    // transitionDuration: Duration(seconds: 1),
    transitionsBuilder: (context, animation, animationTime, child) {
      child = Scaffold(
        backgroundColor: Colors.purple[700],
        body: Center(
          child: SpinKitFadingCube(
            color: Colors.white,
            size: 100.0,
          ),
        ),
      );

      return ScaleTransition(
        scale: animation,
        child: child,
        alignment: Alignment.center,
      );
    },
    pageBuilder: (context, animation, animationTime) => Page2(),
  );
}

class Page2 extends StatelessWidget {
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Text('Page 2'),
      ),
    );
  }
}

我终于明白你的意思了。也许您只需要更改
transitionsBuilder
来检查动画是否完成。我还更改了
SpinKitFadingCube
的名称,因为它不应替换原始的子小部件

  transitionsBuilder: (context, animation, animationTime, child) {
    final loading= Scaffold(
      backgroundColor: Colors.purple[700],
      body: Center(
        child: SpinKitFadingCube(
          color: Colors.white,
          size: 100.0,
        ),
      ),
    );

    if(animation.isCompleted){
      return child;
    }else{
      return loading;
    }
  },

从一个屏幕切换到另一个屏幕时设置动画

您的
onPressed
onTap
方法:

InkWell(
 onTap: () {
   Navigator.of(context).push(_createRoute());
 },
)
然后在
\u createRoute
方法中

Route _createRoute() {
  return PageRouteBuilder(
    transitionDuration: Duration(seconds: 2), //You can change the time here
    pageBuilder: (context, animation, secondaryAnimation) => SecondScreen(),
    transitionsBuilder: (context, animation, secondaryAnimation, child) {
      var begin = Offset(1.0, 0.0);
      var end = Offset.zero;
      var curve = Curves.easeInCirc;

      var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));

      return SlideTransition(
        position: animation.drive(tween),
        child: child,
      );
    },
  );
}
使用
持续时间(秒:2)
可以将时间从
微秒
分钟
小时

还有许多其他曲线动画,如
Curves.easeincrc
,可以找到

或 如果您想使用
flatter\u Spinkit
来显示一种动画加载指示器,那么这就是它的工作方式

添加依赖项:

dependencies:
  flutter_spinkit: "^4.1.2"
然后将其导入屏幕:

import 'package:flutter_spinkit/flutter_spinkit.dart';
然后,您可以在需要的地方使用
flatter Spinkit Loader
,如:

final spinkit = SpinKitFadingCircle(
  itemBuilder: (BuildContext context, int index) {
    return DecoratedBox(
      decoration: BoxDecoration(
        color: index.isEven ? Colors.red : Colors.green,
      ),
    );
  },
);

我认为这不是解决我问题的办法。在第1页我有一个按钮,当我点击它时,我想进入第2页,但有一个2秒的过渡。对于这个转换,我想使用
flatter\u spinkit
library中的动画。flatter spinkit是一个加载程序/进度条。你想要过渡还是加载器?我第一次没有注意到PageRouteBuilder。
transitionsBuilder
通常用于两页过渡(通常定义第二页的缩放或幻灯片)。如果你不立即挖掘加载的页面,你可以返回你想要的页面。当我从Screen1导航到Screen2时,如何显示这个动画?这是来自Flatter网站的复制粘贴。我不知道该怎么做,当我从屏幕1导航到屏幕2时,显示颤振Spinkit动画2秒钟。如何编辑函数
\u createRoute
以使用Spinkit动画而不是SlideTransition?