import flet as ft
from flet_geolocator import Geolocator, GeolocatorPositionChangeEvent
@ft.component
def SensorsApp():
# Stateها
accelerometer_text, set_accelerometer_text = ft.use_state("در انتظار دریافت داده...")
gyroscope_text, set_gyroscope_text = ft.use_state("در انتظار دریافت داده...")
magnetometer_text, set_magnetometer_text = ft.use_state("در انتظار دریافت داده...")
geolocator_text, set_geolocator_text = ft.use_state("در انتظار دریافت داده...")
shake_text, set_shake_text = ft.use_state("در انتظار تکان دادن...")
# هندلر شیک دیتکتور
def on_shake(_):
set_shake_text("✅ تکان خوردن تشخیص داده شد!")
# میتوانید بعد از 2 ثانیه متن را برگردانید
import asyncio
async def reset_text():
await asyncio.sleep(2)
set_shake_text("در انتظار تکان دادن...")
# اجرای ریست متن بعد از 2 ثانیه
ft.run_coroutine(reset_text())
# هندلرهای سایر سنسورها (Accelerometer, Gyroscope, Magnetometer)
async def on_accelerometer(e: ft.AccelerometerReadingEvent):
set_accelerometer_text(f"X: {e.x:.2f} m/s²\nY: {e.y:.2f} m/s²\nZ: {e.z:.2f} m/s²")
async def on_gyroscope(e: ft.GyroscopeReadingEvent):
set_gyroscope_text(f"X: {e.x:.2f} rad/s\nY: {e.y:.2f} rad/s\nZ: {e.z:.2f} rad/s")
async def on_magnetometer(e: ft.MagnetometerReadingEvent):
set_magnetometer_text(f"X: {e.x:.2f} μT\nY: {e.y:.2f} μT\nZ: {e.z:.2f} μT")
# هندلر موقعیتیاب - کاملاً ساده
async def on_geolocator_position(e: GeolocatorPositionChangeEvent):
set_geolocator_text(
f"عرض: {e.latitude:.6f}°\n"
f"طول: {e.longitude:.6f}°\n"
f"دقت: {e.accuracy:.1f} متر"
)
async def on_geolocator_error(e):
set_geolocator_text("⚠️ خطا در دریافت موقعیت\nلطفاً GPS را فعال کنید")
# ثبت سنسورها
ft.use_ref(lambda: ft.Accelerometer(on_reading=on_accelerometer, enabled=True))
ft.use_ref(lambda: ft.Gyroscope(on_reading=on_gyroscope, enabled=True))
ft.use_ref(lambda: ft.Magnetometer(on_reading=on_magnetometer, enabled=True))
# ثبت ShakeDetector
ft.use_ref(lambda: ft.ShakeDetector(
minimum_shake_count=2,
shake_slop_time_ms=300,
shake_count_reset_time_ms=1000,
on_shake=on_shake,
))
# ثبت موقعیتیاب - فقط با ضروریترین تنظیمات
ft.use_ref(lambda: Geolocator(
on_position_change=on_geolocator_position,
on_error=on_geolocator_error
))
# تابع کمکی برای ساخت کارت سنسورها (بدون تغییر)
def sensor_card(title, icon, value, color):
return ft.Container(
content=ft.Column([
ft.Row([
ft.Icon(icon, color=color, size=24),
ft.Text(title, size=18, weight=ft.FontWeight.BOLD, color=color),
], spacing=10),
ft.Divider(height=1, color=color),
ft.Text(value, size=14, text_align=ft.TextAlign.CENTER),
], spacing=10),
padding=15,
bgcolor=ft.Colors.WHITE,
border_radius=15,
border=ft.border.all(2, color),
shadow=ft.BoxShadow(
spread_radius=1,
blur_radius=10,
color=ft.Colors.BLACK12,
),
)
return ft.Column(
[
ft.Text("سنسورهای دستگاه", size=28, weight=ft.FontWeight.BOLD),
ft.Text("اطلاعات لحظهای سنسورها", size=14, color=ft.Colors.GREY),
ft.Divider(height=20),
ft.ResponsiveRow([
ft.Column(col={"sm": 12, "md": 6}, controls=[
sensor_card("شتابسنج", ft.Icons.SPEED, accelerometer_text, ft.Colors.BLUE),
]),
ft.Column(col={"sm": 12, "md": 6}, controls=[
sensor_card("ژیروسکوپ", ft.Icons.ROTATE_RIGHT, gyroscope_text, ft.Colors.GREEN),
]),
ft.Column(col={"sm": 12, "md": 6}, controls=[
sensor_card("مغناطیسسنج", ft.Icons.COMPASS_CALIBRATION, magnetometer_text, ft.Colors.ORANGE),
]),
ft.Column(col={"sm": 12, "md": 6}, controls=[
sensor_card("موقعیتیاب GPS", ft.Icons.LOCATION_ON, geolocator_text, ft.Colors.RED),
]),
ft.Column(col={"sm": 12, "md": 12}, controls=[
sensor_card("تشخیص تکان خوردن", ft.Icons.HANDSHAKE_SHARP, shake_text, ft.Colors.PURPLE),
]),
], spacing=15),
],
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
scroll=ft.ScrollMode.AUTO,
)
ft.run(lambda page: page.render(SensorsApp), port=8550)
Duplicate Check
Describe the bug
Shake not worked in my android mobile
Code sample
Code
To reproduce
Expected behavior
No response
Screenshots / Videos
Captures
[Upload media here]
Operating System
Windows
Operating system details
11
Flet version
0.84.0
Regression
I'm not sure / I don't know
Suggestions
No response
Logs
Logs
[Paste your logs here]Additional details
No response