flutter - Overlay.of(context) 在 null 上调用
问题描述
所以我希望这个覆盖小部件出现在所有页面中并且不想在页面之间的转换过程中受到干扰,它会抛出这个异常并且没有构建覆盖小部件,我在这里做错了什么?
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return MaterialApp(
color: Colors.white,
title: 'Gratitude',
navigatorKey: AppNavigator.navigatorKey,
onGenerateRoute: AppNavigator.onGenerateRoute,
theme: ThemeData(
fontFamily: AppFonts.POPPINS,
textTheme: theme.textTheme.apply(
fontFamily: AppFonts.POPPINS,
displayColor: AppColors.TEXT_COLOR,
)),
builder: (context, child) {
final data = MediaQuery.of(context);
final smallestSize = min(data.size.width, data.size.height);
final textScaleFactor =
min(smallestSize / AppConstants.designScreenSize.width, 1.0);
return MediaQuery(
data: data.copyWith(textScaleFactor: textScaleFactor),
child: Builder(
builder: (context) {
WidgetsBinding.instance
.addPostFrameCallback((_) => _insertOverlay(context));
return child;
},
));
});
}
void _insertOverlay(BuildContext context) {
return Overlay.of(context).insert(
OverlayEntry(builder: (context) {
final size = MediaQuery.of(context).size;
print(size.width);
return Positioned(
width: 56,
height: 56,
top: size.height - 72,
left: size.width - 72,
child: Material(
color: Colors.transparent,
child: GestureDetector(
onTap: () => print('ON TAP OVERLAY!'),
child: Container(
decoration: BoxDecoration(shape: BoxShape.circle, color: Colors.redAccent),
),
),
),
);
}),
);
}
}
错误
══╡被调度程序库捕获的例外╞═════════════════════════════════════════ ════════════════ 在调度程序回调期间引发以下 NoSuchMethodError:在 null 上调用了方法“插入”。接收者:空尝试调用:插入('OverlayEntry'的实例)
当抛出异常时,这是堆栈:#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5) #1 MyApp._insertOverlay (package:bbs_mobile/main.dart:49:32) # 2 MyApp.build... (package:bbs_mobile/main.dart:41:48) #3 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15) #4 SchedulerBinding.handleDrawFrame (package: flutter/src/scheduler/binding.dart:1090:9) #5 SchedulerBinding.scheduleWarmUpFrame。(包:flutter/src/scheduler/binding.dart:865:7)(从 _RawReceivePortImpl 类、_Timer 类和 dart:async-patch 中删除了 4 帧)
解决方案
推荐阅读
- asp.net - 错误 403 禁止:Docker 和 ASP.NET 4.7
- postgresql - 什么是?列?在 postgresql shell 中是什么意思?
- python - Raspberry Pi 4 上的断言失败
- mongodb - Spring boot mongo返回dbref列表字段为空,即使数据存在于db中
- python - 使用环境变量作为应用程序配置运行 Flask 包
- php - 如何在 Codeigniter 中使用数据表
- laravel - Laravel Queue 突然停止服务
- akka-stream - 累积在一个入口的扇入算子
- c# - 无法将方法组“QueryFrame”转换为非委托类型“Image”
' C# - java - Java - 在 double 和 int 之间进行比较以及在 double 之间进行比较