- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然我知道这可能看起来像一个重复,有多少关于这个错误的不同帖子,但我收到这个错误(我认为)是在四个不同屏幕上的不同原因。
我的应用程序启动,但每当我尝试导航我的应用程序时,我最终都会收到红屏错误,因为它说屏幕内的一个小部件在空值上使用了 Null Check 运算符。
以下是我得到的错误:
The following _CastError was thrown building NotificationBanner(dirty):Null check operator used on a null value.The relevant error-causing widget was:NotificationBanner file:///Users/alexm/carebloom-flutter/lib/Views/homeview.dart:9:7
The following _CastError was thrown building AlertBanner(dirty):Null check operator used on a null value.The relevant error-causing widget was:AlertBanner file:///Users/alexm/carebloom-flutter/lib/Views/alerts_view.dart:57:15
The following _CastError was thrown building MessageOverView(dirty):Null check operator used on a null value.The relevant error-causing widget was:MessageOverView file:///Users/alexm/carebloom-flutter/lib/widgets/navbar.dart:41:16
The following _CastError was thrown building SettingsView(dirty, dependencies:[_EffectiveTickerMode], state: _SettingsViewState#ddb1e(tickers: tracking 1 ticker)):Null check operator used on a null value.The relevant error-causing widget was:SettingsView file:///Users/alexm/carebloom-flutter/lib/widgets/navbar.dart:49:16
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('alerts')
.where('access',
arrayContains: FirebaseAuth.instance.currentUser!.uid)
.where('read', isEqualTo: false)
//.orderBy('createdAt', descending: true)
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data!.docs.length <= 0) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(10)),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 5,
blurRadius: 7,
offset: Offset(0, 3), // changes position of shadow
),
],
),
height: 60.0,
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(width: 10.0),
Icon(
Icons.check_box,
color: Colors.green,
size: MediaQuery.of(context).size.width * .1,
),
SizedBox(width: 5.0),
Expanded(
child: AutoSizeText(
"No Current Messages or Alerts",
maxLines: 1,
maxFontSize: 20,
style:
TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
),
//if (snapshot.hasData) SizedBox(width: 45),
],
),
);
}
Alert alert = Alert.fromFirestore(snapshot.data!.docs.first);
return Card(
//height: 60.0,
child: InkWell(
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(width: 10.0),
Icon(
Icons.warning,
color: Colors.red,
size: MediaQuery.of(context).size.width * .1,
),
SizedBox(width: 15.0),
Expanded(
child: AutoSizeText(
"New Alert for Your Patient",
maxLines: 1,
maxFontSize: 20,
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold),
),
),
//if (snapshot.hasData) SizedBox(width: 45),
if (snapshot.hasData) Icon(Icons.arrow_right, size: 50)
],
),
onTap: () {}),
elevation: 12,
);
});
}
Widget getIcon(snapshot) {
if (snapshot.hasData) {
return Icon(
Icons.warning,
color: Colors.red,
size: 60,
);
} else {
return Icon(
Icons.check_box,
color: Colors.green,
size: 60,
);
}
}
}
警报横幅:
import 'package:carebloom/models/alert_model.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class AlertBanner extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('alerts')
.where('access',
arrayContains: FirebaseAuth.instance.currentUser!.uid)
.where('read', isEqualTo: false)
.orderBy('createdAt', descending: true)
.snapshots(),
builder: (context, snapshot) {
print(snapshot.hasData);
print('alert has error');
print(snapshot.hasError);
if (snapshot.hasError) {
print(snapshot.error);
}
if (!snapshot.hasData || snapshot.data!.docs.length <= 0) {
return Card(
child: SizedBox(
height: MediaQuery.of(context).size.height * .08,
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(width: 10.0),
Icon(
Icons.check_box,
color: Colors.green,
size: MediaQuery.of(context).size.width * .1,
),
SizedBox(width: 5.0),
Expanded(
child: AutoSizeText(
"No Current Messages or Alerts",
maxLines: 1,
maxFontSize: 20,
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold),
),
),
//if (snapshot.hasData) SizedBox(width: 45),
],
),
),
);
}
Alert curAlert = Alert.fromFirestore(snapshot.data!.docs.elementAt(0));
return Card(
child: SizedBox(
height: MediaQuery.of(context).size.height * .08,
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(width: 10.0),
Icon(
Icons.warning_rounded,
color: Colors.red,
size: MediaQuery.of(context).size.width * .1,
),
SizedBox(width: MediaQuery.of(context).size.width * .08),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
AutoSizeText(
curAlert.desc!.toLowerCase().capitalizeFirstofEach,
maxLines: 1,
maxFontSize: 20,
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold)),
AutoSizeText(
curAlert.fname + ' ' + '${curAlert.lname[0]}' + '.',
maxLines: 1,
maxFontSize: 20,
style: TextStyle(
fontSize: 18,
),
),
],
),
Spacer(), //SizedBox(width: MediaQuery.of(context).size.width * .1),
Icon(Icons.arrow_right, size: 50)
//if (snapshot.hasData) SizedBox(width: 45),
],
),
),
);
});
}
}
extension StringFormatExtension on String {
String get capitalizeFirstofEach => this
.split(" ")
.map((str) => str[0].toUpperCase() + str.substring(1))
.join(" ");
}
MessageOverView:
import 'package:auto_size_text/auto_size_text.dart';
import 'package:carebloom/Services/auth.dart';
import 'package:carebloom/models/last_message_model.dart';
import 'package:carebloom/models/converstaions.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:intl/intl.dart';
class MessageOverView extends StatelessWidget {
// This widget is the root of your application.
final AuthService _auth = AuthService();
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
centerTitle: true,
automaticallyImplyLeading: false,
backgroundColor: Color(0xFF6cc5de),
title: AutoSizeText(
'Messages',
maxLines: 1,
style: GoogleFonts.raleway(
fontWeight: FontWeight.bold,
fontSize: 35,
textStyle: TextStyle(
color: Colors.black,
)),
textAlign: TextAlign.center,
),
),
body: Container(
padding: EdgeInsets.all(2.5),
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topRight,
end: Alignment.bottomCenter,
colors: [Color(0xFFb5e2ee), Colors.white])),
child: Container(
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('messages')
.where('access',
arrayContains: FirebaseAuth.instance.currentUser!.uid)
//FirebaseAuth.instance.currentUser.uid, isEqualTo: true)
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
print("after message list query*****************************");
print(snapshot.data!.docs.toString());
print(snapshot.data!.docs.length);
return ListView.builder(
itemCount: 1,
itemBuilder: (context, pos) {
LastMessage msg = LastMessage.fromFirestore(
snapshot.data!.docs.elementAt(pos));
print('error before or after??????/');
print(snapshot.data!.docs.contains(msg.id));
return ConversationList(
patient: msg.fname! + ' ' + msg.lname!,
name: msg.author,
messageText: msg.text,
imageUrl: msg.photoURL,
time: DateFormat('MMM d, h:mma')
.format(msg.msgRecieved!.toDate()),
isMessageRead: false,
pos: pos,
id: msg.id,
);
});
}),
),
),
);
}
}
设置 View :
import 'dart:io';
import 'package:carebloom/Screens/login.dart';
import 'package:carebloom/Services/auth.dart';
import 'package:carebloom/Services/image_picker_handler.dart';
import 'package:carebloom/models/user.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class SettingsView extends StatefulWidget {
SettingsView({Key? key}) : super(key: key);
@override
_SettingsViewState createState() => _SettingsViewState();
}
class _SettingsViewState extends State<SettingsView>
with TickerProviderStateMixin, ImagePickerListener {
// This widget is the root of your application.
final AuthService _auth = AuthService();
File? _image;
AnimationController? _controller;
late ImagePickerHandler imagePicker;
@override
void initState() {
super.initState();
_controller = new AnimationController(
vsync: this,
duration: const Duration(milliseconds: 500),
);
imagePicker = new ImagePickerHandler(this, _controller);
imagePicker.init();
}
@override
void dispose() {
_controller!.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
print('Before query settings');
return Stack(children: [
StreamBuilder<DocumentSnapshot>(
stream: FirebaseFirestore.instance
.collection('users')
.doc(FirebaseAuth.instance.currentUser!.uid)
.get()
.asStream(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
LUser user = LUser.fromFirestore(snapshot.data!);
return Column(
children: [
Container(
width: double.infinity,
child: Center(
child: CircleAvatar(
backgroundColor: Colors.white,
//backgroundImage: NetworkImage(user.photo),
foregroundColor: Colors.grey[600],
child: null == user.photo
? CircleAvatar(
child: Icon(
Icons.person,
size: 210,
color: Colors.grey[600],
),
backgroundColor: Colors.white,
radius: 110,
)
: CircleAvatar(
backgroundImage: NetworkImage(user.photo!),
backgroundColor: Colors.white,
radius: 110,
),
radius: 110,
),
),
),
ElevatedButton(
onPressed: () => imagePicker.showDialog(context),
child: Icon(Icons.camera_alt_outlined),
style: ElevatedButton.styleFrom(
primary: Color(0xFF3E8094),
onPrimary: Colors.white,
shadowColor: Color(0xFF6cc5de),
elevation: 5,
padding: EdgeInsets.fromLTRB(5, 5, 5, 5),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
side: BorderSide(color: Color(0xFF6CC5DE))),
),
),
Container(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 20,
),
Text(
'Name: ' + user.fname! + ' ' + user.lname!,
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
SizedBox(
height: 20,
),
Text(
'Email: ' + user.email!,
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
SizedBox(
height: 20,
),
],
),
),
Container(
width: double.infinity,
height: 50,
child: ElevatedButton(
child: Text('Sign Out'),
style: ElevatedButton.styleFrom(
primary: Color(0xFF3E8094),
onPrimary: Colors.white,
shadowColor: Color(0xFF6cc5de),
elevation: 5,
padding: EdgeInsets.fromLTRB(5, 5, 5, 5),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
side: BorderSide(color: Color(0xFF6CC5DE))),
),
onPressed: () async {
await _auth.signOut();
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => LoginScreen(),
fullscreenDialog: true));
}
// }
),
),
],
);
}),
]);
}
@override
userImage(File? _image) {
setState(() {
this._image = _image;
});
}
}
到目前为止,我已经检查了所有我有空检查的东西,但无法修复它。
最佳答案
问题:
使用 Bang !
时一般会出现此错误运算符(也称为空断言运算符)来抛弃可空性。
例如:
int? i;
void main() {
print(i!.isEven); // Runtime error: Null check operator used on a null value
}
int? i;
void main() {
var local = i;
if (local != null) {
print(local.isEven);
}
}
?.
如果类型为 null
,则提供默认值.int? i;
void main() {
print(i?.isEven ?? true);
}
关于Flutter 2.0.2 空值检查运算符用于空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66712031/
我正在尝试从flutter应用程序构建apk,但出现此错误: Note: /mnt/Software/Linux/Flutter/flutter/.pub-cache/hosted/pub.dartl
我有一个名为 X 的较大应用程序,还有另一个名为 Y 的较小应用程序。他们现在彼此分开,并且工作正常。我想将应用程序 Y 集成到 X 中。我想将 Y 的代码放入 X 项目中,但它们应该有不同的 Mai
在android Studio中选择Create New Flutter Project,出现如下4个选项。 Flutter 应用程序 Flutter 插件 Flutter 包 flutter 模块
我看到我的 flutter 项目生成了一个文件 ios/Flutter/Flutter.podspec ,这个文件有什么用? 如果它与生成的 Flutter.framework 有关? 我应该将它包含
我尝试过的 在包含flutter SDK的位置添加/编辑.bash_profile.rtf文件。 导出PATH = / Users / temur / Documents / Projects / F
Flutter 日志会打印数千个详细/垃圾邮件日志。 我正在尝试调试一个复杂的应用程序,但是打印太冗长了,以至于我很难找到我自己打印的东西。 有没有办法禁用详细? 就像是: Logger.level.
在flutter 1.22更新之后,我在Lineargradient colors属性中遇到错误,这给我一个错误,即未定义名称colors参数。.在Android中更新flutter和flutter插
在下面的代码 widget.hintText 中给出错误,我试图将日期选择器作为单独的组件,并在从其他文件调用它时动态传递提示文本值。 import 'package:date_field/date_
在下面的代码 widget.hintText 中给出错误,我试图将日期选择器作为单独的组件,并在从其他文件调用它时动态传递提示文本值。 import 'package:date_field/date_
Flutter 1.0 发布后,我正在按照步骤搭建 Flutter 开发环境。 在步骤中(如所附屏幕截图所示),它说要更新 $PATH 两次,一次使用 flutter 工具的路径 export PAT
我有一个用 flutter 编写的移动应用程序,我想将其转换为 flutter_web 应用程序(集成 flutter_web 尚不可用)。我目前遇到包裹问题。 我已按照本网站中列出的说明进行操作 h
如何向我的 Flutter 路由添加自定义转换?这是我目前的路线结构。 class MyApp extends StatelessWidget { // This widget is the
我正在尝试通过 URL 在 webview 中显示网页。我试过 flutter_webview_plugin 插件,但是当我在浏览器上运行项目时它不起作用。 在 flutter web applica
我正在使用 animatedContainer 在按下按钮时显示 listView.builder()。这是一个要显示的简单子(monad)列表,但问题是我不知道 ListView 构建器的高度会传递
我目前正在我的应用程序中制作渐变背景动画......我正在使用 lottie 动画的帮助下这样做!我试图将它封装在一个容器中并成功地做到了。但是有一个问题,尽管我将高度更改为大于 2000 的东西,但
美好的一天! 我无法弄清楚如何使用 google 标签管理器设置 flutter。我找到了 this package包括标签管理器 api。但是我不知道如何正确配置它。 (在网络上我只需要复制粘贴一个
我的购物车模型如下 class Cart { String description; double unitCost; double amount; int quantity; S
在 Flutter 应用程序中,我想为在线托管的资源(图像、视频等)实现缓存。 我希望它能在原生平台 (Android/iOS)(例如使用文件系统)和网络(例如使用 IndexedDB)上运行。 Fl
我写了一个页面,在顶部一切都很好,应该是这样。在底部我有一个事件的历史。我的容器的宽度是自动确定的(取决于屏幕的宽度),而高度 - 不,在不同的设备上有不同的高度(底部的缩进是不同的)。是否可以自动确
我正在处理一个页面,其中有一些字段,例如 textfield 和 slider。在页面的末尾必须有一个用于进行下一步的按钮,该按钮被包裹在 Align 中以在页面之间具有固定位置。 另一方面,resi
我是一名优秀的程序员,十分优秀!