wearos: ambient support

This commit is contained in:
4831c0 2025-04-02 20:03:10 +02:00
parent b3ceb4d5de
commit 97462997a8
Signed by: 4831c0
GPG Key ID: 3F97EDDF98E45AA4
4 changed files with 56 additions and 14 deletions

View File

@ -3,6 +3,8 @@ import 'dart:async';
import 'package:firka/helpers/api/model/timetable.dart';
import 'package:firka/wear_main.dart';
import 'package:flutter/material.dart';
import 'package:wakelock_plus/wakelock_plus.dart';
import 'package:wear_plus/wear_plus.dart';
import '../../../ui/colors.dart';
import '../../../ui/widgets/circular_progress_indicator.dart';
@ -24,6 +26,7 @@ class _WearHomeScreenState extends State<WearHomeScreen> {
DateTime now = DateTime.now();
Timer? timer;
bool init = false;
WearMode mode = WearMode.active;
@override
void initState() {
@ -58,7 +61,9 @@ class _WearHomeScreenState extends State<WearHomeScreen> {
});
}
List<Widget> buildBody(BuildContext context) {
List<Widget> buildBody(BuildContext context, WearMode mode) {
WakelockPlus.enable();
var body = List<Widget>.empty(growable: true);
if (!init) {
return body;
@ -148,8 +153,11 @@ class _WearHomeScreenState extends State<WearHomeScreen> {
),
Center(
child: Text(
"${currentBreakProgress.inMinutes} "
"min${currentBreakProgress.inMinutes == 1 ? '' : 's'} left",
currentBreakProgress.inMinutes < 1
? "less than a minute left"
: "${currentBreakProgress.inMinutes} "
"min${currentBreakProgress.inMinutes == 1 ? '' : 's'} "
"left",
style: TextStyle(color: defaultColors.secondaryText, fontSize: 16),
),
),
@ -184,7 +192,9 @@ class _WearHomeScreenState extends State<WearHomeScreen> {
),
Center(
child: Text(
"${timeLeft.inMinutes} "
timeLeft.inMinutes < 1
? "less than a minute left"
: "${timeLeft.inMinutes} "
"min${timeLeft.inMinutes == 1 ? '' : 's'} left",
style: TextStyle(
color: defaultColors.secondaryText, fontSize: 16),
@ -203,13 +213,46 @@ class _WearHomeScreenState extends State<WearHomeScreen> {
@override
Widget build(BuildContext context) {
var body = buildBody(context);
return Scaffold(
backgroundColor: defaultColors.ambientBackgroundColor,
backgroundColor: mode == WearMode.active
? defaultColors.activeBackgroundColor
: defaultColors.ambientBackgroundColor,
body: Center(
child: Column(
children: [
WatchShape(builder: (context, shape, child) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: body,
children: <Widget>[
child!,
],
);
},
child: AmbientMode(
builder: (context, mode, child) {
if (this.mode != mode) {
Timer(Duration(milliseconds: 100), () {
setState(() {
this.mode = mode;
});
});
}
return Column(
mainAxisAlignment: MainAxisAlignment.center,
// children: buildBody(context, mode),
children: <Widget>[
Container(
padding: EdgeInsets.only(top: 75),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: buildBody(context, mode),
)
),
],
);
},
),)
],
),
),
);

View File

@ -2,6 +2,7 @@
import 'package:firka/wear_main.dart';
import 'package:flutter/material.dart';
import 'package:wakelock_plus/wakelock_plus.dart';
class WearLoginScreen extends StatelessWidget {
final WearAppInitialization data;
@ -9,6 +10,7 @@ class WearLoginScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
WakelockPlus.disable();
return Scaffold(
appBar: AppBar(
title: const Text('Stub'),

View File

@ -2,7 +2,7 @@ import 'dart:ui';
class WearColors {
Color backgroundColor;
Color activeBackgroundColor;
Color ambientBackgroundColor;
Color radiusColor;
Color primaryText;
@ -10,7 +10,7 @@ class WearColors {
Color tertiaryText;
WearColors({
required this.backgroundColor,
required this.activeBackgroundColor,
required this.ambientBackgroundColor,
required this.radiusColor,
required this.primaryText,
@ -21,7 +21,7 @@ class WearColors {
}
WearColors defaultColors = WearColors(
backgroundColor: Color(0xff0c1201),
activeBackgroundColor: Color(0xff0c1201),
ambientBackgroundColor: Color(0xff000000),
radiusColor: Color(0xffa6dc22),
primaryText: Color(0xffcbee71),

View File

@ -9,7 +9,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:isar/isar.dart';
import 'package:path_provider/path_provider.dart';
import 'package:wakelock_plus/wakelock_plus.dart';
import 'package:wear_plus/wear_plus.dart';
import 'helpers/api/client/kreta_client.dart';
@ -60,8 +59,6 @@ Future<WearAppInitialization> initializeApp() async {
}
void wearMain(MethodChannel platform) async {
WakelockPlus.disable();
// TODO: fix the error handling currently not pushing to the error page
WidgetsFlutterBinding.ensureInitialized();