Files
buzz/mobile/lib/shared/widgets/ios_community_link_input.dart
klopez4212 e922dc08ff Unify mobile onboarding and community entry screens (#8687)
## Summary

Use consistent fullscreen screens for identity setup, community
selection, joining, and Add Community. Restore all memberships and open
the selected community; share the community grid with the switcher.

Add QR-first choices, animated link entry with 12px keyboard clearance,
a two-finger double-tap pairing toggle, and the centered reversing bee
loader. Preserve cancellation, Back, and reduced-motion behavior.

Add intentionally omits community creation and Builderlab sign-in: this
route follows sign-in and the existing-community picker.

### Related issue

Related: #8628 (native profile setup). No duplicate fullscreen
onboarding PR found.

### Testing

- Full standard and hosted-authentication mobile suites, static
analysis, and required push checks passed.
- iPhone preview iterated with Kenny; final simulator walkthrough below
uses synthetic data and does not authenticate or save account changes.
- Independent review completed; regressions cover cancellation during
loading, Add recovery after failed/conflicting memberships, retrying
skipped communities, and explicit picker stages.

Walkthrough recorded before the copy and recovery followups:


https://github.com/user-attachments/assets/bfea3ad3-1dde-40c4-8748-44c84226c292

---------

Signed-off-by: kenny lopez <klopez4212@gmail.com>
Co-authored-by: Terp <5856f6900e8e0a4e0ea1f4f8d2ee33e4753d2119bc122f94ecafc660b46c0511@buzz.block.builderlab.xyz>
2026-10-29 16:12:31 +00:00

49 lines
1.4 KiB
Dart

import 'package:flutter/cupertino.dart';
import '../theme/theme.dart';
/// Borderless community address field used by both landing and Add entry.
class IosCommunityLinkInput extends StatelessWidget {
const IosCommunityLinkInput({
super.key,
required this.controller,
this.focusNode,
this.autofocus = false,
this.enabled = true,
this.onChanged,
this.onSubmitted,
});
final TextEditingController controller;
final FocusNode? focusNode;
final bool autofocus;
final bool enabled;
final ValueChanged<String>? onChanged;
final ValueChanged<String>? onSubmitted;
@override
Widget build(BuildContext context) => CupertinoTextField(
key: const Key('community-link-input'),
controller: controller,
focusNode: focusNode,
autofocus: autofocus,
enabled: enabled,
placeholder: 'Community link or address',
placeholderStyle: context.textTheme.titleLarge?.copyWith(
color: CupertinoColors.placeholderText.resolveFrom(context),
),
keyboardType: TextInputType.url,
textInputAction: TextInputAction.go,
autocorrect: false,
enableSuggestions: false,
padding: const EdgeInsets.symmetric(vertical: Grid.xs),
style: context.textTheme.titleLarge?.copyWith(
color: context.colors.onSurface,
),
cursorColor: context.colors.primary,
decoration: null,
onChanged: onChanged,
onSubmitted: onSubmitted,
);
}