跳到主要内容

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.window.always_on_top = True
page.on_error = lambda e: print(f"Page Error: {e.data}")
page.scroll = ft.ScrollMode.ADAPTIVE
page.appbar = ft.AppBar(title=ft.Text("Geolocator 测试"))
gl = ft.Geolocator()
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,
)

def handle_permission_request(e):
page.add(ft.Text(f"request_permission: {gl.request_permission()}"))

def handle_get_permission_status(e):
page.add(ft.Text(f"get_permission_status: {gl.get_permission_status()}"))

def handle_get_current_position(e):
p = gl.get_current_position()
page.add(ft.Text(f"get_current_position: ({p.latitude}, {p.longitude})"))

def handle_get_last_known_position(e):
p = gl.get_last_known_position()
page.add(ft.Text(f"get_last_known_position: ({p.latitude}, {p.longitude})"))

def handle_location_service_enabled(e):
page.add(
ft.Text(f"is_location_service_enabled: {gl.is_location_service_enabled()}")
)

def handle_open_location_settings(e):
page.close_dialog()
page.add(ft.Text(f"open_location_settings: {gl.open_location_settings()}"))

def handle_open_app_settings(e):
page.close_dialog()
page.add(ft.Text(f"open_app_settings: {gl.open_app_settings()}"))

page.add(
ft.Row(
[
ft.OutlinedButton(
"request_permission",
on_click=handle_permission_request,
),
ft.OutlinedButton(
"get_permission_status",
on_click=handle_get_permission_status,
),
ft.OutlinedButton(
"get_current_position",
on_click=handle_get_current_position,
),
ft.OutlinedButton(
"get_last_known_position",
visible=False if page.web else True,
on_click=handle_get_last_known_position,
),
ft.OutlinedButton(
"is_location_service_enabled",
on_click=handle_location_service_enabled,
),
ft.OutlinedButton(
"open_location_settings",
visible=False if page.web else True,
on_click=lambda e: page.show_dialog(
settings_dlg(handle_open_location_settings)
),
),
ft.OutlinedButton(
"open_app_settings",
visible=False if page.web else True,
on_click=lambda e: page.show_dialog(
settings_dlg(handle_open_app_settings)
),
),
],
wrap=True,
)
)


ft.app(main)

方法

get_current_position(accuracy)

获取设备的当前位置,指定所需的精度。

此方法具有以下属性:

返回类型为 GeolocatorPosition 的实例。

注意: 根据不同位置服务的可用性,这可能需要几秒钟。 建议先调用 get_last_known_position() 方法来获取已知/缓存的位置,然后更新 get_current_position() 的结果

get_last_known_position(accuracy)

获取设备的最后已知位置,指定所需的精度。accuracy 参数类型为 [`Geol

get_last_known_position(accuracy)

获取设备的最后已知位置,指定所需的精度。accuracy 参数类型为 GeolocatorPositionAccuracy,默认为 GeolocatorPositionAccuracy.BEST

返回类型为 GeolocatorPosition 的实例。

get_permission_status()

获取应用程序获取设备位置的权限状态。

返回类型为 GeolocatorPermissionStatus 的实例。

request_permission()

请求设备获取位置权限。

返回类型为 GeolocatorPermissionStatus 的实例。

is_location_service_enabled()

检查位置服务是否启用。

返回一个布尔值:True 如果位置服务启用,False 否则。

open_app_settings()

尝试打开设备的应用程序设置。

返回一个布尔值:True 如果设备的设置成功打开,False 否则。

open_location_settings()

尝试打开设备的位置设置。

返回一个布尔值:True 如果设备的设置成功打开,False 否则。