Geolocator 地理位置
Geolocator 从设备 GPS 获取位置信息。支持 macOS、Windows、iOS、Android 和 web。 基于 geolocator Dart/Flutter 包。
Geolocator 控件是非视觉控件,应该添加到 page.overlay
列表中。
要构建使用 Geolocator
控件的 Flet 应用程序,请在 flet build
命令中添加 --include-packages flet_geolocator
,例如:
flet build apk --include-packages flet_geolocator
示例
基本示例
import flet as ft
async def main(page: ft.Page):
page.scroll = ft.ScrollMode.ADAPTIVE
page.appbar = ft.AppBar(title=ft.Text("地理定位器测试"))
def handle_position_change(e):
page.add(ft.Text(f"新位置: {e.latitude} {e.longitude}"))
gl = ft.Geolocator(
location_settings=ft.GeolocatorSettings(
accuracy=ft.GeolocatorPositionAccuracy.LOW
),
on_position_change=handle_position_change,
on_error=lambda e: page.add(ft.Text(f"错误: {e.data}")),
)
page.overlay.append(gl)
settings_dlg = lambda handler: ft.AlertDialog(
adaptive=True,
title=ft.Text("正在打开位置设置..."),
content=ft.Text(
"您即将被重定向到位置/应用设置。请找到此应用并授予其位置权限。"
),
actions=[ft.TextButton(text="带我去那里", on_click=handler)],
actions_alignment=ft.MainAxisAlignment.CENTER,
)
async def handle_permission_request(e):
p = await gl.request_permission_async(wait_timeout=60)
page.add(ft.Text(f"请求权限: {p}"))
async def handle_get_permission_status(e):
p = await gl.get_permission_status_async()
page.add(ft.Text(f"获取权限状态: {p}"))
async def handle_get_current_position(e):
p = await gl.get_current_position_async()
page.add(ft.Text(f"获取当前位置: ({p.latitude}, {p.longitude})"))
async def handle_get_last_known_position(e):
p = await gl.get_last_known_position_async()
page.add(ft.Text(f"获取最后已知位置: ({p.latitude}, {p.longitude})"))
async def handle_location_service_enabled(e):
p = await gl.is_location_service_enabled_async()
page.add(ft.Text(f"位置服务是否启用: {p}"))
async def handle_open_location_settings(e):
p = await gl.open_location_settings_async()
page.close(location_settings_dlg)
page.add(ft.Text(f"打开位置设置: {p}"))
async def handle_open_app_settings(e):
p = await gl.open_app_settings_async()
page.close(app_settings_dlg)
page.add(ft.Text(f"打开应用设置: {p}"))
location_settings_dlg = settings_dlg(handle_open_location_settings)
app_settings_dlg = settings_dlg(handle_open_app_settings)
page.add(
ft.Row(
wrap=True,
controls=[
ft.OutlinedButton(
"请求权限",
on_click=handle_permission_request,
),
ft.OutlinedButton(
"获取权限状态",
on_click=handle_get_permission_status,
),
ft.OutlinedButton(
"获取当前位置",
on_click=handle_get_current_position,
),
ft.OutlinedButton(
"获取最后已知位置",
visible=False if page.web else True,
on_click=handle_get_last_known_position,
),
ft.OutlinedButton(
"位置服务是否启用",
on_click=handle_location_service_enabled,
),
ft.OutlinedButton(
"打开位置设置",
visible=False if page.web else True,
on_click=lambda e: page.open(location_settings_dlg),
),
ft.OutlinedButton(
"打开应用设置",
visible=False if page.web else True,
on_click=lambda e: page.open(app_settings_dlg),
),
],
)
)
ft.app(main)
属性
location_settings
值的类型为 GeolocatorSettings
。
方法
get_current_position(accuracy, location_settings)
使用所需的精度和设置获取设备的当前位置。
此方法具有以下属性:
accuracy
:值的类型为GeolocatorPositionAccuracy
,默认为GeolocatorPositionAccuracy.BEST
。location_settings
:值的类型为GeolocatorSettings
。如果未指定,则使用location_settings
属性。
返回类型为 GeolocatorPosition
的实例。
注意:根据不同位置服务的可用性,这可能需要几秒钟。建议先调用 get_last_known_position()
方法以接收已知/缓存的位置,然后使用 get_current_position()
的结果进行更新。
get_last_known_position()
使用指定的精度获取设备的最后已知位置。精度可以使用 location_settings
属性进行定义。
返回类型为 GeolocatorPosition
的实例。
get_permission_status()
获取应用被授予访问设备位置的权限。
返回类型为 GeolocatorPermissionStatus
的实例。
request_permission()
请求设备访问设备的位置。
返回类型为 GeolocatorPermissionStatus
的实例。
is_location_service_enabled()
检查位置服务是否启用。
返回一个布尔值:如果位置服务已启用,则为 True
,否则为 False
。
open_app_settings()
尝试打开设备的应用设置。
返回一个布尔值:如果设备的设置已成功打开,则为 True
,否则为 False
。
open_location_settings()
尝试打开设备的位置设置。
返回一个布尔值:如果设备的设置已成功打开,则为 True
,否则为 False
。
事件
on_error
当发生错误时触发。
on_position_change
当设备的位置发生变化时触发。事件处理程序的参数是类型为 GeolocatorPositionChangeEvent
的实例。
get_permission_status()
获取应用程序获取设备位置的权限状态。
返回类型为 GeolocatorPermissionStatus
的实例。
request_permission()
请求设备获取位置权限。
返回类型为 GeolocatorPermissionStatus
的实例。
is_location_service_enabled()
检查位置服务是否启用。
返回一个布尔值:True
如果位置服务启用 ,False
否则。
open_app_settings()
尝试打开设备的应用程序设置。
返回一个布尔值:True
如果设备的设置成功打开,False
否则。
open_location_settings()
尝试打开设备的位置设置。
返回一个布尔值:True
如果设备的设置成功打开,False
否则。
事件
on_error
当发生错误时触发。
on_position_change
当设备位置发生变化时触发。