feat: unified shell, diagnostics pack, native Office, sticky board
All checks were successful
CI / Windows build (push) Successful in 14m22s

Make Surface remote debugging and classroom workflows viable: always-on
structured logs with one-click zip export, a single AppShell chrome,
OOXML PPTX/DOCX annotation without LibreOffice, and a first-class sticky
board. Also drop spike/legacy ink widgets and tighten pen feel
(predictor, PenInfoHistory, page-tile layer).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-05 17:55:27 +08:00
parent 3cabc7e074
commit d346cc2670
49 changed files with 2883 additions and 2515 deletions

View File

@@ -8,13 +8,16 @@ import '../l10n/app_localizations.dart';
import '../models/pen_tool.dart';
import '../models/pressure_curve.dart';
import '../providers/settings_provider.dart';
import '../screens/app_shell.dart' show exportDiagnosticPack;
import '../services/vault_service.dart';
import '../services/webdav_sync_service.dart';
import '../utils/stroke_stabilizer.dart';
/// Material 3 settings screen for BadNote.
class SettingsScreen extends ConsumerWidget {
const SettingsScreen({super.key});
const SettingsScreen({super.key, this.embeddedInShell = false});
final bool embeddedInShell;
void _showColorPicker(
BuildContext context,
@@ -88,9 +91,22 @@ class SettingsScreen extends ConsumerWidget {
final colorScheme = Theme.of(context).colorScheme;
return Scaffold(
appBar: AppBar(title: Text(AppLocalizations.of(context).settings)),
appBar: embeddedInShell
? AppBar(title: Text(AppLocalizations.of(context).settings))
: AppBar(title: Text(AppLocalizations.of(context).settings)),
body: ListView(
children: [
_SectionHeader(
title: AppLocalizations.of(context).diagnosticsSection,
icon: Icons.bug_report_outlined,
),
ListTile(
title: Text(AppLocalizations.of(context).diagnosticsExport),
subtitle: Text(AppLocalizations.of(context).diagnosticsExportHint),
trailing: const Icon(Icons.ios_share),
onTap: () => exportDiagnosticPack(context),
),
const Divider(),
_SectionHeader(title: 'Defaults', icon: Icons.tune),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),