有没有办法从一个屏幕过渡到另一个屏幕,而不使用任何事件,只使用时间?

Is there a way to transition from one screen to another, without using any events, just using time alone?

假设我有两个页面:-

Tester1.dart

import 'package:flutter/material.dart';
import 'package:gelijk_spel/Testers2.dart';

class Testers1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: IconButton(
              icon: Hero(
                  tag: 'elderimg',
                  child: Image.asset(
                    'assets/Images/elder.png', width: 100, height: 100,),
              ),
              onPressed: () {
                Navigator.push(context,
                    MaterialPageRoute(
                        builder: (context) => Testers2()
                    )
                );
              }
          ),
        ),
      ),
    );
  }

}

和Tester2.dart

import 'package:flutter/material.dart';

class Testers2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Screen2'),
        ),
        body: Column(
          children: <Widget>[
            Text('Placeholder0'),
            Hero(
              tag: 'elderimg',
              child: Image.asset('assets/Images/elder.png',width: 100, height: 100,)
            ),
            Text('Placeholder1'),
          ],
        ),
      ),
    );
  }

}

我希望能够从 Tester1 转换到 Tester2,但不必在一段时间后按顺序单击屏幕或任何事件。我怎样才能做到这一点?

是的,您必须在第一页的 init() 函数上使用 Future.delayed()

像这样(添加到首页):

  Future<void> initState()  {
    super.initState();

//replace 1000 with your time required
  Future.delayed(Duration(milliseconds: 1000), () {
           Navigator.push(currentContext,
              MaterialPageRoute(builder: (context) => Testers2()));
        },
      });
}

一种可能的方法是使用 TimerStatefulWidget,这样您就可以设置一个带有触发器的计时器,一旦计时器 运行s 出来并触发。

这是代码示例:

class Testers1 extends StatefulWidget {
  @override
  _Testers1State createState() => _Testers1State();
}

class _Testers1State extends State<Testers1> {


  Widget build(BuildContext context) {
    return Scaffold(
      body: Container()
    );
  }

  @override
  void initState() {
    super.initState();
    Timer(Duration(seconds: 10), () {
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => Testers2()));
    });
  }
}
class Testers2 extends StatelessWidget {
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Screen2'),
        ),
        body: Column(
          children: <Widget>[
            Text('Placeholder0'),
            Text('Placeholder1'),
          ],
        ),
      );
  }
}

注意:Timer 来自 'dart:async'