Есть ли способ перехода с одного экрана на другой, без использования каких-либо событий, просто используя только время? - PullRequest
1 голос
/ 08 апреля 2020

Скажем, у меня есть две страницы: -

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, но вместо того, чтобы нажимать на экран или какие-либо события, только последовательно, через некоторое время. Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Один из возможных подходов - использовать Timer и StatefulWidget, чтобы вы могли настроить таймер с триггером, который будет запускать ваш код навигации, как только таймер закончится и сработает.

Это это пример кода:

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'

0 голосов
/ 08 апреля 2020

Да, вы должны использовать Future.delayed () для функции init () на первой странице

Вот так (Добавить на первую страницу):

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

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