Всплывающая целевая страница навигатора флаттера - PullRequest
0 голосов
/ 05 июня 2019

Например, 1. Интерфейс 1 работает в фоновом режиме, и после окончания запроса отображается диалоговое окно A 2. Интерфейс 2 запускается на переднем плане и отображает диалоговое окно B напрямую.Закройте диалоговое окно B после завершения запроса

Проблема в том, что диалоговое окно A отображается после диалогового окна B, но закрытое диалоговое окно A при использовании всплывающего окна «Навигатор», но мне нужно было закрыть диалоговое окно B

, поэтому какМогу ли я открыть целевую страницу?

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

void main() async {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  StreamController<bool> sc = StreamController();

  Stream<bool> get stream => sc.stream;

  @override
  void initState() {
    stream.listen((show) {
      if (show) {
        showDialogB();
      } else {
        Navigator.of(context).pop();
      }
    });

    request1();
    request2();
    super.initState();
  }

  void request1() {
    Timer(Duration(seconds: 3), () {
      showDialogA();
    });
  }

  void showDialogA() {
    showDialog(
        context: context,
        builder: (context) {
          return Container(
            height: 100,
            width: 100,
            color: Colors.white,
            child: Center(
              child: Text(
                "新版本",
                style: TextStyle(color: Colors.black),
              ),
            ),
          );
        });
  }

  void showDialogB() {
    showDialog(
        context: context,
        builder: (context) {
          return Container(
            height: 100,
            width: 100,
            color: Colors.white,
            child: Center(
              child: CupertinoActivityIndicator(),
            ),
          );
        });
  }

  void request2() {
    sc.add(true);
    Timer(Duration(seconds: 5), () {
      //dimisssDialogB
      sc.add(false);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("111"),
      ),
    );
  }
}

...