mirror of
https://github.com/block/buzz.git
synced 2026-11-12 04:12:21 +00:00
## Summary Make community onboarding easier to scan: shorten hosted hostname fallbacks, clarify Add Community instructions, and replace raw saved-key buttons with identity cards. Use white pages, grey cards, ghost secondary actions, standard page transitions, and a “Getting ready” screen during joining. Native profile setup keeps a horizontal modal transition. Identity cards load signed name/avatar metadata from saved communities without switching accounts; unavailable profiles use a neutral fallback. Cards show only the avatar, a 16px medium-weight name, and muted npub; community lists are omitted. Retiring profile setup closes its avatar editor too. ### Related issue Follow-up to #8687 and #8599; no duplicate PR found. ### Testing - Formatting and analysis passed. Full suite with hosted-auth defines: 4,019 passed, 5 skipped; includes profile-fetch and cancellation regressions. - Prior iOS device preview and native profile tests passed; hosted CI native Swift checks passed on the preceding head. Latest Dart fixes are not yet reinstalled on the phone. - Simulator walkthrough and owner-tested iPhone preview use sample identities and simulated admission. Sample-data previews; the identity snapshot shows the unavailable-profile fallback rendered by Flutter. Media is attached here only. | Community picker | Add Community | Saved identity | | --- | --- | --- | |  |  |  | --------- Signed-off-by: kenny lopez <klopez4212@gmail.com> Co-authored-by: Terp <5856f6900e8e0a4e0ea1f4f8d2ee33e4753d2119bc122f94ecafc660b46c0511@buzz.block.builderlab.xyz>
101 lines
3.1 KiB
Dart
101 lines
3.1 KiB
Dart
import 'package:flutter/gestures.dart';
|
|
import 'community_link_focus.dart';
|
|
import '../../shared/widgets/ios_community_link_input.dart';
|
|
import 'package:flutter/material.dart';
|
|
import '../../shared/widgets/onboarding_route.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
|
|
|
import '../../shared/deeplink/community_link_input.dart';
|
|
import '../../shared/theme/theme.dart';
|
|
import '../../shared/widgets/onboarding_step_page.dart';
|
|
|
|
part 'add_community_page/add_community_form.dart';
|
|
part 'add_community_page/add_community_connection.dart';
|
|
part 'add_community_page/pairing_reveal_surface.dart';
|
|
|
|
/// Fullscreen Add Community presentation; connection operations belong to callers.
|
|
class AddCommunityPage extends StatelessWidget {
|
|
const AddCommunityPage({
|
|
super.key,
|
|
required this.onBack,
|
|
required this.onCommunityLink,
|
|
required this.onPairing,
|
|
required this.onScan,
|
|
required this.onOpenCommunity,
|
|
required this.onSubmitPairing,
|
|
this.enteringCommunityLink = false,
|
|
this.existingUser = false,
|
|
this.scannerProgress = 0,
|
|
this.busy = false,
|
|
this.canSubmit = true,
|
|
this.errorMessage,
|
|
this.accountStatus,
|
|
this.onInputChanged,
|
|
});
|
|
|
|
final VoidCallback onBack;
|
|
final VoidCallback? onCommunityLink;
|
|
final VoidCallback? onPairing;
|
|
final VoidCallback? onScan;
|
|
final ValueChanged<Uri> onOpenCommunity;
|
|
final ValueChanged<String> onSubmitPairing;
|
|
final bool enteringCommunityLink;
|
|
final bool existingUser;
|
|
final double scannerProgress;
|
|
final bool busy;
|
|
final bool canSubmit;
|
|
final String? errorMessage;
|
|
final String? accountStatus;
|
|
final VoidCallback? onInputChanged;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final step = enteringCommunityLink
|
|
? 'link'
|
|
: existingUser
|
|
? 'pair'
|
|
: 'options';
|
|
final page = step == 'options' || step == 'link'
|
|
? _AddCommunityConnection(
|
|
key: const ValueKey('add-community-connection'),
|
|
enteringLink: enteringCommunityLink,
|
|
scannerProgress: scannerProgress,
|
|
accountStatus: accountStatus,
|
|
onBack: onBack,
|
|
onCommunityLink: onCommunityLink,
|
|
onPairing: onPairing,
|
|
onScan: onScan,
|
|
onOpenCommunity: onOpenCommunity,
|
|
busy: busy,
|
|
canSubmit: canSubmit,
|
|
errorMessage: errorMessage,
|
|
onInputChanged: onInputChanged,
|
|
)
|
|
: _AddCommunityForm(
|
|
key: ValueKey(step),
|
|
onBack: onBack,
|
|
onSubmitPairing: onSubmitPairing,
|
|
busy: busy,
|
|
canSubmit: canSubmit,
|
|
errorMessage: errorMessage,
|
|
onInputChanged: onInputChanged,
|
|
);
|
|
return PopScope(
|
|
canPop: false,
|
|
onPopInvokedWithResult: (didPop, _) {
|
|
if (!didPop) onBack();
|
|
},
|
|
child: Navigator(
|
|
onDidRemovePage: (_) {},
|
|
pages: [
|
|
OnboardingPage<void>(
|
|
key: ValueKey(step == 'pair' ? 'pair' : 'connection'),
|
|
child: page,
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|