ux: bulk WIP — UxPlugin→XPlugin rename + new anim/core/navi/reactive packages

Catch-all commit for outstanding pre-existing local changes. Mixes
several themes that would normally be split:

- Rename: UxPlugin → XPlugin across iOS, macOS, Android registrants.
- New top-level packages under lib/src/: anim/ (animated values,
  panes, sheets, dock, measured), core/ (Emitter, ReactiveBuilder
  scaffolding, presenter/widget/value/dispose primitives), navi/
  (Screen/ScreenStack/Router/hero/transitions), reactive/.
- Edits across existing plugins (clipboard, crash, file, gallery,
  keyboard, scanner, sensor, url) to align with the new core.
- Test updates and CHANGELOG/README touches accompanying the above.
This commit is contained in:
agra
2026-05-21 08:58:07 +03:00
parent a508aca2bb
commit d68a2978eb
83 changed files with 5006 additions and 275 deletions

View File

@@ -8,7 +8,7 @@ void main() => runApp(MaterialApp(
home: ChatScreen(),
));
/// Demonstrates UxKeyboard in a chat UI:
/// Demonstrates XKeyboard in a chat UI:
/// - Frame-accurate keyboard height tracking (no Flutter viewInsets lag)
/// - Interactive dismiss (swipe the keyboard down like iMessage)
/// - Scroll freeze while the user is panning the keyboard
@@ -20,7 +20,7 @@ class ChatScreen extends StatefulWidget {
}
class _ChatScreenState extends State<ChatScreen> {
final _keyboard = UxKeyboard.instance;
final _keyboard = XKeyboard.instance;
final _textController = TextEditingController();
final _messages = List.generate(
30,
@@ -54,8 +54,8 @@ class _ChatScreenState extends State<ChatScreen> {
// Disable Flutter's built-in resize — we handle it ourselves.
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(title: Text('UxKeyboard Chat')),
// ListenableBuilder rebuilds only when UxKeyboard notifies (height changes).
appBar: AppBar(title: Text('XKeyboard Chat')),
// ListenableBuilder rebuilds only when XKeyboard notifies (height changes).
body: ListenableBuilder(
listenable: _keyboard,
builder: (context, _) {

View File

@@ -8,5 +8,5 @@ import Foundation
import ux
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
UxPlugin.register(with: registry.registrar(forPlugin: "UxPlugin"))
XPlugin.register(with: registry.registrar(forPlugin: "XPlugin"))
}

View File

@@ -510,7 +510,7 @@ packages:
path: ".."
relative: true
source: path
version: "0.9.0"
version: "0.10.0"
vector_math:
dependency: transitive
description:

View File

@@ -5,7 +5,7 @@ import 'package:ux_example/main.dart';
void main() {
testWidgets('ChatScreen renders', (WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(home: ChatScreen()));
expect(find.text('UxKeyboard Chat'), findsOneWidget);
expect(find.text('XKeyboard Chat'), findsOneWidget);
expect(find.text('Type a message...'), findsOneWidget);
});
}