From 392197b4a8381160a95857dbd37c0369fe063564 Mon Sep 17 00:00:00 2001 From: Andrei Lesnitsky Date: Tue, 15 Nov 2022 14:31:57 +0100 Subject: [PATCH 1/2] fix(ui): allow null countryCode for phone input --- .../lib/src/views/phone_input_view.dart | 2 +- .../lib/src/widgets/phone_input.dart | 4 +-- .../test/widgets/phone_input_test.dart | 34 +++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 packages/firebase_ui_auth/test/widgets/phone_input_test.dart diff --git a/packages/firebase_ui_auth/lib/src/views/phone_input_view.dart b/packages/firebase_ui_auth/lib/src/views/phone_input_view.dart index 6d1ca2c4e598..09ba316f1edd 100644 --- a/packages/firebase_ui_auth/lib/src/views/phone_input_view.dart +++ b/packages/firebase_ui_auth/lib/src/views/phone_input_view.dart @@ -121,7 +121,7 @@ class _PhoneInputViewState extends State { widget.subtitleBuilder!(context), if (state is AwaitingPhoneNumber || state is SMSCodeRequested) ...[ PhoneInput( - initialCountryCode: countryCode!, + initialCountryCode: countryCode, onSubmit: onSubmit(ctrl), key: phoneInputKey, ), diff --git a/packages/firebase_ui_auth/lib/src/widgets/phone_input.dart b/packages/firebase_ui_auth/lib/src/widgets/phone_input.dart index d52bccaa7e28..ed2c5b08ba31 100644 --- a/packages/firebase_ui_auth/lib/src/widgets/phone_input.dart +++ b/packages/firebase_ui_auth/lib/src/widgets/phone_input.dart @@ -85,7 +85,7 @@ class PhoneInput extends StatefulWidget { /// An initial country code that should be selected in the country code /// picker. - final String initialCountryCode; + final String? initialCountryCode; /// Returns a phone number from the [PhoneInput] that was provided a [key]. static String? getPhoneNumber(GlobalKey key) { @@ -101,7 +101,7 @@ class PhoneInput extends StatefulWidget { /// {@macro ui.auth.widgets.phone_input} const PhoneInput({ Key? key, - required this.initialCountryCode, + this.initialCountryCode, this.onSubmit, }) : super(key: key); diff --git a/packages/firebase_ui_auth/test/widgets/phone_input_test.dart b/packages/firebase_ui_auth/test/widgets/phone_input_test.dart new file mode 100644 index 000000000000..0002da215f35 --- /dev/null +++ b/packages/firebase_ui_auth/test/widgets/phone_input_test.dart @@ -0,0 +1,34 @@ +import 'package:firebase_ui_auth/src/widgets/phone_input.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('PhoneInput', () { + testWidgets('shows default country and country code', (tester) async { + await tester.pumpWidget( + const MaterialApp( + home: Scaffold( + body: PhoneInput(initialCountryCode: 'US'), + ), + ), + ); + + expect(find.text('United States'), findsOneWidget); + }); + + testWidgets( + 'prompts to select a country if initialCountryCode is null', + (tester) async { + await tester.pumpWidget( + const MaterialApp( + home: Scaffold( + body: PhoneInput(initialCountryCode: null), + ), + ), + ); + + expect(find.text('Choose a country'), findsOneWidget); + }, + ); + }); +} From e3f798fafcdacd74f693413d3cd0d941acaf9bb1 Mon Sep 17 00:00:00 2001 From: Andrei Lesnitsky Date: Wed, 23 Nov 2022 14:26:12 +0100 Subject: [PATCH 2/2] get country code from platform dispatcher --- packages/firebase_ui_auth/lib/src/views/phone_input_view.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/firebase_ui_auth/lib/src/views/phone_input_view.dart b/packages/firebase_ui_auth/lib/src/views/phone_input_view.dart index 09ba316f1edd..16c4a59c38c5 100644 --- a/packages/firebase_ui_auth/lib/src/views/phone_input_view.dart +++ b/packages/firebase_ui_auth/lib/src/views/phone_input_view.dart @@ -90,7 +90,8 @@ class _PhoneInputViewState extends State { @override Widget build(BuildContext context) { final l = FirebaseUILocalizations.labelsOf(context); - final countryCode = Localizations.localeOf(context).countryCode; + final countryCode = Localizations.localeOf(context).countryCode ?? + WidgetsBinding.instance.platformDispatcher.locale.countryCode; return AuthFlowBuilder( flowKey: widget.flowKey,