断言失败:布尔表达式不能为空
Failed Assertion: Boolean expression must not be null
我从后端存储了 isQuick
值。我使用 sqflite 来缓存。
结果总是 false
在我的仪表板页面中,
bool isQuick;
@override
void initState() {
isQuick = false;
timer1 = Timer.periodic(Duration(seconds: 5), (Timer t) {
checkQuick(_url, tokens, isQuick);
});
timer = Timer.periodic(Duration(seconds: 10), (Timer t) {
Future datas = HelperDatabase1().displayGetUserPreference();
datas.then((v) => {
data = v,
print('new data ${data[0].data}'),
data[0].data == 0 ? this.isQuick == false : this.isQuick == true,
print(this.isQuick)
});
submitRequestSave(_url, tokens);
});
}
在我的构建方法中,
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async => false,
child: Scaffold(
backgroundColor: Colors.white,
appBar: AssetRegisterAppBar(context),
body: makeBody(litems, litems_icon, _url, this.isQuick, isOffline,
statusbarHeight, context),
));
}
checkQuick方法,
Future checkQuick(String url, String token, bool isQuick) async {
print('quick $isQuick');
bool newQuick;
final response = await http.get(
'$url/nativeapi/v1.0/User/GetUserPreference',
headers: {'Authorization': 'Bearer $token'},
);
final jsonResponse = json.decode(response.body);
GetUserPreference model = GetUserPreference.fromJson(jsonResponse);
var data = GetUserPreference(data: model.data);
print(data.data);
if (data.data == 0) {
newQuick = false;
} else {
newQuick = true;
}
print('new quick $newQuick');
if (isQuick != newQuick) {
int newData;
if (newQuick) {
newData = 1;
} else {
newData = 0;
}
await HelperDatabase1().updateGetUserPreference(1, newData);
}
}
您的 isQuick 在被调用以构建您的页面时是 null
。为其分配默认值:
@override
void initState() {
isQuick = false; // or true
Future datas = HelperDatabase1().displayGetUserPreference();
datas.then((v) =>
{data = v, data[0].data == 0 ? this.isQuick == false : this.isQuick == true});
}
更新
要解决主要问题,您需要在 isQuick
的值仍在加载(或仍为 null
时)显示备用小部件(例如 CircularProgressIndicator
)。
return WillPopScope(
onWillPop: () async => false,
child: Scaffold(
backgroundColor: Colors.white,
appBar: AssetRegisterAppBar(context),
body: isQuick == null
? CircularProgressIndicator()
: makeBody(litems, litems_icon, _url, this.isQuick, isOffline, statusbarHeight, context),
),
);
我从后端存储了 isQuick
值。我使用 sqflite 来缓存。
结果总是 false
在我的仪表板页面中,
bool isQuick;
@override
void initState() {
isQuick = false;
timer1 = Timer.periodic(Duration(seconds: 5), (Timer t) {
checkQuick(_url, tokens, isQuick);
});
timer = Timer.periodic(Duration(seconds: 10), (Timer t) {
Future datas = HelperDatabase1().displayGetUserPreference();
datas.then((v) => {
data = v,
print('new data ${data[0].data}'),
data[0].data == 0 ? this.isQuick == false : this.isQuick == true,
print(this.isQuick)
});
submitRequestSave(_url, tokens);
});
}
在我的构建方法中,
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async => false,
child: Scaffold(
backgroundColor: Colors.white,
appBar: AssetRegisterAppBar(context),
body: makeBody(litems, litems_icon, _url, this.isQuick, isOffline,
statusbarHeight, context),
));
}
checkQuick方法,
Future checkQuick(String url, String token, bool isQuick) async {
print('quick $isQuick');
bool newQuick;
final response = await http.get(
'$url/nativeapi/v1.0/User/GetUserPreference',
headers: {'Authorization': 'Bearer $token'},
);
final jsonResponse = json.decode(response.body);
GetUserPreference model = GetUserPreference.fromJson(jsonResponse);
var data = GetUserPreference(data: model.data);
print(data.data);
if (data.data == 0) {
newQuick = false;
} else {
newQuick = true;
}
print('new quick $newQuick');
if (isQuick != newQuick) {
int newData;
if (newQuick) {
newData = 1;
} else {
newData = 0;
}
await HelperDatabase1().updateGetUserPreference(1, newData);
}
}
您的 isQuick 在被调用以构建您的页面时是 null
。为其分配默认值:
@override
void initState() {
isQuick = false; // or true
Future datas = HelperDatabase1().displayGetUserPreference();
datas.then((v) =>
{data = v, data[0].data == 0 ? this.isQuick == false : this.isQuick == true});
}
更新
要解决主要问题,您需要在 isQuick
的值仍在加载(或仍为 null
时)显示备用小部件(例如 CircularProgressIndicator
)。
return WillPopScope(
onWillPop: () async => false,
child: Scaffold(
backgroundColor: Colors.white,
appBar: AssetRegisterAppBar(context),
body: isQuick == null
? CircularProgressIndicator()
: makeBody(litems, litems_icon, _url, this.isQuick, isOffline, statusbarHeight, context),
),
);