首页 > 解决方案 > 将弹出范围小部件仅适用于我的项目的最后一个屏幕我想在每个页面或特定页面上使用它

问题描述

我已经为启动屏幕和主屏幕编写了代码,我的自定义启动屏幕在 3 秒后导航到主屏幕我在两个屏幕上都应用了 WillPopScope,但它只适用于启动屏幕。当我禁用启动画面并且只运行主屏幕时,WillPopScope 运行良好,但是当我应用启动画面时,它在主屏幕上不起作用。我想在主屏幕和一个 webview 屏幕上拥有这样的功能,我该如何使用它?

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:splashscreen/splashscreen.dart';
import 'dart:async';
import 'main.dart';

void main() {
  runApp(
      MaterialApp(
    home: splash(),
  ));
}

class splash extends StatefulWidget {
  @override
  _splashState createState() => new _splashState();
}

class _splashState extends State<splash> {

  void initState() {
    super.initState();
    Timer(
        Duration(seconds: 3),
        () => Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => MyApp()),
            ));
  }

  @override
  Widget build(BuildContext context) {
    Future<bool> _onBackPressed() {
      return showDialog(
          context: context,
          builder: (context) => AlertDialog(
            title: Text("Do you want to exit?"),
            actions: <Widget>[
              FlatButton(
                  onPressed: () {
                    Navigator.pop(context, false);
                  },
                  child: Text("No")),
              FlatButton(
                  onPressed: () {
                    Navigator.pop(context, true);
                  },
                  child: Text("yes"))
            ],
          ));
    }
    Orientatoin();
    return WillPopScope(
      child: Scaffold(
      body: Stack(
        fit: StackFit.expand,
        children: <Widget>[
          Container(
            decoration: BoxDecoration(
              color: Colors.transparent,
            ),
            child: Image.asset('imges/splash.png'),
          ),
        ],
      ),
    ),
      onWillPop: _onBackPressed,

      );
  }
}

void Orientatoin() {
    SystemChrome.setPreferredOrientations(
        [DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
}

标签: flutterdartflutter-layout

解决方案


在您的代码编辑Navigator代码中,将 Splash 页面替换为MyApp()

Timer(
        Duration(seconds: 3),
            () => Navigator.pushReplacement(
          context,
          MaterialPageRoute(builder: (context) => MyApp()),
        ));

添加WillPopScope您的MyApp()


推荐阅读