new: wearos detect (#358)

This commit is contained in:
lollipopkit
2024-05-22 18:45:23 +08:00
parent 9919f9038f
commit 2c5886de09
13 changed files with 268 additions and 161 deletions

View File

@@ -5,7 +5,6 @@ import 'package:fl_lib/fl_lib.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:icons_plus/icons_plus.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:toolbox/core/channel/home_widget.dart';
import 'package:toolbox/core/extension/build.dart';
import 'package:toolbox/core/extension/context/locale.dart';
@@ -23,9 +22,7 @@ import 'package:wakelock_plus/wakelock_plus.dart';
part 'appbar.dart';
class HomePage extends StatefulWidget {
final bool fullScreen;
const HomePage({super.key, this.fullScreen = false});
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
@@ -157,17 +154,17 @@ class _HomePageState extends State<HomePage>
}
},
),
bottomNavigationBar: widget.fullScreen
? null
: ValBuilder(
listenable: _isLandscape,
builder: (ls) {
return ListenableBuilder(
bottomNavigationBar: ValBuilder(
listenable: _isLandscape,
builder: (ls) {
return Stores.setting.fullScreen.fetch()
? UIs.placeholder
: ListenableBuilder(
listenable: _selectIndex,
builder: (_, __) => _buildBottomBar(ls),
);
},
),
},
),
);
}
@@ -337,7 +334,7 @@ ${GithubIds.participants.map((e) => '[$e](${e.url})').join(' ')}
// Auth required for first launch
if (Stores.setting.useBioAuth.fetch()) BioAuth.go();
_reqNotiPerm();
//_reqNotiPerm();
if (Stores.setting.autoCheckAppUpdate.fetch()) {
AppUpdateIface.doUpdate(
@@ -352,28 +349,27 @@ ${GithubIds.participants.map((e) => '[$e](${e.url})').join(' ')}
await Pros.server.refresh();
}
// It's required by RUpgrade to send update progress
Future<void> _reqNotiPerm() async {
if (!isAndroid) return;
final suc = await PermUtils.request(Permission.notification);
if (!suc) {
final noNotiPerm = Stores.setting.noNotiPerm;
if (noNotiPerm.fetch()) return;
context.showRoundDialog(
title: l10n.error,
child: Text(l10n.noNotiPerm),
actions: [
TextButton(
onPressed: () {
noNotiPerm.put(true);
context.pop();
},
child: Text(l10n.ok),
),
],
);
}
}
// Future<void> _reqNotiPerm() async {
// if (!isAndroid) return;
// final suc = await PermUtils.request(Permission.notification);
// if (!suc) {
// final noNotiPerm = Stores.setting.noNotiPerm;
// if (noNotiPerm.fetch()) return;
// context.showRoundDialog(
// title: l10n.error,
// child: Text(l10n.noNotiPerm),
// actions: [
// TextButton(
// onPressed: () {
// noNotiPerm.put(true);
// context.pop();
// },
// child: Text(l10n.ok),
// ),
// ],
// );
// }
// }
Future<void> _onLongPressSetting() async {
final map = Stores.setting.box.toJson(includeInternal: false);

View File

@@ -0,0 +1,86 @@
import 'dart:async';
import 'package:after_layout/after_layout.dart';
import 'package:fl_lib/fl_lib.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/data/model/server/server.dart';
import 'package:toolbox/data/provider/server.dart';
import 'package:toolbox/data/res/build_data.dart';
import 'package:toolbox/data/res/provider.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:toolbox/data/res/url.dart';
final class WearHome extends StatefulWidget {
const WearHome({super.key});
@override
_WearHomeState createState() => _WearHomeState();
}
final class _WearHomeState extends State<WearHome> with AfterLayoutMixin {
late final _pageCtrl =
PageController(initialPage: Pros.server.servers.isNotEmpty ? 1 : 0);
@override
Widget build(BuildContext context) {
return _buildBody();
}
Widget _buildBody() {
return Consumer<ServerProvider>(builder: (_, pro, __) {
if (pro.servers.isEmpty) {
return const Center(child: Text('No server'));
}
return PageView.builder(
controller: _pageCtrl,
itemCount: pro.servers.length + 1,
itemBuilder: (_, index) {
if (index == 0) return _buildInit();
final id = pro.serverOrder[index];
final server = Pros.server.pick(id: id);
if (server == null) return UIs.placeholder;
return _buildEachSever(server);
},
);
});
}
Widget _buildInit() {
return Center(
child: Column(
children: [
IconButton(onPressed: () {}, icon: const Icon(Icons.add)),
UIs.height7,
Text(l10n.restore)
],
),
);
}
Widget _buildEachSever(Server srv) {
return const Padding(
padding: EdgeInsets.all(7),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [],
),
);
}
@override
FutureOr<void> afterFirstLayout(BuildContext context) async {
if (Stores.setting.autoCheckAppUpdate.fetch()) {
AppUpdateIface.doUpdate(
build: BuildData.build,
url: '${Urls.cdnBase}/update.json',
context: context,
updateL10n: l10n.update,
);
}
await Pros.server.load();
await Pros.server.refresh();
}
}