#flutter
#flutter
Вопрос:
Итак, в основном, что я пытаюсь сделать, я пытаюсь получить данные, которые вычисляются из функции ‘Geolocator.distanceBetween ()’ и использовать их в других частях моего приложения, как показано в приведенном ниже коде с комментариями, может кто-нибудь, пожалуйста, мне помочь?
import 'package:flutter/material.dart';
import 'package:environcycle_prototype/ExtraUtility/CornerIcon.dart';
import 'package:geolocator/geolocator.dart';
class Belait extends StatefulWidget {
@override
_BelaitState createState() => _BelaitState();
}
class _BelaitState extends State<Belait> {
Position _currentUserPosition;
double distanceInMeters1 = 0;
Future getTheDistance1() async {
_currentUserPosition = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
double distanceInMeters1 = await Geolocator.distanceBetween(
4.7074,
114.5423,
_currentUserPosition.latitude,
_currentUserPosition.longitude,
); //this basically calculates the distance in meters for me
//if i add a 'print(distanceInMeters1)' here it shows me that the distance calculator is working and gives me a value of 12536913.098192418 (which is correct), but how do i use this data (12536913.098192418) which is a string of numbers in other parts of my app such as in the next comment on the bottom of my code
setState(() {
return distanceInMeters1;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.green[50],
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
SizedBox(width: 20),
Text('Meters Away') //I want the value here right before the text 'meters away'
],
),
Комментарии:
1. Вы пробовали future builder?
2. Да, но, к сожалению, у меня это не сработало, у вас есть пример кода future builder, который я могу попробовать?
Ответ №1:
Вы можете использовать будущий конструктор следующим образом:
Future<double> getTheDistance1() async {
_currentUserPosition = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
double distanceInMeters1 = await Geolocator.distanceBetween(
4.7074,
114.5423,
_currentUserPosition.latitude,
_currentUserPosition.longitude,
);
return distanceInMeters1;
}
Widget build(BuildContext context) {
return FutureBuilder<double>(
future: getTheDistance1(),
builder: (context, snapshot) {
return Scaffold(
backgroundColor: Colors.green[50],
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
SizedBox(width: 20),
if (snapshot.hasData)
Text('${snapshot.data!} Meters Away')
],
),
});
Надеюсь, этого кода будет достаточно, чтобы решить вашу проблему
Комментарии:
1. Я просто внедрил это в свой код, и это сработало как по волшебству! Большое вам спасибо! Я совсем новичок в flutter, и FutureBuilder — это своего рода новая проблема для меня, еще раз большое спасибо> w <
2. Простите, что задаю еще один вопрос, но если бы у меня было второе значение (например, ‘getTheDistance2 ()’, может ли future builder вернуть это значение вместе с первым? (предполагая, что мне нужно использовать оба значения getTheDistance1() и getTheDistance2() в двух отдельных частях моего кода
3. Вау, я вижу! Большое спасибо за вашу помощь! это так помогает, что вы не понимаете, как много это значит для меня, я работал над тем, чтобы получить результат из виджета future в течение 4 дней подряд днем и ночью и пытался каждый день, только вчера я опубликовал на StackOverflow, и вы помогли мне, большое вам спасибо! .w.
4. Еще один короткий вопрос, если вы можете ответить, могу ли я узнать, как мне округлить значение до ближайшего int ?
5. На этом мои вопросы заканчиваются, большое вам спасибо! Спасибо, что сделали мой день лучше, зная, что это больше не проблема для меня, хорошего дня! 🙂