“!”之间有什么区别?和 ”?” dart null 安全中的运算符?

时间:2021-04-26 03:34:38

标签: flutter dart dart-null-safety

谁能解释一下两者之间的区别 使用这个:

final block = blocks?.first;

还有这个:

final block = blocks!.first;

其中 blocks 是:

List<Block>? blocks

1 个答案:

答案 0 :(得分:1)

当您使用import React, { Component } from "react"; import { Map, GoogleApiWrapper, Marker } from "google-maps-react"; export class MapContainer extends Component { state = { center: { lat: 40.854885, lng: -88.081807 }, markers: null, }; fetchPlaces = (mapProps, map) => { let coordinates = []; const { google } = mapProps; const service = new google.maps.places.PlacesService(map); var request = { location: this.state.center, radius: "500", query: "restaurant" }; service.textSearch(request, (results, status) => { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { //console.log(results[i]); coordinates.push(results[i]); } this.setState({ markers: coordinates }); } }); }; clickMarker = (props, marker) => { console.log(props.placeId); }; render() { if (!this.props.loaded) return <div>Loading...</div>; return ( <div> <Map className="map" google={this.props.google} center={{ lat: this.state.center.lat, lng: this.state.center.lng }} onReady={this.fetchPlaces} style={{ height: "100%", position: "relative", width: "100%" }} zoom={8} > {this.state.markers != null && this.state.markers.map(coords => ( <Marker key={coords.place_id} position={coords.geometry.location} onClick={this.clickMarker} placeId={coords.place_id} /> ))} </Map> </div> ); } } export default GoogleApiWrapper({ apiKey: "YOUR_API_KEY" })(MapContainer);``` 时,blocks?.first的值可以为空也可以不为空,但是当您使用blocks时,您通知编译器您确定blocks!.first不会为空。

blocks 实际上意味着您完全确定 final block = blocks!.first; 在块分配之前已初始化。

同样在 List<Block>? blocks 中,final block = blocks?.first; 可以为空,但在 block 中,final block = blocks!.first; 不可为空。

block
相关问题