Как мне использовать результат «Будущей» функции во Flutter, которую я создал в других частях моего приложения?

#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. На этом мои вопросы заканчиваются, большое вам спасибо! Спасибо, что сделали мой день лучше, зная, что это больше не проблема для меня, хорошего дня! 🙂