首页 > 解决方案 > 如何修复类型'Null'不是布尔表达式中的'bool'

问题描述

我尝试了这段代码,但是三元运算符没有正常工作,因为我收到错误并且如果 put String bgImage = (data['isDayTime']==null)? 'day.png' : 'night.png'; 然后我只得到 day.png 我得到这个错误

以下 TypeErrorImpl 被抛出构建 Home(dirty, dependencies: [_ModalScopeStatus], state: _HomeState#1a387): type 'Null' is not a 'bool' in boolean expression

这是代码

import 'package:flutter/material.dart';

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {

  Map data = {};

  @override
  Widget build(BuildContext context) {

    data=data.isNotEmpty ? data : ModalRoute.of(context)?.settings?.arguments as Map;
    print(data);

    String bgImage = data['isDayTime']? 'day.png' : 'night.png';

    return Scaffold(
      body: SafeArea(
          child: Container(
            decoration: BoxDecoration(
              image: DecorationImage(
                image: AssetImage('assets/$bgImage'),
                fit: BoxFit.cover,
              )
            ),
            child: Padding(
              padding: const EdgeInsets.fromLTRB(0,120.0,0,0),
              child: Column(
                  children: <Widget>[
                    FlatButton.icon(
                      onPressed: () async {
                       dynamic result = await Navigator.pushNamed(context, '/location');
                       setState(() {
                         data ={
                           'time': result['time'],
                           'location': result['location'],
                           'isDaytime': result['isDaytime'],
                           'flag': result['flag'],
                         };
                       });
              },
                      icon: Icon(
                          Icons.edit_location,
                          color: Colors.grey[300],
                      ),
                      label: Text(
                          'Edit Location',
                          style: TextStyle(
                            color: Colors.grey[300],

                      ),
                      ),
                    ),

                  SizedBox(height: 20.0),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        Text(
                         data['location'],
                         style: TextStyle(
                           fontSize: 28.0,
                           letterSpacing: 2.0
                         )
                        )
                      ],
                    ),
                    SizedBox(height: 20.0),
                    Text(
                      data['time'],
                      style: TextStyle(
                        fontSize: 66.0,
                      ),
                    ),
                  ],
              ),
            ),
          ),
      ),
    );
  }
}

标签: flutter

解决方案


主要问题是你在这里传递bool? isDaytime,这是可以为空的,意味着它可以为空。但是String bgImage = data['isDayTime']? 'day.png' : 'night.png';在这里使用手段data['isDayTime']要么是对的,要么是错的。这就是为什么你需要确保你没有得到空值。此外,模态路由参数可能会出现另一个空值。

首先检查是否data['isDayTime']为空,然后检查它。您可以关注@Monik 的回答。


推荐阅读