如何修复 [错误:颤振/lib/ui/ui_dart_state.cc(166)] 未处理的异常:NoSuchMethod错误:方法 '<=' 在 null 上调用。错误?



我一直收到此错误,我不知道如何解决它,因为昨天相同的代码有效。(这是一个测试应用程序,它使用谷歌地图和Firebase Firestore来保存和查询地图上的标记(

我认为这可能与我的颤振安装有关,所以我尝试使用稳定版和测试版,但两个版本都发生了相同的错误。

这是错误:

E/flutter (16809): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: The method '<=' was called on null.
E/flutter (16809): Receiver: null
E/flutter (16809): Tried calling: <=(102.0)
E/flutter (16809): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
E/flutter (16809): #1      GeoFireCollectionRef.within.<anonymous closure>.<anonymous closure> (package:geoflutterfire/src/collection.dart:125:31)
E/flutter (16809): #2      WhereIterator.moveNext (dart:_internal/iterable.dart:442:13)
E/flutter (16809): #3      new List.from (dart:core-patch/array_patch.dart:50:19)
E/flutter (16809): #4      new List.of (dart:core-patch/array_patch.dart:68:17)
E/flutter (16809): #5      Iterable.toList (dart:core/iterable.dart:404:12)
E/flutter (16809): #6      GeoFireCollectionRef.within.<anonymous closure> (package:geoflutterfire/src/collection.dart:126:16)
E/flutter (16809): #7      _MapStream._handleData (dart:async/stream_pipe.dart:219:31)
E/flutter (16809): #8      _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:157:13)
E/flutter (16809): #9      _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (16809): #10     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (16809): #11     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (16809): #12     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter (16809): #13     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
E/flutter (16809): #14     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:784:19)
E/flutter (16809): #15     _StreamController._add (dart:async/stream_controller.dart:655:7)
E/flutter (16809): #16     _StreamController.add (dart:async/stream_controller.dart:597:5)
E/flutter (16809): #17     CombineLatestStream._buildController.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:rxdart/src/streams/combine_latest.dart:293:30)
E/flutter (16809): #18     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (16809): #19     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (16809): #20     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (16809): #21     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter (16809): #22     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
E/flutter (16809): #23     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:127:11)
E/flutter (16809): #24     _MapStream._handleData (dart:async/stream_pipe.dart:224:10)
E/flutter (16809): #25     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:157:13)
E/flutter (16809): #26     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (16809): #27     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (16809): #28     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (16809): #29     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter (16809): #30     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
E/flutter (16809): #31     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:127:11)
E/flutter (16809): #32     _MapStream._handleData (dart:async/stream_pipe.dart:224:10)
E/flutter (16809): #33     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:157:13)
E/flutter (16809): #34     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (16809): #35     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (16809): #36     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (16809): #37     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter (16809): #38     _DelayedData.perform (dart:async/stream_impl.dart:611:14)
E/flutter (16809): #39     _StreamImplEvents.handleNext (dart:async/stream_impl.dart:730:11)
E/flutter (16809): #40     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:687:7)
E/flutter (16809): #41     _rootRun (dart:async/zone.dart:1182:47)
E/flutter (16809): #42     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (16809): #43     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter (16809): #44     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter (16809): #45     _rootRun (dart:async/zone.dart:1190:13)
E/flutter (16809): #46     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (16809): #47     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter (16809): #48     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter (16809): #49     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (16809): #50     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
E/flutter (16809): 

这是我的主.dart文件:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:geoflutterfire/geoflutterfire.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'dart:async';
import 'package:permission_handler/permission_handler.dart';
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:rxdart/rxdart.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.blue,
// This makes the visual density adapt to the platform that you run
// the app on. For desktop platforms, the controls will be smaller and
// closer together (more dense) than on mobile platforms.
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: FireMap(),
);
}
}
class FireMap extends StatefulWidget {
@override
_FireMapState createState() => _FireMapState();
}
class _FireMapState extends State<FireMap> {
Firestore firestore = Firestore.instance;
Geoflutterfire geo = Geoflutterfire();
GoogleMapController _mapController;
Map<MarkerId, Marker> markers =
<MarkerId, Marker>{}; // CLASS MEMBER, MAP OF MARKS
BehaviorSubject<double> radius = BehaviorSubject.seeded(100.0);
Stream<dynamic> query;
StreamSubscription subscription;
Future<DocumentReference> _addGeoPoint(LatLng coordinates) async {
GeoFirePoint point = geo.point(
latitude: coordinates.latitude, longitude: coordinates.longitude);
return firestore
.collection('locations')
.add({'position': point.data, 'name': 'Yay I can be queried!'});
}
void _add() {
//    var markerIdVal = MyWayToGenerateId();
var markerIdVal = '123abc';
final MarkerId markerId = MarkerId(markerIdVal);
// creating a new MARKER
final Marker marker = Marker(
markerId: markerId,
position: LatLng(24.150, -110.32
//        center.latitude + sin(_markerIdCounter * pi / 6.0) / 20.0,
//        center.longitude + cos(_markerIdCounter * pi / 6.0) / 20.0,
),
infoWindow: InfoWindow(
title: markerIdVal,
snippet: '*',
onTap: () {
_onInfoWindowTapped(markerId);
}),
onTap: () {
_onMarkerTapped(markerId);
},
draggable: true,
);
setState(() {
// adding a new marker to map
markers[markerId] = marker;
});
}
void _addMarkerAtPosition(LatLng coordinates) {
_addGeoPoint(coordinates);
//    var markerIdVal = MyWayToGenerateId();
var markerIdVal = coordinates.toString();
final MarkerId markerId = MarkerId(markerIdVal);
// creating a new MARKER
final Marker marker = Marker(
markerId: markerId,
position: coordinates,
infoWindow: InfoWindow(
title: markerIdVal,
snippet: '*',
onTap: () {
_onInfoWindowTapped(markerId);
}),
onTap: () {
_onMarkerTapped(markerId);
},
);
setState(() {
// adding a new marker to map
markers[markerId] = marker;
});
}
void _onMarkerTapped(markerId) {
print('MARKER TAPPED');
}
void _onInfoWindowTapped(MarkerId markerId) {
print('MARKER INFO WINDOW TAPPED');
//TODO SHOW INFO PANEL
AwesomeDialog(
context: context,
dialogType: DialogType.NO_HEADER,
title: markerId.value,
desc: 'desc',
)..show();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
GoogleMap(
initialCameraPosition:
CameraPosition(target: LatLng(24.150, -110.32), zoom: 10),
myLocationEnabled: true,
mapType: MapType.hybrid,
markers: Set<Marker>.of(markers.values),
onMapCreated: _onMapCreated,
onTap: _onTap,
),
Positioned(
bottom: 100,
right: 0,
child: FlatButton(
shape: CircleBorder(),
child: Padding(
child: Icon(
Icons.pin_drop,
color: Colors.white,
),
padding: EdgeInsets.all(8.0),
),
color: Colors.green,
//              onPressed: () => _add(),
),
),
Positioned(
bottom: 50,
left: 10,
child: Slider(
min: 100.0,
max: 500.0,
divisions: 4,
value: radius.value,
label: 'Radius ${radius.value}km',
activeColor: Colors.green,
inactiveColor: Colors.green.withOpacity(0.2),
onChanged: _updateQuery,
),
)
],
),
floatingActionButton: FloatingActionButton(
onPressed: (){
//          _mapController.animateCamera(CameraUpdate.zoomOut());
subscription.cancel();
_startQuery();
},
child: Icon(Icons.zoom_out),
),
);
}
void _updateMarkers(List<DocumentSnapshot> documentList) {
print(documentList);
markers.clear();
setState(() {
documentList.forEach((DocumentSnapshot document) {
GeoPoint pos = document.data['position']['geopoint'];
double distance = document.data['distance'];
final MarkerId markerId =
MarkerId(pos.latitude.toString() + '--' + pos.longitude.toString());
var marker = Marker(
markerId: markerId,
position: LatLng(pos.latitude, pos.longitude),
icon: BitmapDescriptor.defaultMarker,
infoWindow: InfoWindow(
title: markerId.value,
snippet: '$distance kilometers from query center',
onTap: () {
_onInfoWindowTapped(markerId);
}));
markers[markerId] = marker;
});
});
}
_startQuery() async {
double screenWidth = MediaQuery.of(context).size.width;
double screenHeight = MediaQuery.of(context).size.height;
screenWidth *= MediaQuery.of(context).devicePixelRatio;
screenHeight *= MediaQuery.of(context).devicePixelRatio;
double middleX = screenWidth / 2;
double middleY = screenHeight / 2;
var pos = await _mapController
.getLatLng(ScreenCoordinate(x: middleX.round(), y: middleY.round()));
//    var pos = LatLng(24.150, -110.32);
double lat = pos.latitude;
double lng = pos.longitude;
print('getLatLng Position: ' + pos.toString());
var ref = firestore.collection('locations');
GeoFirePoint center = geo.point(latitude: lat, longitude: lng);
_mapController.animateCamera(CameraUpdate.newLatLng(pos));
subscription = radius.switchMap((rad) {
return geo.collection(collectionRef: ref).within(
center: center, radius: rad, field: 'position', strictMode: true);
}).listen(_updateMarkers);
}
_updateQuery(value) {
setState(() {
radius.add(value);
});
}
void _onMapCreated(GoogleMapController controller) async {
setState(() {
_mapController = controller;
});
if (await Permission.location.request().isGranted) {
print('PERMISSION GRANTED: LOCATION');
}
_startQuery();
}
void _onTap(coordinates) {
//    _addMarkerAtPosition(coordinates);
_addGeoPoint(coordinates);
_mapController.animateCamera(CameraUpdate.newLatLng(coordinates));
}
@override
void dispose() {
subscription.cancel();
super.dispose();
}
}

还有我的pubspec.ymal文件:

name: googlemapstest
description: Google Maps Test App
# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter

# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
google_maps_flutter: ^0.5.28+1
firebase_core: ^0.4.5
firebase_analytics: ^5.0.15
cloud_firestore: ^0.13.7

permission_handler: ^5.0.1+1
awesome_dialog: ^1.1.3
geoflutterfire: ^2.0.3+6

dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true

感谢您的帮助!

您可能没有正确创建对象。

检查此类型的声明:

Foo obj; // wronge way of creating object
obj.method();

并更改为此

Foo obj = Foo(); // Corret way of creating object
obj.method();

Foo obj = new Foo(); // Corret way of creating object
obj.method();

PS:new关键字现在在 Dart 中是可选的。

最新更新