访问record_patien时手机出现红屏。
这是代码
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
import 'package:sensor_detak_jantung/models/sensor.dart';
import 'package:sensor_detak_jantung/models/user.dart';
import 'package:sensor_detak_jantung/screens/authenticate/sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart' as firebase_auth;
import 'package:sensor_detak_jantung/services/db_path.dart';
class RecordPatient extends StatefulWidget {
const RecordPatient({Key key}) : super(key: key);
@override
_RecordPatient createState() => _RecordPatient();
}
class _RecordPatient extends State<RecordPatient> {
final databaseReference = FirebaseDatabase.instance.reference();
final _auth = firebase_auth.FirebaseAuth.instance;
final TextEditingController tokenController = TextEditingController();
User userInfo;
firebase_auth.User _user;
Sensor sensorInfo;
final _formKey = GlobalKey<FormState>();
String bpm;
void initState(){
super.initState();
this._user = _auth.currentUser;
if(_user != null) {
这是我尝试获取 BPM 值的地方
databaseReference.child('Sensor').once().then((DataSnapshot snapshot) {
bpm = snapshot.value['BPM']['Data'];
});
这是给用户的,这段代码在其他类上运行流畅。
databaseReference.child(USER_KEY).child(_user.uid).once().then((snapshot) {
userInfo = User.fromSnapshot(snapshot);
setState(() { });
});
}
}
AppBar title(){
return AppBar(
backgroundColor: Colors.red[400],
elevation: 0.0,
title: Text('Hi ${userInfo?.userName}'),
actions: <Widget>[
FlatButton.icon(
icon: Icon(Icons.person),
label: Text('logout'),
onPressed: () async {
_auth.signOut().then((value) {
Navigator.pushReplacement(context, new MaterialPageRoute(builder: (context) => SignIn()));
setState(() {});
});
},
),
],
);
}
@override
Widget build(BuildContext context) {
print (bpm);
return Scaffold(
body: Form(
key: _formKey,
child: ListView(
padding: const EdgeInsets.fromLTRB(22.0, 0.0, 22.0, 22.0),
children: [
SizedBox(height: 40),
title(),
SizedBox(height: 40),
Text (bpm),
],
),
),
);
}
}
当我尝试获取 Sensor
值和 users
值时会发生这种情况。
我仍在学习和试验中,如果有人能以简单的方式向我解释为什么会发生此错误,我将不胜感激。
答案 0 :(得分:0)
似乎 snapshot.value['BPM']['Data'];
返回 null
,因此您的 Text() 小部件将 null
作为其值,这是不允许的。在将 bpm 的值分配给 Text 小部件之前,您应该添加一个空检查,可能是这样的:
SizedBox(height: 40),
title(),
SizedBox(height: 40),
(bpm == null)?Text ("No BPM received"):Text(bpm),
答案 1 :(得分:0)
正如错误中所写的,Text 小部件获得了一个空值,当我们将这样的内容传递给文本 Text(null)
时,这是一个错误。
在您的代码中,这只能在 bpm 可能为 null 的文本小部件中实现。
Text (bpm),
所以你可以简单地这样做,
databaseReference.child('Sensor').once().then((DataSnapshot snapshot) {
bpm = snapshot.value['BPM']['Data']??"";
});
修复错误。