断言失败:布尔表达式不能为null

时间:2019-05-21 11:25:06

标签: dart flutter flutter-dependencies

我从后端存储了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);
    }
  }

1 个答案:

答案 0 :(得分:1)

您的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});
}

更新

要解决主要问题,当CircularProgressIndicator的值仍在加载(或仍为isQuick)时,您需要显示备用小部件(例如null)。

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),
  ),
);