Navigator.pop 不工作并显示黑色背景?

Navigator.pop not working and show black background?

我尝试回到上一屏幕。但是 UI 只显示黑色背景,而且只发生在这个屏幕上。 Navigator.pop(context);Navigator.of(context).pop();.

我都试过了

这是我的代码:

return MaterialApp(
    home: SafeArea(
  child: Scaffold(
    body: BlocBuilder<TimeKeepingCubit, TimeKeepingState>(
    builder: (context, state)
{
  var scale = 1.0;
  if (state.controller != null){
    var camera = state.controller!.value;
    // fetch screen size
    final size = MediaQuery.of(context).size;

    // calculate scale depending on screen and camera ratios
    // this is actually size.aspectRatio / (1 / camera.aspectRatio)
    // because camera preview size is received as landscape
    // but we're calculating for portrait orientation
    var scale = size.aspectRatio * camera.aspectRatio;

    // to prevent scaling down, invert the value
    if (scale < 1) scale = 1 / scale;
  }
  return Stack(
    children: [
      state.controller == null ? SizedBox() : Center(
        child: Transform.scale(
          scale: scale,
          child: Center(
            child: CameraPreview(state.controller!),
          ),
        ),
      ),
      Visibility(
        visible: state is TimeKeepingLoading,
        child: Center(
            child: Container(
                width: 68,
                height: 68,
                decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(10),
                    color: AppColors.whiteE0E0E0),
                child: CupertinoActivityIndicator())
        ),
      ),
      buildAlignScafoldScan(),
      Positioned(
        top: 0,
        left: 0,
        child: IconButton(
          icon: SvgPicture.asset(Res.ic_back_left_blue),
          onPressed: () {
            Navigator.pop(context);
            // Navigator.of(context).pop();
          },
        ),
      ),

UI 在应用程序中无处可去或弹出时显示黑色背景。你想使用 pop 去哪个页面?而不是 Navigator.pop() 使用 Navigator.push() 到你想去的页面 onPress.

 onPressed: () {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const SecondPage()),
        );
      }, 

我可以看到这是您的 MaterialApp,您正在尝试呼叫 Navigator.pop(context)。由于这是堆栈中的第一个屏幕,因此 pop 方法都将显示黑屏。只有在下面有其他屏幕时才能弹出。假设有 2 个屏幕。从 screen1 调用 screen2 时应使用 Navigator.push 并在 screen2 上调用 Navigator.pop(context) 以返回到 screen1。如果 screen1 是您的第一个也是唯一一个屏幕,那么弹出它会导致黑屏。

我终于找到我的问题了。这就是这段代码中的上下文

BlocBuilder<TimeKeepingCubit, TimeKeepingState>(
    builder: (context, state)

make 在里面使用 Navigator.pop(context); 会导致黑屏。我的解决方案是创建一个作用域使用 Navigator.pop(context); 不再在 BlocBuilder 中的函数。它将使用主屏幕的context

void backToPreScreen() {
  Navigator.pop(context);
}