refactor(app): Material from material_ui instead of the SDK
Flutter 3.47 moved Material and Cupertino out of the SDK into material_ui and cupertino_ui, which ship weekly. The SDK imports are deprecated from the November 2026 stable release and removed in 2027, and the strict pre-push check would block every push then. The app's one Material import now comes from material_ui ^1.5.0, so everything built from here on uses the new import. Packages that still import package:flutter/material.dart (Serverpod's Flutter packages, later the rich-text editor) see the app's theme and localizations only through MaterialUiCompatibilityBridge, set in MaterialApp.builder. The bridge is deprecated on purpose, as a reminder to remove it, so its use carries a documented ignore until those packages have moved. google_fonts is removed: it was unused, and by default it downloads fonts from Google at runtime, which sends every user's IP address to Google. AGENTS.md: Material comes from material_ui. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
41e968c53e
commit
3f980c918c
4 changed files with 26 additions and 4 deletions
|
|
@ -77,6 +77,7 @@ A spaced-repetition learning app: studysets of flashcards, reviewed on an FSRS s
|
|||
- **Time comes from `clock.now()`** (`package:clock`), never `DateTime.now()`, in server and app. Why: scheduling, streaks and expiry are deterministic under test (`withClock`, `fakeAsync`), and because Serverpod itself reads `clock.now()` (e.g. session expiry), `withClock` controls its behaviour too.
|
||||
- **UTC for storing and sending, local time for display and day boundaries.** Serverpod sends `DateTime` as UTC and stores it in `timestamp without time zone` columns. Compare and compute in UTC; call `.toLocal()` only to display. "Due today", streaks and daily goals use the learner's **local** calendar day, computed on the client; the server never needs day boundaries.
|
||||
- **Build configuration comes from `--dart-define`.** The client holds no secrets, ever.
|
||||
- **Material comes from `package:material_ui`** (Cupertino from `package:cupertino_ui`), never from `package:flutter/material.dart`, which Flutter deprecates from its November 2026 release on. Packages still on the SDK's copy get the app's theme and localizations through `MaterialUiCompatibilityBridge` in `MaterialApp.builder`; remove it once they have moved.
|
||||
|
||||
## Testing
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:halkyon_learn_flutter/client.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
|
@ -25,6 +24,12 @@ class const HalkyonLearnApp({super.key}) extends StatelessWidget {
|
|||
title: 'Halkyon Learn',
|
||||
theme: _buildTheme(Brightness.light),
|
||||
darkTheme: _buildTheme(Brightness.dark),
|
||||
// Packages that still import package:flutter/material.dart (Serverpod's sign-in
|
||||
// widgets, the rich-text editor) see this app's theme and localizations only
|
||||
// through the bridge, since material_ui is a separate copy of that library. The
|
||||
// bridge is deprecated on purpose, as a reminder: remove it once they have moved.
|
||||
// ignore: deprecated_member_use
|
||||
builder: (context, child) => MaterialUiCompatibilityBridge(child: child!),
|
||||
home: Scaffold(appBar: AppBar(title: const Text('Halkyon Learn'))),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,9 +29,9 @@ dependencies:
|
|||
cupertino_icons: ^1.0.5
|
||||
flutter:
|
||||
sdk: flutter
|
||||
google_fonts: ^8.1.0
|
||||
halkyon_learn_client:
|
||||
path: ../halkyon_learn_client
|
||||
material_ui: ^1.5.0
|
||||
serverpod_auth_idp_flutter: 4.0.2
|
||||
serverpod_flutter: 4.0.2
|
||||
|
||||
|
|
|
|||
18
pubspec.lock
18
pubspec.lock
|
|
@ -201,6 +201,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.9"
|
||||
cupertino_ui:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cupertino_ui
|
||||
sha256: c23816577a1280cff409e989541767887011f8f1d8c1863a794ed308af46f2a9
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
dart_jsonwebtoken:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -623,6 +631,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.13.0"
|
||||
material_ui:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_ui
|
||||
sha256: "32d98f11cf5942a095a8c3e01b03e4de3b17941437713dcf36b1088fb62e23d2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.5.0"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -1462,4 +1478,4 @@ packages:
|
|||
version: "2.2.4"
|
||||
sdks:
|
||||
dart: ">=3.13.0 <4.0.0"
|
||||
flutter: ">=3.44.4 <4.0.0"
|
||||
flutter: ">=3.47.0 <4.0.0"
|
||||
|
|
|
|||
Loading…
Reference in a new issue