问题描述
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY
╞═══════════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building Builder:
The method '-' was called on null.
Receiver: null
Tried calling: -(null)
The relevant error-causing widget was:
MaterialApp
file:///Users/daiquery/folder/Workspace/runsmith/runsmith/lib/main.dart:28:14
When the exception was thrown,this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
#1 _MapState.calculatedistance (package:runsmith/pages/map.dart:51:17)
#2 _MapState.initState (package:runsmith/pages/map.dart:34:33)
#3 StatefulElement._firstBuild (package:Flutter/src/widgets/framework.dart:4711:57)
#4 ComponentElement.mount (package:Flutter/src/widgets/framework.dart:4548:5)
... normal element mounting (24 frames)
#28 Element.inflateWidget (package:Flutter/src/widgets/framework.dart:3611:14)
#29 MultiChildRenderObjectElement.inflateWidget
(package:Flutter/src/widgets/framework.dart:6221:36)
#30 MultiChildRenderObjectElement.mount
(package:Flutter/src/widgets/framework.dart:6232:32)
... normal element mounting (170 frames)
#200 Element.inflateWidget (package:Flutter/src/widgets/framework.dart:3611:14)
#201 MultiChildRenderObjectElement.inflateWidget
(package:Flutter/src/widgets/framework.dart:6221:36)
#202 Element.updateChild (package:Flutter/src/widgets/framework.dart:3363:18)
#203 RenderObjectElement.updateChildren
(package:Flutter/src/widgets/framework.dart:5654:32)
#204 MultiChildRenderObjectElement.update
(package:Flutter/src/widgets/framework.dart:6243:17)
#205 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#206 ComponentElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4599:16)
#207 StatefulElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4746:11)
#208 Element.rebuild (package:Flutter/src/widgets/framework.dart:4267:5)
#209 StatefulElement.update (package:Flutter/src/widgets/framework.dart:4778:5)
#210 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#211 ComponentElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4599:16)
#212 Element.rebuild (package:Flutter/src/widgets/framework.dart:4267:5)
#213 ProxyElement.update (package:Flutter/src/widgets/framework.dart:4922:5)
#214 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#215 ComponentElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4599:16)
#216 Element.rebuild (package:Flutter/src/widgets/framework.dart:4267:5)
#217 ProxyElement.update (package:Flutter/src/widgets/framework.dart:4922:5)
#218 _InheritednotifierElement.update
(package:Flutter/src/widgets/inherited_notifier.dart:181:11)
#219 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#220 SingleChildRenderObjectElement.update
(package:Flutter/src/widgets/framework.dart:6090:14)
#221 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#222 ComponentElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4599:16)
#223 StatefulElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4746:11)
#224 Element.rebuild (package:Flutter/src/widgets/framework.dart:4267:5)
#225 StatefulElement.update (package:Flutter/src/widgets/framework.dart:4778:5)
#226 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#227 SingleChildRenderObjectElement.update
(package:Flutter/src/widgets/framework.dart:6090:14)
#228 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#229 SingleChildRenderObjectElement.update
(package:Flutter/src/widgets/framework.dart:6090:14)
#230 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#231 ComponentElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4599:16)
#232 Element.rebuild (package:Flutter/src/widgets/framework.dart:4267:5)
#233 ProxyElement.update (package:Flutter/src/widgets/framework.dart:4922:5)
#234 Element.updateChild (package:Flutter/src/widgets/framework.dart:3350:15)
#235 ComponentElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4599:16)
#236 StatefulElement.performRebuild
(package:Flutter/src/widgets/framework.dart:4746:11)
#237 Element.rebuild (package:Flutter/src/widgets/framework.dart:4267:5)
#238 BuildOwner.buildScope (package:Flutter/src/widgets/framework.dart:2582:33)
#239 WidgetsBinding.drawFrame (package:Flutter/src/widgets/binding.dart:875:21)
#240 RendererBinding._handlePersistentFrameCallback
(package:Flutter/src/rendering/binding.dart:328:5)
#241 SchedulerBinding._invokeFrameCallback
(package:Flutter/src/scheduler/binding.dart:1144:15)
#242 SchedulerBinding.handleDrawFrame
(package:Flutter/src/scheduler/binding.dart:1082:9)
#243 SchedulerBinding._handleDrawFrame
(package:Flutter/src/scheduler/binding.dart:998:5)
#247 _invoke (dart:ui/hooks.dart:163:10)
#248 Platformdispatcher._drawFrame (dart:ui/platform_dispatcher.dart:259:5)
#249 _drawFrame (dart:ui/hooks.dart:126:31)
(elided 3 frames from dart:async)
import 'dart:async';
import 'dart:math';
import 'dart:developer' as developer;
import 'package:Flutter/material.dart';
import 'package:google_maps_Flutter/google_maps_Flutter.dart';
import 'package:runsmith/domain/run.dart';
import 'package:runsmith/pages/runend.dart';
import 'package:runsmith/domain/screensize_reducers.dart';
import 'package:runsmith/domain/formattime.dart';
import 'package:geolocator/geolocator.dart';
class MapPage extends StatefulWidget {
@override
_MapState createState() => _MapState();
}
class _MapState extends State<MapPage> {
Stopwatch _elapsedtime;
String Now;
Run currentRun;
double distanceTravelled = 0.00;
double distanceBetweenLastPoints;
double latitudeData;
double longitudeData;
var month = DateTime.Now().month;
var day = DateTime.Now().day;
var lastLatitude;
var lastLongitude;
// literally random comment to test
@override
void initState() {
lastLatitude = latitudeData;
lastLongitude = longitudeData;
distanceBetweenLastPoints = calculatedistance(
latitudeData,longitudeData,lastLatitude,lastLongitude);
print(distanceBetweenLastPoints);
distanceBetweenLastPoints = Geolocator.distanceBetween(
latitudeData,lastLongitude);
super.initState();
_elapsedtime = Stopwatch();
_elapsedtime.start();
}
double calculatedistance(lat1,lon1,lat2,lon2) {
var p = 0.017453292519943295;
var c = cos;
var a = 0.5 -
c((lat2 - lat1) * p) / 2 +
c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p)) / 2;
return 12742 * asin(sqrt(a));
}
getCurrentLocation() async {
final geoposition = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.best);
setState(() {
latitudeData = geoposition.latitude;
longitudeData = geoposition.longitude;
});
}
// points every 600ms and finding the distance between them,then
// adding this to the distanceTravelled variable as an integer
// two variables,last location and current location
@override
void dispose() {
// _timer.cancel();
super.dispose();
}
void handleStartStop() {
if (_elapsedtime.isRunning) {
_elapsedtime.stop();
} else {
_elapsedtime.start();
}
setState(() {});
}
GoogleMapController mapController;
final LatLng _center = const LatLng(45.521563,-122.677433);
void _onMapCreated(GoogleMapController controller) {
mapController = controller;
Geolocator.getPositionStream(desiredAccuracy: LocationAccuracy.best)
.listen((l) {
mapController.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(target: LatLng(l.latitude,l.longitude),zoom: 15),),);
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(
children: [
Container(
height: screenHeight(context,dividedBy: 3),child: GoogleMap(
onMapCreated: _onMapCreated,initialCameraPosition: CameraPosition(
target: _center,zoom: 11.0,Container(
color: Colors.blue,height: screenHeight(context),child: Column(
children: [
Row(mainAxisAlignment: MainAxisAlignment.center,children: [
Padding(
padding: EdgeInsets.all(10),child: Text('text',style: TextStyle(
fontWeight: FontWeight.bold,height: 2.0,fontSize: 50))),Padding(
padding: EdgeInsets.all(10),child: Text(formatTime(_elapsedtime.elapsedMilliseconds),fontSize: 50)))
]),Row(mainAxisAlignment: MainAxisAlignment.center,children: [
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50)),onpressed: handleStartStop,child: Icon(!_elapsedtime.isRunning
? Icons.play_arrow
: Icons.pause),RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50)),onpressed: () {
if (_elapsedtime.isRunning == false) {
// currentRun.runId = 00001;
// currentRun.time =
// _elapsedtime.elapsedMilliseconds.toString();
// currentRun.date = Now;
// currentRun.miles = 5.00;
// print(currentRun);
Navigator.push(
context,MaterialPageRoute(builder: (context) => RunEndPage()),);
} else {
return;
}
},child: Icon(Icons.stop),)
])
],],)),);
}
}
我一直收到这个错误,虽然我尝试删除某些部分,添加调试器以查看哪里出了问题,查看了以前的导航器,但我还没有找到解决方案。
解决方法
在 calculateDistance
方法中,您正在执行以下计算
var a = 0.5 -
c((lat2 - lat1) * p) / 2 +
c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p)) / 2;
但是 lat
/lon
的值在这里是 null
,因为它是从 initState
您可以在声明解决此问题的同时将 latitudeData
/longitudeData
初始化为 0 值。
double latitudeData = 0;
double longitudeData = 0;