Флаттер Как перемещаться со страницы на страницу без участия пользователя - PullRequest
2 голосов
/ 21 апреля 2020

Я пишу флаттер-приложение и хочу изменить страницу без какого-либо взаимодействия с пользователем, я написал метод таймера и хочу изменить страницу, когда таймер равен 0 Timer _timer; int _start = 5;

    void startTimer() {
   const oneSec = const Duration(seconds: 1);
  _timer = new Timer.periodic(
  oneSec,
  (Timer timer) => setState(
    () {
      if (_start < 1) {
        timer.cancel();
      } else {
        _start = _start - 1;
      }
    },
  ),
);
   }
   @override
  void initState() {
     super.initState();
         startTimer();
     }

таймер будет от 5 до 0. Я хочу изменить страницу, когда начнется 0, и спасибо

1 Ответ

2 голосов
/ 21 апреля 2020

Это лучший подход к go с виджетом Visibility, а не с маршрутом.
Вы можете заменить любой виджет на виджет Text в демоверсии.
посмотрите демонстрационный код ниже:

// main.dart
import 'dart:async';

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CountDownDemo(),
    );
  }
}

class CountDownDemo extends StatefulWidget {
  @override
  _CountDownDemoState createState() => _CountDownDemoState();
}

class _CountDownDemoState extends State<CountDownDemo> {
  int _start = 5;

  void startTimer() {
    const oneSec = const Duration(seconds: 1);
    Timer.periodic(
      oneSec,
      (Timer timer) => setState(
        () {
          if (_start < 1) {
            timer.cancel();
          } else {
            _start = _start - 1;
          }
        },
      ),
    );
  }

  @override
  void initState() {
    startTimer();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Countdown Demo"),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            Visibility(
              child: Text("Text 5"),
              visible: _start == 5 ? true : false,
            ),
            Visibility(
              child: Text("Text 4"),
              visible: _start == 4 ? true : false,
            ),
            Visibility(
              child: Text("Text 3"),
              visible: _start == 3 ? true : false,
            ),
            Visibility(
              child: Text("Text 2"),
              visible: _start == 2 ? true : false,
            ),
            Visibility(
              child: Text("Text 1"),
              visible: _start == 1 ? true : false,
            ),
            Visibility(
              child: Text("Timer is complete"),
              visible: _start == 0 ? true : false,
            ),
          ],
        ),
      ),
    );
  }
}

Выход:
output of demo with visibility widget and timer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...