Поскольку ваш метод _initUserLocation является асинхронным c, поэтому, даже если вы вызываете в initstate, вы также не можете рассчитать другие значения на основе этого метода сборки, потому что в этом методе _initUserLocation не удалось выполнить свою задачу.
В Future Builder вы должны рассчитывать все, где вы можете видеть фактические данные, потому что будущий строитель предоставит данные, когда процесс будет завершен.
Вы должны вернуть любые данные из будущего метода, чтобы futurebuilder мог понять полный расчет метода сейчас.
Я внес много изменений в ваш код, который работает нормально.
Сообщите мне, работает он для вас или нет, а также не стесняйтесь задавать любые вопросы, если вы не понимаете какую-либо часть код.
Полная рабочая демонстрация:
class _DeleteWidgetState extends State<DeleteWidget> {
var lastLatitude;
var lastLongitude;
final dataInstance = Market.dataMarket;
var newSortRange = [];
@override
void initState() {
super.initState();
//_initUserLocation();
}
Future<int> _initUserLocation() async {
try {
await Future.delayed(Duration(seconds: 1));
Position position = await Geolocator()
.getLastKnownPosition(desiredAccuracy: LocationAccuracy.best);
lastLatitude = position.latitude;
lastLongitude = position.longitude;
} catch (e) {
print("Permission Denied");
}
return 1;
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color.fromRGBO(246, 246, 246, 1),
body: FutureBuilder(
future: _initUserLocation(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
if (lastLatitude == null || lastLongitude == null) {
for (int i = 0; i < dataInstance.length; i++) {
newSortRange[i] = 0;
}
} else {
for (int i = 0; i < dataInstance.length; i++) {
//calculating distance with lat1, lon1, lat2, lon2
var p = 0.017453292519943295;
var c = cos;
var a = 0.5 -
c((dataInstance[i].latitudeDest - lastLatitude) * p) / 2 +
c(lastLatitude * p) *
c(dataInstance[i].latitudeDest * p) *
(1 -
c((dataInstance[i].longitudeDest - lastLongitude) *
p)) /
2;
newSortRange.add(12742 * asin(sqrt(a)));
}
}
newSortRange.sort();
print(newSortRange);
return ListView.separated(
key: PageStorageKey<String>('aKey'),
physics: BouncingScrollPhysics(),
itemCount: newSortRange.length,
itemBuilder: (context, index) {
return Material(
color: Color.fromRGBO(251, 251, 251, 1),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ListTile(
trailing: Text(
newSortRange[index].toStringAsFixed(2) + "\nKM",
style: new TextStyle(
fontSize: 13,
),
textAlign: TextAlign.right,
),
),
],
),
);
},
separatorBuilder: (context, index) {
return Divider(
height: 0.0,
thickness: 0.7,
);
});
},
),
);
}
}
class Market {
static List dataMarket = [
Data(latitudeDest: -6.163891, longitudeDest: 106.628915),
Data(latitudeDest: -6.211269, longitudeDest: 106.615574),
Data(latitudeDest: -6.223254, longitudeDest: 106.703905),
Data(latitudeDest: -6.163891, longitudeDest: 106.628915),
Data(latitudeDest: -6.178293, longitudeDest: 106.631862),
];
}
class Data {
var latitudeDest;
var longitudeDest;
Data({this.latitudeDest, this.longitudeDest});
}