![](/img/trans.png)
[英]how can I use Future/Async function in a loop? (dart/flutter)
[英]How can I use the result of an async function in a Text in Flutter?
我這周開始學習 Flutter。 我正在嘗試使用 Geolocator 包獲取設備的位置,但我不習慣異步功能。 我想在 AppBar 標題的文本中使用 position.latitude。 我在代碼中寫了<位置信息在這里>以顯示正確的位置。 下面是我的代碼。
class HomeScreen extends StatelessWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: buildAppBar(context),
);
}
AppBar buildAppBar(context) {
var position = null;
getCurrentPosition().then((position) => {position = position});
return AppBar(
centerTitle: true,
backgroundColor: kPrimaryColor,
elevation: 0,
toolbarHeight: MediaQuery.of(context).size.height * 0.07,
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: const Icon(Icons.place),
iconSize: 15,
onPressed: () {},
),
const Text(<position information goes here>,
style: TextStyle(fontSize: 12)),
],
));
}
Future<Position> getCurrentPosition() async {
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
return position;
}
}
嘗試這樣的事情:
import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
var position = null;
@override
void initState() {
getCurrentPosition().then((position) {
setState(() {
position = position;
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: buildAppBar(context),
);
}
AppBar buildAppBar(context) {
return AppBar(
centerTitle: true,
backgroundColor: kPrimaryColor,
elevation: 0,
toolbarHeight: MediaQuery.of(context).size.height * 0.07,
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: const Icon(Icons.place),
iconSize: 15,
onPressed: () {},
),
const Text(position ?? '', style: TextStyle(fontSize: 12)),
],
));
}
Future<Position> getCurrentPosition() async {
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
return position;
}
}
如果您有任何問題,請給我反饋。
我不知道你想如何使用它。 但我會根據我對問題的理解給出我的解決方案。 首先,將 StatelessWidget 更改為 StatefulWidget。
然后您可以在 HomeScreen 類中定義位置變量並將當前位置設置為。 然后將此變量作為參數發送給 buildAppbar 函數:
AppBar buildAppBar(context, dynamic currentPos){...}
變量 currentPos 用於存儲從名為 getCurrentPosition 的異步函數獲得的值。
Text 小部件僅接受 String 數據類型,因此您可以使用 currPos.toString() 方法或根據需要使用它。
要從名為 getCurrentPosition 的異步函數獲取當前位置的值,並在創建小部件時將其分配給位置變量,然后將其發送到 buildAppbar 函數,您可以在代碼中執行以下操作。
*對不起,請參閱圖像中的代碼。 我用手機寫的,因為我現在沒有膝上,當我發布答案時,代碼格式出現錯誤。 因此,我將為代碼添加屏幕截圖並將其添加到此處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.