Flutter Dev نشر 14 أكتوبر 2020 أرسل تقرير نشر 14 أكتوبر 2020 السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع اقوم ببرمجة صفحة تسجيل عضوية من خلال OTP فايربيس ولكن واجهتني مشكلة بسيطه بها الان يتم كتابة رقم الهاتف مع فتاح خط الدولة او كود الدولة انا اريد ان اضيف بوكس اختيار كود الدولة بحيث اني لن احتاج الى كتابة كود الدولة في تكس فيلد . اذا احد يعرف كيف ممكن اضيفه الى الكود الذي استعمله يفيدني لو تكرمتو. هذا الكود الذي استعمله حاليا: main import 'package:flutter/material.dart'; import 'package:phnauthnew/services/authservice.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: AuthService().handleAuth(), ); } } authservice page import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:phnauthnew/screens/dashboard.dart'; import 'package:phnauthnew/screens/loginpage.dart'; class AuthService { //Handles Auth handleAuth() { return StreamBuilder( stream: FirebaseAuth.instance.onAuthStateChanged, builder: (BuildContext context, snapshot) { if (snapshot.hasData) { return DashboardPage(); } else { return LoginPage(); } }); } //Sign out signOut() { FirebaseAuth.instance.signOut(); } //SignIn signIn(AuthCredential authCreds) { FirebaseAuth.instance.signInWithCredential(authCreds); } signInWithOTP(smsCode, verId) { AuthCredential authCreds = PhoneAuthProvider.getCredential( verificationId: verId, smsCode: smsCode); signIn(authCreds); } } loginpage page import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:phnauthnew/services/authservice.dart'; class LoginPage extends StatefulWidget { @override _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State<LoginPage> { final formKey = new GlobalKey<FormState>(); String phoneNo, verificationId, smsCode; bool codeSent = false; @override Widget build(BuildContext context) { return Scaffold( body: Form( key: formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Padding( padding: EdgeInsets.only(left: 25.0, right: 25.0), child: TextFormField( keyboardType: TextInputType.phone, decoration: InputDecoration(hintText: 'Enter phone number'), onChanged: (val) { setState(() { this.phoneNo = val; }); }, )), codeSent ? Padding( padding: EdgeInsets.only(left: 25.0, right: 25.0), child: TextFormField( keyboardType: TextInputType.phone, decoration: InputDecoration(hintText: 'Enter OTP'), onChanged: (val) { setState(() { this.smsCode = val; }); }, )) : Container(), Padding( padding: EdgeInsets.only(left: 25.0, right: 25.0), child: RaisedButton( child: Center(child: codeSent ? Text('Login'):Text('Verify')), onPressed: () { codeSent ? AuthService().signInWithOTP(smsCode, verificationId):verifyPhone(phoneNo); })) ], )), ); } Future<void> verifyPhone(phoneNo) async { final PhoneVerificationCompleted verified = (AuthCredential authResult) { AuthService().signIn(authResult); }; final PhoneVerificationFailed verificationfailed = (AuthException authException) { print('${authException.message}'); }; final PhoneCodeSent smsSent = (String verId, [int forceResend]) { this.verificationId = verId; setState(() { this.codeSent = true; }); }; final PhoneCodeAutoRetrievalTimeout autoTimeout = (String verId) { this.verificationId = verId; }; await FirebaseAuth.instance.verifyPhoneNumber( phoneNumber: phoneNo, timeout: const Duration(seconds: 5), verificationCompleted: verified, verificationFailed: verificationfailed, codeSent: smsSent, codeAutoRetrievalTimeout: autoTimeout); } } dashboard page import 'package:flutter/material.dart'; import 'package:phnauthnew/services/authservice.dart'; class DashboardPage extends StatefulWidget { @override _DashboardPageState createState() => _DashboardPageState(); } class _DashboardPageState extends State<DashboardPage> { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: RaisedButton( child: Text('Signout'), onPressed: () { AuthService().signOut(); }, ) ) ); } } اقتباس
0 ayoubridouani نشر 14 أكتوبر 2020 أرسل تقرير نشر 14 أكتوبر 2020 إضافة على جواب الأخ @Wael Aljamal أرشح لك package أخر بإسم: Phone Authentication Code Picker بحيث يمكنك من دمج منتقي رمز البلد لتحديد رمز طلب البلد المطلوب مع واجهة مستخدم سهلة وجذابة. أما بخصوص سؤالك التاني لطريقة دمجه مع تطبيقك, يمكنك أن تشاهد الشرح التالي: تدرب مع صاحب الفيديو ثم بعدها أضف الباكدج لتطبيقك الأساسي. اقتباس
1 Wael Aljamal نشر 14 أكتوبر 2020 أرسل تقرير نشر 14 أكتوبر 2020 يمكنك استخدام المكتبة country code picker المثال المضمن من مصمم المكتبة : import 'package:country_code_picker/country_code_picker.dart'; import 'package:country_code_picker/country_localizations.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override _MyAppState createState() => new _MyAppState(); } class _MyAppState extends State<MyApp> { @override Widget build(BuildContext context) { return new MaterialApp( supportedLocales: [ Locale('en'), Locale('it'), Locale('fr'), Locale('es'), Locale('de'), Locale('pt'), Locale('ko'), ], localizationsDelegates: [ CountryLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], home: new Scaffold( appBar: new AppBar( title: const Text('CountryPicker Example'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: <Widget>[ CountryCodePicker( onChanged: print, // Initial selection and favorite can be one of code ('IT') OR dial_code('+39') initialSelection: 'IT', favorite: ['+39', 'FR'], countryFilter: ['IT', 'FR'], showFlagDialog: false, comparator: (a, b) => b.name.compareTo(a.name), //Get the country information relevant to the initial selection onInit: (code) => print("on init ${code.name} ${code.dialCode} ${code.name}"), ), SizedBox( width: 400, height: 60, child: Padding( padding: const EdgeInsets.all(8.0), child: CountryCodePicker( onChanged: print, hideMainText: true, showFlagMain: true, showFlag: false, initialSelection: 'TF', hideSearch: true, showCountryOnly: true, showOnlyCountryWhenClosed: true, alignLeft: true, ), ), ), SizedBox( width: 400, height: 60, child: Padding( padding: const EdgeInsets.all(8.0), child: CountryCodePicker( onChanged: (e) => print(e.toLongString()), initialSelection: 'TF', showCountryOnly: true, showOnlyCountryWhenClosed: true, favorite: ['+39', 'FR'], ), ), ), SizedBox( width: 100, height: 60, child: Padding( padding: const EdgeInsets.all(8.0), child: CountryCodePicker( enabled: false, onChanged: (c) => c.name, initialSelection: 'TF', showCountryOnly: true, showOnlyCountryWhenClosed: true, favorite: ['+39', 'FR'], ), ), ), ], ), ), ), ); } } 1 اقتباس
0 Flutter Dev نشر 14 أكتوبر 2020 الكاتب أرسل تقرير نشر 14 أكتوبر 2020 بتاريخ 2 ساعات قال Wael Aljamal: يمكنك استخدام المكتبة country code picker المثال المضمن من مصمم المكتبة : import 'package:country_code_picker/country_code_picker.dart'; import 'package:country_code_picker/country_localizations.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override _MyAppState createState() => new _MyAppState(); } class _MyAppState extends State<MyApp> { @override Widget build(BuildContext context) { return new MaterialApp( supportedLocales: [ Locale('en'), Locale('it'), Locale('fr'), Locale('es'), Locale('de'), Locale('pt'), Locale('ko'), ], localizationsDelegates: [ CountryLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], home: new Scaffold( appBar: new AppBar( title: const Text('CountryPicker Example'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: <Widget>[ CountryCodePicker( onChanged: print, // Initial selection and favorite can be one of code ('IT') OR dial_code('+39') initialSelection: 'IT', favorite: ['+39', 'FR'], countryFilter: ['IT', 'FR'], showFlagDialog: false, comparator: (a, b) => b.name.compareTo(a.name), //Get the country information relevant to the initial selection onInit: (code) => print("on init ${code.name} ${code.dialCode} ${code.name}"), ), SizedBox( width: 400, height: 60, child: Padding( padding: const EdgeInsets.all(8.0), child: CountryCodePicker( onChanged: print, hideMainText: true, showFlagMain: true, showFlag: false, initialSelection: 'TF', hideSearch: true, showCountryOnly: true, showOnlyCountryWhenClosed: true, alignLeft: true, ), ), ), SizedBox( width: 400, height: 60, child: Padding( padding: const EdgeInsets.all(8.0), child: CountryCodePicker( onChanged: (e) => print(e.toLongString()), initialSelection: 'TF', showCountryOnly: true, showOnlyCountryWhenClosed: true, favorite: ['+39', 'FR'], ), ), ), SizedBox( width: 100, height: 60, child: Padding( padding: const EdgeInsets.all(8.0), child: CountryCodePicker( enabled: false, onChanged: (c) => c.name, initialSelection: 'TF', showCountryOnly: true, showOnlyCountryWhenClosed: true, favorite: ['+39', 'FR'], ), ), ), ], ), ), ), ); } } اهلا بيك اخوي طيب جميل هيا ما نحتاج لها بس تعرف وين المفترض بي استخدامها لدى الكود الذي رفعته انا؟ اقتباس
السؤال
Flutter Dev
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
اقوم ببرمجة صفحة تسجيل عضوية من خلال OTP فايربيس ولكن واجهتني مشكلة بسيطه بها
الان يتم كتابة رقم الهاتف مع فتاح خط الدولة او كود الدولة
انا اريد ان اضيف بوكس اختيار كود الدولة بحيث اني لن احتاج الى كتابة كود الدولة في تكس فيلد .
اذا احد يعرف كيف ممكن اضيفه الى الكود الذي استعمله يفيدني لو تكرمتو.
هذا الكود الذي استعمله حاليا:
main
import 'package:flutter/material.dart'; import 'package:phnauthnew/services/authservice.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: AuthService().handleAuth(), ); } }
authservice page
import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:phnauthnew/screens/dashboard.dart'; import 'package:phnauthnew/screens/loginpage.dart'; class AuthService { //Handles Auth handleAuth() { return StreamBuilder( stream: FirebaseAuth.instance.onAuthStateChanged, builder: (BuildContext context, snapshot) { if (snapshot.hasData) { return DashboardPage(); } else { return LoginPage(); } }); } //Sign out signOut() { FirebaseAuth.instance.signOut(); } //SignIn signIn(AuthCredential authCreds) { FirebaseAuth.instance.signInWithCredential(authCreds); } signInWithOTP(smsCode, verId) { AuthCredential authCreds = PhoneAuthProvider.getCredential( verificationId: verId, smsCode: smsCode); signIn(authCreds); } }
loginpage page
dashboard page
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.