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);
}
我尝试回到上一屏幕。但是 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);
}