1. قبل از شروع
در این کد لبه، یاد خواهید گرفت که چگونه با استفاده از بسته UI FlutterFire، احراز هویت Firebase را به برنامه Flutter خود اضافه کنید. با استفاده از این بسته، هم احراز هویت ایمیل/گذرواژه و هم تأیید اعتبار Google Sign In را به برنامه Flutter اضافه خواهید کرد. همچنین یاد خواهید گرفت که چگونه یک پروژه Firebase را راه اندازی کنید و از FlutterFire CLI برای مقداردهی اولیه Firebase در برنامه Flutter خود استفاده کنید.
پیش نیازها
این کد لبه فرض می کند که شما تجربه فلاتر دارید. اگر نه، ممکن است بخواهید ابتدا اصول اولیه را یاد بگیرید. لینک های زیر مفید هستند:
- از چارچوب ویجت فلاتر بازدید کنید
- برنامه Write Your First Flutter، قسمت 1 Codelab را امتحان کنید
شما همچنین باید تجربه Firebase داشته باشید، اما اگر هرگز Firebase را به پروژه Flutter اضافه نکرده باشید، اشکالی ندارد. اگر با کنسول Firebase آشنا نیستید یا کاملاً با Firebase تازه کار هستید، ابتدا پیوندهای زیر را ببینید:
آنچه شما ایجاد خواهید کرد
این لبه کد شما را در ساخت جریان احراز هویت برای یک برنامه Flutter با استفاده از Firebase برای احراز هویت راهنمایی می کند. این برنامه دارای یک صفحه ورود به سیستم، یک صفحه "ثبت نام"، یک صفحه بازیابی رمز عبور و یک صفحه نمایه کاربر خواهد بود.
چیزی که یاد خواهید گرفت
این کد لبه شامل موارد زیر است:
- افزودن Firebase به برنامه Flutter
- راه اندازی کنسول Firebase
- استفاده از Firebase CLI برای افزودن Firebase به برنامه شما
- استفاده از FlutterFire CLI برای ایجاد پیکربندی Firebase در دارت
- افزودن احراز هویت Firebase به برنامه Flutter شما
- راه اندازی Firebase Authentication در کنسول
- افزودن ایمیل و رمز عبور با بسته
firebase_ui_auth
وارد شوید - افزودن ثبت نام کاربر با بسته
firebase_ui_auth
- افزودن یک "گذرواژه را فراموش کرده اید؟" صفحه
- افزودن Google Sign-in با
firebase_ui_auth
- در حال پیکربندی برنامه خود برای کار با چندین ارائه دهنده ورود به سیستم.
- با بسته
firebase_ui_auth
یک صفحه نمایه کاربر به برنامه خود اضافه کنید
این Codelab به طور خاص با افزودن یک سیستم احراز هویت قوی با استفاده از بسته firebase_ui_auth
مرتبط است. همانطور که خواهید دید، کل این برنامه، با تمام ویژگی های فوق، با حدود 100 خط کد قابل پیاده سازی است.
آنچه شما نیاز دارید
- دانش کاری Flutter و SDK نصب شده است
- یک ویرایشگر متن (JetBrains IDE، Android Studio و VS Code توسط Flutter پشتیبانی می شوند)
- مرورگر Google Chrome یا دیگر هدف توسعه ترجیحی شما برای Flutter. (برخی از دستورات ترمینال در این کد لبه فرض می کنند که شما برنامه خود را در کروم اجرا می کنید)
2. یک پروژه Firebase ایجاد و راه اندازی کنید
اولین کاری که باید انجام دهید ایجاد یک پروژه Firebase در کنسول وب Firebase است.
یک پروژه Firebase ایجاد کنید
- وارد Firebase شوید.
- در کنسول Firebase، روی افزودن پروژه (یا ایجاد پروژه ) کلیک کنید و نامی برای پروژه Firebase خود وارد کنید (به عنوان مثال، " FlutterFire-UI-Codelab ").
- روی گزینه های ایجاد پروژه کلیک کنید. در صورت درخواست، شرایط Firebase را بپذیرید. از تنظیم Google Analytics صرفنظر کنید، زیرا از Analytics برای این برنامه استفاده نخواهید کرد.
برای کسب اطلاعات بیشتر درباره پروژههای Firebase، به درک پروژههای Firebase مراجعه کنید.
ورود به ایمیل را برای احراز هویت Firebase فعال کنید
برنامهای که میسازید از احراز هویت Firebase استفاده میکند تا به کاربران شما اجازه دهد وارد برنامه شما شوند. همچنین به کاربران جدید اجازه می دهد تا از برنامه Flutter ثبت نام کنند.
احراز هویت Firebase باید با استفاده از Firebase Console فعال شود و پس از فعال شدن نیاز به پیکربندی خاصی دارد.
برای اینکه به کاربران اجازه دهید وارد برنامه وب شوند، ابتدا از روش ورود به سیستم ایمیل/گذرواژه استفاده خواهید کرد. بعداً، روش Google Sign-In را اضافه خواهید کرد.
- در کنسول Firebase، منوی Build را در پانل سمت چپ گسترش دهید.
- روی Authentication کلیک کنید، و سپس روی دکمه شروع ، سپس برگه روش ورود به سیستم (یا برای رفتن مستقیم به برگه روش ورود اینجا را کلیک کنید ).
- روی ایمیل/گذرواژه در لیست ارائه دهندگان ورود به سیستم کلیک کنید، سوئیچ Enable را روی موقعیت روشن قرار دهید و سپس روی ذخیره کلیک کنید.
3. برنامه Flutter را راه اندازی کنید
قبل از شروع باید کد شروع را دانلود کنید و Firebase CLI را نصب کنید.
کد شروع را دریافت کنید
مخزن GitHub را از خط فرمان کلون کنید:
git clone https://github.com/flutter/codelabs.git flutter-codelabs
یا اگر ابزار CLI GitHub را نصب کرده اید:
gh repo clone flutter/codelabs flutter-codelabs
کد نمونه باید در دایرکتوری flutter-codelabs
در دستگاه شما کلون شود، که حاوی کد مجموعه ای از codelabs است. کد این Codelab در زیر شاخه flutter-codelabs/firebase-auth-flutterfire-ui
است.
دایرکتوری flutter-codelabs/firebase-auth-flutterfire-ui
شامل دو پروژه Flutter است. یکی complete
و دیگری start
نامیده می شود. دایرکتوری start
حاوی یک پروژه ناقص است و جایی است که بیشترین زمان را در آن صرف خواهید کرد.
cd flutter-codelabs/firebase-auth-flutterfire-ui/start
اگر میخواهید به جلو پرش کنید، یا ببینید که پس از تکمیل، چه چیزی باید به نظر برسد، به دایرکتوری با نام کامل برای ارجاع متقابل نگاه کنید.
اگر میخواهید همراه با Codelab دنبال کنید و خودتان کد اضافه کنید، باید با برنامه Flutter در flutter-codelabs/firebase-auth-flutterfire-ui/start
شروع کنید و کد را در سراسر Codelab به آن پروژه اضافه کنید. آن دایرکتوری را در IDE دلخواه خود باز کنید یا وارد کنید.
Firebase CLI را نصب کنید
Firebase CLI ابزارهایی برای مدیریت پروژه های Firebase شما فراهم می کند. CLI برای FlutterFire CLI مورد نیاز است که بعداً آن را نصب خواهید کرد.
راه های مختلفی برای نصب CLI وجود دارد. ساده ترین راه، اگر از MacOS یا Linux استفاده می کنید، این است که این دستور را از ترمینال خود اجرا کنید:
curl -sL https://firebase.tools | bash
پس از نصب CLI، باید با Firebase احراز هویت کنید.
- با اجرای دستور زیر با استفاده از حساب Google خود وارد Firebase شوید:
firebase login
- این دستور ماشین محلی شما را به Firebase متصل می کند و به شما امکان دسترسی به پروژه های Firebase را می دهد.
- با فهرست کردن پروژه های Firebase خود، بررسی کنید که CLI به درستی نصب شده است و به حساب شما دسترسی دارد. دستور زیر را اجرا کنید:
firebase projects:list
- لیست نمایش داده شده باید مانند پروژه های Firebase لیست شده در کنسول Firebase باشد. شما باید حداقل
flutterfire-ui-codelab.
FlutterFire CLI را نصب کنید
FlutterFire CLI ابزاری است که به تسهیل فرآیند نصب Firebase در تمام پلتفرمهای پشتیبانی شده در برنامه Flutter شما کمک میکند. این در بالای Firebase CLI ساخته شده است.
ابتدا CLI را نصب کنید:
dart pub global activate flutterfire_cli
مطمئن شوید که CLI نصب شده است. دستور زیر را اجرا کنید و مطمئن شوید که CLI منوی Help را خروجی می کند.
flutterfire -—help
پروژه Firebase خود را به برنامه Flutter خود اضافه کنید
FlutterFire را پیکربندی کنید
می توانید از FlutterFire برای تولید کد Dart مورد نیاز برای استفاده از Firebase در برنامه Flutter خود استفاده کنید.
flutterfire configure
هنگامی که این دستور اجرا می شود، از شما خواسته می شود که از کدام پروژه Firebase استفاده کنید و کدام پلتفرم را می خواهید تنظیم کنید.
اسکرین شات های زیر درخواست هایی را نشان می دهند که باید به آنها پاسخ دهید.
- پروژه ای را که می خواهید استفاده کنید انتخاب کنید. در این مورد از
flutterfire-ui-codelab
استفاده کنید - پلتفرم هایی که می خواهید استفاده کنید را انتخاب کنید. در این کد لبه، مراحلی برای پیکربندی Firebase Authentication برای Flutter برای وب، iOS و اندروید وجود دارد، اما میتوانید پروژه Firebase خود را برای استفاده از همه گزینهها تنظیم کنید.
- این اسکرین شات خروجی را در پایان فرآیند نشان می دهد. اگر با Firebase آشنا باشید، متوجه خواهید شد که نیازی به ایجاد برنامه های پلتفرم (مثلاً یک برنامه اندروید) در کنسول ندارید و FlutterFire CLI این کار را برای شما انجام داده است.
وقتی این کار کامل شد، به برنامه Flutter در ویرایشگر متن خود نگاه کنید. FlutterFire CLI یک فایل جدید به نام firebase_options.dart
ایجاد کرده است. این فایل حاوی کلاسی به نام FirebaseOptions است که دارای متغیرهای ثابتی است که پیکربندی Firebase مورد نیاز برای هر پلتفرم را نگه میدارد. اگر هنگام اجرای flutterfire configure
همه پلتفرمها را انتخاب کرده باشید، مقادیر استاتیکی به نامهای web
، android
، ios
و macos
را مشاهده خواهید کرد.
firebase_options.dart
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
import 'package:flutter/foundation.dart'
show defaultTargetPlatform, kIsWeb, TargetPlatform;
/// Default [FirebaseOptions] for use with your Firebase apps.
///
/// Example:
/// ```dart
/// import 'firebase_options.dart';
/// // ...
/// await Firebase.initializeApp(
/// options: DefaultFirebaseOptions.currentPlatform,
/// );
/// ```
class DefaultFirebaseOptions {
static FirebaseOptions get currentPlatform {
if (kIsWeb) {
return web;
}
// ignore: missing_enum_constant_in_switch
switch (defaultTargetPlatform) {
case TargetPlatform.android:
return android;
case TargetPlatform.iOS:
return ios;
case TargetPlatform.macOS:
return macos;
}
throw UnsupportedError(
'DefaultFirebaseOptions are not supported for this platform.',
);
}
static const FirebaseOptions web = FirebaseOptions(
apiKey: 'AIzaSyCqFjCV_9CZmYeIvcK9FVy4drmKUlSaIWY',
appId: '1:963656261848:web:7219f7fca5fc70afb237ad',
messagingSenderId: '963656261848',
projectId: 'flutterfire-ui-codelab',
authDomain: 'flutterfire-ui-codelab.firebaseapp.com',
storageBucket: 'flutterfire-ui-codelab.firebasestorage.app',
measurementId: 'G-DGF0CP099H',
);
static const FirebaseOptions android = FirebaseOptions(
apiKey: 'AIzaSyDconZaCQpkxIJ5KQBF-3tEU0rxYsLkIe8',
appId: '1:963656261848:android:c939ccc86ab2dcdbb237ad',
messagingSenderId: '963656261848',
projectId: 'flutterfire-ui-codelab',
storageBucket: 'flutterfire-ui-codelab.firebasestorage.app',
);
static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'AIzaSyBqLWsqFjYAdGyihKTahMRDQMo0N6NVjAs',
appId: '1:963656261848:ios:d9e01cfe8b675dfcb237ad',
messagingSenderId: '963656261848',
projectId: 'flutterfire-ui-codelab',
storageBucket: 'flutterfire-ui-codelab.firebasestorage.app',
iosClientId: '963656261848-v7r3vq1v6haupv0l1mdrmsf56ktnua60.apps.googleusercontent.com',
iosBundleId: 'com.example.complete',
);
static const FirebaseOptions macos = FirebaseOptions(
apiKey: 'AIzaSyBqLWsqFjYAdGyihKTahMRDQMo0N6NVjAs',
appId: '1:963656261848:ios:d9e01cfe8b675dfcb237ad',
messagingSenderId: '963656261848',
projectId: 'flutterfire-ui-codelab',
storageBucket: 'flutterfire-ui-codelab.firebasestorage.app',
iosClientId: '963656261848-v7r3vq1v6haupv0l1mdrmsf56ktnua60.apps.googleusercontent.com',
iosBundleId: 'com.example.complete',
);
}
Firebase از کلمه application برای اشاره به ساخت خاصی برای یک پلتفرم خاص در پروژه Firebase استفاده می کند. به عنوان مثال، پروژه Firebase به نام FlutterFire-ui-codelab دارای چندین برنامه کاربردی است: یکی برای اندروید، یکی برای iOS، دیگری برای MacOS و دیگری برای وب.
روش DefaultFirebaseOptions.currentPlatform
از فهرست TargetPlatform
استفاده می کند که توسط Flutter در معرض دید قرار گرفته است تا پلتفرمی را که برنامه شما در آن اجرا می شود شناسایی کند و سپس مقادیر پیکربندی Firebase مورد نیاز برای برنامه Firebase صحیح را برمی گرداند.
بسته های Firebase را به برنامه Flutter اضافه کنید
مرحله نهایی راه اندازی این است که بسته های Firebase مربوطه را به پروژه Flutter خود اضافه کنید. فایل firebase_options.dart
باید دارای خطا باشد، زیرا به بستههای Firebase که هنوز اضافه نشدهاند متکی است. در ترمینال، مطمئن شوید که در ریشه پروژه Flutter در flutter-codelabs/firebase-emulator-suite/start
هستید. سپس سه دستور زیر را اجرا کنید:
flutter pub add firebase_core
flutter pub add firebase_auth
flutter pub add firebase_ui_auth
اینها تنها بسته هایی هستند که در این مرحله به آن نیاز دارید.
Firebase را راه اندازی کنید
به منظور استفاده از بسته های اضافه شده و DefaultFirebaseOptions.currentPlatform,
کد موجود در تابع main
را در فایل main.dart
به روز کنید.
اصلی.دارت
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
این کد دو کار را انجام می دهد.
-
WidgetsFlutterBinding.ensureInitialized()
به Flutter می گوید تا زمانی که فریم ورک Flutter به طور کامل بوت نشده است، اجرای کد ویجت برنامه را شروع نکند. Firebase از کانالهای پلتفرم بومی استفاده میکند، که برای اجرا شدن فریمورک نیاز دارند. -
Firebase.initializeApp
یک ارتباط بین برنامه Flutter و پروژه Firebase شما برقرار می کند.DefaultFirebaseOptions.currentPlatform
از فایلfirebase_options.dart
ایجاد شده ما وارد شده است. این مقدار استاتیک تشخیص می دهد که روی کدام پلتفرم در حال اجرا هستید و در کلیدهای Firebase مربوطه ارسال می کند.
4. صفحه اولیه Firebase UI Auth را اضافه کنید
Firebase UI for Auth ویجت هایی را ارائه می دهد که کل صفحه های برنامه شما را نشان می دهد. این صفحهها جریانهای احراز هویت مختلفی را در سراسر برنامه شما مدیریت میکنند، مانند ورود، ثبت نام، فراموشی رمز عبور، نمایه کاربر و موارد دیگر. برای شروع، یک صفحه فرود به برنامه خود اضافه کنید که به عنوان محافظ احراز هویت به برنامه اصلی عمل می کند.
برنامه مواد یا کوپرتینو
FlutterFire UI مستلزم آن است که برنامه شما در MaterialApp یا CupertinoApp پیچیده شود. بسته به انتخاب شما، UI به طور خودکار تفاوت های ویجت های Material یا Cupertino را منعکس می کند. برای این کد لبه، از MaterialApp
استفاده کنید، که قبلاً در app.dart
به برنامه اضافه شده است.
app.dart
import 'package:flutter/material.dart';
import 'auth_gate.dart';
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const AuthGate(),
);
}
}
وضعیت احراز هویت را بررسی کنید
قبل از اینکه بتوانید صفحه ورود به سیستم را نمایش دهید، باید تعیین کنید که آیا کاربر در حال حاضر احراز هویت شده است یا خیر. رایج ترین راه برای بررسی این موضوع، گوش دادن به authStateChanges FirebaseAuth با استفاده از افزونه Firebase Auth است.
در نمونه کد بالا، MaterialApp
در حال ساخت ویجت AuthGate
در روش ساخت خود است. (این یک ویجت سفارشی است که توسط FlutterFire UI ارائه نشده است.)
این ویجت باید به روز شود تا جریان authStateChanges
را در بر گیرد.
authStateChanges
API یک Stream
با کاربر فعلی (اگر وارد سیستم شده باشد) برمی گرداند یا اگر وارد نشده باشد، باطل است. برای اشتراک در این حالت در برنامه ما، می توانید از ویجت StreamBuilder Flutter استفاده کنید و جریان را به آن منتقل کنید.
StreamBuilder
ویجتی است که خود را بر اساس آخرین عکس فوری از دادههای Stream که شما از آن عبور میدهید میسازد. هنگامی که استریم یک عکس فوری جدید منتشر می کند، به طور خودکار بازسازی می شود.
کد را در auth_gate.dart
به روز کنید.
auth_gate.dart
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
import 'home.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return SignInScreen(
providers: [],
);
}
return const HomeScreen();
},
);
}
}
-
StreamBuilder.stream
در حال ارسالFirebaseAuth.instance.authStateChanged
است، جریان فوق، که اگر کاربر احراز هویت را انجام داده باشد، یک شی FirebaseUser
برمی گرداند. (در غیر این صورتnull
خواهد شد.) - در مرحله بعد، کد از
snapshot.hasData
استفاده می کند تا بررسی کند که آیا مقدار جریان حاوی شیUser
است یا خیر. - اگر وجود نداشته باشد، ویجت
SignInScreen
برمی گرداند. در حال حاضر، آن صفحه هیچ کاری انجام نمی دهد. این در مرحله بعدی به روز رسانی خواهد شد. - در غیر این صورت،
HomeScreen
برمی گرداند، که بخش اصلی برنامه است که فقط کاربران احراز هویت شده می توانند به آن دسترسی داشته باشند.
SignInScreen
ویجتی است که از بسته UI FlutterFire می آید. این نقطه تمرکز مرحله بعدی این کد لبه خواهد بود. وقتی برنامه را در این مرحله اجرا می کنید، باید یک صفحه ورود به سیستم خالی را ببینید.
5. صفحه ورود به سیستم
ویجت SignInScreen
که توسط FlutterFire UI ارائه شده است، عملکرد زیر را اضافه می کند:
- به کاربران اجازه ورود به سیستم را می دهد
- اگر کاربران رمز عبور خود را فراموش کردند، می توانند روی "رمز عبور را فراموش کرده اید؟" ضربه بزنید. و به فرمی منتقل شوند تا رمز عبور خود را بازنشانی کنند
- اگر کاربر هنوز ثبت نام نکرده باشد، می تواند روی "ثبت نام" ضربه بزند و به فرم دیگری منتقل شود که به آنها امکان ثبت نام را می دهد.
باز هم، این فقط به چند خط کد نیاز دارد. کد موجود در ویجت AuthGate را به خاطر بیاورید:
auth_gate.dart
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
import 'home.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return SignInScreen(
providers: [
EmailAuthProvider(), // new
],
);
}
return const HomeScreen();
},
);
}
}
ویجت SignInScreen
و آرگومان providers
آن، تنها کد مورد نیاز برای دریافت تمام عملکردهای فوق الذکر است. اکنون باید صفحه ورود به سیستم را ببینید که دارای ورودی های متنی "ایمیل" و "رمز عبور" و همچنین دکمه "ورود به سیستم" است.
در حالی که کاربردی است، فاقد یک ظاهر طراحی شده است. ویجت پارامترهایی را برای سفارشی کردن ظاهر صفحه ورود به سیستم نمایش می دهد. به عنوان مثال، ممکن است بخواهید لوگوی شرکت خود را اضافه کنید.
صفحه ورود به سیستم را سفارشی کنید
headerBuilder
با استفاده از آرگومان SignInScreen.headerBuilder
، می توانید هر ویجتی را که می خواهید در بالای فرم ورود اضافه کنید. این ویجت فقط در صفحه نمایش های باریک مانند دستگاه های تلفن همراه نمایش داده می شود. در صفحههای گسترده، میتوانید از SignInScreen.sideBuilder
استفاده کنید، که بعداً در این کد لبه مورد بحث قرار خواهد گرفت.
فایل auth_gate.dart
را با این کد به روز کنید:
auth_gate.dart
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
import 'home.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return SignInScreen(
providers: [
EmailAuthProvider(),
],
headerBuilder: (context, constraints, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('assets/flutterfire_300x.png'),
),
);
},
);
}
return const HomeScreen();
},
);
}
}
آرگومان headerBuilder به تابعی از نوع HeaderBuilder نیاز دارد که در بسته FlutterFire UI تعریف شده است.
typedef HeaderBuilder = Widget Function(
BuildContext context,
BoxConstraints constraints,
double shrinkOffset,
);
از آنجایی که این یک callback است، مقادیری را که میتوانید استفاده کنید، مانند BuildContext
و BoxConstraints
را نشان میدهد و از شما میخواهد که یک ویجت را برگردانید. هر ویجتی که برگردانید در بالای صفحه نمایش داده می شود. در این مثال، کد جدید یک تصویر را به بالای صفحه اضافه می کند. اکنون برنامه شما باید به این شکل باشد.
سازنده زیرنویس
صفحه ورود به سیستم سه پارامتر اضافی را نشان می دهد که به شما امکان می دهد صفحه را سفارشی کنید: subtitleBuilder
، footerBuilder
، و sideBuilder
.
subtitleBuilder
کمی متفاوت است زیرا آرگومانهای callback شامل یک عمل است که از نوع AuthAction
است. AuthAction
شمارهای است که میتوانید از آن برای تشخیص اینکه صفحهای که کاربر در آن قرار دارد، صفحه «ورود به سیستم» یا «ثبتنام» است استفاده کنید.
کد را در auth_gate.dart به روز کنید تا از subtitleBuilder استفاده کنید.
auth_gate.dart
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
import 'home.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return SignInScreen(
providers: [
EmailAuthProvider()
],
headerBuilder: (context, constraints, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
);
},
subtitleBuilder: (context, action) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: action == AuthAction.signIn
? const Text('Welcome to FlutterFire, please sign in!')
: const Text('Welcome to Flutterfire, please sign up!'),
);
},
);
}
return const HomeScreen();
},
);
}
}
برنامه را دوباره بارگذاری کنید، و باید شبیه به این باشد
پاورقی
آرگومان footerBuilder همان subtitleBuilder است. BoxConstraints
یا shrinkOffset
را آشکار نمیکند، زیرا برای متن در نظر گرفته شده است تا تصویر. (اگرچه می توانید هر ویجتی را که می خواهید اضافه کنید.)
با این کد یک پاورقی به صفحه ورود به سیستم خود اضافه کنید.
auth_gate.dart
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
import 'home.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return SignInScreen(
providers: [
EmailAuthProvider()
],
headerBuilder: (context, constraints, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
);
},
subtitleBuilder: (context, action) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: action == AuthAction.signIn
? const Text('Welcome to FlutterFire, please sign in!')
: const Text('Welcome to Flutterfire, please sign up!'),
);
},
footerBuilder: (context, action) {
return const Padding(
padding: EdgeInsets.only(top: 16),
child: Text(
'By signing in, you agree to our terms and conditions.',
style: TextStyle(color: Colors.grey),
),
);
},
);
}
return const HomeScreen();
},
);
}}
ساید بیلدر
آرگومان SignInScreen.sidebuilder یک callback را می پذیرد و این بار آرگومان های آن callback BuildContext
و double shrinkOffset
هستند. ویجتی که sideBuilder برمی گرداند در سمت چپ علامت در فرم و فقط در صفحه های گسترده نمایش داده می شود. عملاً به این معنی است که ویجت فقط در دسکتاپ و برنامه های وب نمایش داده می شود.
در داخل، FlutterFire UI از یک نقطه شکست برای تعیین اینکه آیا محتوای هدر باید نمایش داده شود (در صفحههای بلند، مانند موبایل) یا محتوای جانبی (روی صفحههای گسترده، دسکتاپ یا وب) استفاده میکند. به طور خاص، اگر صفحه ای بیش از 800 پیکسل عرض داشته باشد، محتوای سازنده جانبی نشان داده می شود و محتوای هدر نشان داده نمی شود. اگر عرض صفحه نمایش کمتر از 800 پیکسل باشد، برعکس است.
برای افزودن ویجت های sideBuilder، کد را در auth_gate.dart به روز کنید.
auth_gate.dart
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
import 'home.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return SignInScreen(
providers: [
EmailAuthProvider(),
],
headerBuilder: (context, constraints, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
);
},
subtitleBuilder: (context, action) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: action == AuthAction.signIn
? const Text('Welcome to FlutterFire, please sign in!')
: const Text('Welcome to Flutterfire, please sign up!'),
);
},
footerBuilder: (context, action) {
return const Padding(
padding: EdgeInsets.only(top: 16),
child: Text(
'By signing in, you agree to our terms and conditions.',
style: TextStyle(color: Colors.grey),
),
);
},
sideBuilder: (context, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
);
},
);
}
return const HomeScreen();
},
);
}
}
وقتی عرض پنجره را باز می کنید (اگر از Flutter web یا MacOS استفاده می کنید) اکنون برنامه شما باید به این شکل باشد.
یک کاربر ایجاد کنید
در این مرحله، تمام کدهای این صفحه انجام می شود. قبل از اینکه بتوانید وارد شوید، باید یک کاربر ایجاد کنید. می توانید این کار را با صفحه "ثبت نام" انجام دهید یا می توانید یک کاربر در کنسول Firebase ایجاد کنید.
برای استفاده از کنسول:
- به جدول «کاربران» در کنسول Firebase بروید.
- اینجا را کلیک کنید
- «flutterfire-ui-codelab» را انتخاب کنید (یا اگر از نام دیگری استفاده کرده اید، پروژه دیگری را انتخاب کنید). این جدول را خواهید دید:
- روی دکمه "افزودن کاربر" کلیک کنید.
- آدرس ایمیل و رمز عبور کاربر جدید را وارد کنید. همانطور که در تصویر زیر وارد کرده ام، این می تواند یک ایمیل و رمز عبور جعلی باشد. این کار می کند، اما اگر از یک آدرس ایمیل جعلی استفاده کنید، عملکرد "گذرواژه فراموش شده" کار نخواهد کرد.
- روی "افزودن کاربر" کلیک کنید
اکنون، می توانید به برنامه Flutter خود بازگردید و از طریق صفحه ورود به سیستم وارد یک کاربر شوید. برنامه شما باید شبیه این باشد:
6. صفحه نمایش
FlutterFire UI همچنین ویجت ProfileScreen
را ارائه می دهد که باز هم در چند خط کد به شما قابلیت های زیادی می دهد.
ویجت ProfileScreen را اضافه کنید
به فایل home.dart
در ویرایشگر متن خود بروید. با این کد آن را به روز کنید:
خانه.دارت
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: const Icon(Icons.person),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute<ProfileScreen>(
builder: (context) => const ProfileScreen(),
),
);
},
)
],
automaticallyImplyLeading: false,
),
body: Center(
child: Column(
children: [
Image.asset('dash.png'),
Text(
'Welcome!',
style: Theme.of(context).textTheme.displaySmall,
),
const SignOutButton(),
],
),
),
);
}
}
کد جدید توجه، تماس برگشتی به IconButton.isPressed method.
هنگامی که IconButton
فشار داده می شود، برنامه شما یک مسیر ناشناس جدید ایجاد می کند و به سمت آن حرکت می کند. آن مسیر ویجت ProfileScreen
را نمایش می دهد که از پاسخ تماس MaterialPageRoute.builder
برگردانده شده است.
برنامه خود را مجدداً بارگیری کنید و نماد را در سمت راست بالا (در نوار برنامه) فشار دهید و صفحه ای مانند این نمایش داده می شود:
این رابط کاربری استاندارد ارائه شده توسط صفحه FlutterFire UI است. همه دکمهها و فیلدهای متنی به Firebase Auth متصل شدهاند و خارج از جعبه کار میکنند. برای مثال، میتوانید نامی را در فیلد متنی «Name» وارد کنید، و FlutterFire UI متد FirebaseAuth.instance.currentUser?.updateDisplayName
را فراخوانی میکند، که این نام را در Firebase ذخیره میکند.
خروج از سیستم
در حال حاضر، اگر دکمه "خروج از سیستم" را فشار دهید، برنامه تغییر نمی کند. شما را از سیستم خارج میکند، اما به ویجت AuthGate باز نمیگردید. برای پیاده سازی این، از پارامتر ProfileScreen.actions استفاده کنید.
ابتدا کد را در home.dart به روز کنید.
خانه.دارت
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: const Icon(Icons.person),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute<ProfileScreen>(
builder: (context) => ProfileScreen(
actions: [
SignedOutAction((context) {
Navigator.of(context).pop();
})
],
),
),
);
},
)
],
automaticallyImplyLeading: false,
),
body: Center(
child: Column(
children: [
Image.asset('dash.png'),
Text(
'Welcome!',
style: Theme.of(context).textTheme.displaySmall,
),
const SignOutButton(),
],
),
),
);
}
}
اکنون، هنگامی که نمونه ای از ProfileScreen
را ایجاد می کنید، لیستی از اقدامات را نیز به آرگومان ProfileScreen.actions
ارسال می کنید. این اقدامات از نوع FlutterFireUiAction
هستند. کلاسهای مختلفی وجود دارد که زیرگروههای FlutterFireUiAction
هستند، و به طور کلی شما از آنها برای اینکه به برنامه خود بگویید به تغییرات حالت احراز هویت مختلف واکنش نشان دهد، استفاده میکنید. SignedOutAction یک تابع فراخوانی را فراخوانی می کند که وقتی حالت احراز هویت Firebase به حالت فعلی کاربر تهی می شود، به آن می دهید.
با افزودن تماسی که هنگام فعال شدن SignedOutAction Navigator.of(context).pop()
را فراخوانی می کند، برنامه به صفحه قبلی هدایت می شود. در این برنامه نمونه، تنها یک مسیر دائمی وجود دارد که اگر کاربری وارد نشده باشد، صفحه ورود به سیستم و در صورت وجود کاربر، صفحه اصلی را نشان میدهد. از آنجا که این اتفاق می افتد زمانی که کاربر از سیستم خارج می شود، برنامه صفحه SignIn را نمایش می دهد.
صفحه نمایه را سفارشی کنید
مشابه صفحه ورود به سیستم، صفحه نمایه قابل تنظیم است. اول اینکه، صفحه فعلی ما پس از حضور کاربر در صفحه نمایه، راهی برای بازگشت به صفحه اصلی ندارد. با دادن یک AppBar به ویجت ProfileScreen این مشکل را برطرف کنید.
خانه.دارت
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: const Icon(Icons.person),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute<ProfileScreen>(
builder: (context) => ProfileScreen(
appBar: AppBar(
title: const Text('User Profile'),
),
actions: [
SignedOutAction((context) {
Navigator.of(context).pop();
})
],
),
),
);
},
)
],
automaticallyImplyLeading: false,
),
body: Center(
child: Column(
children: [
Image.asset('dash.png'),
Text(
'Welcome!',
style: Theme.of(context).textTheme.displaySmall,
),
const SignOutButton(),
],
),
),
);
}
}
آرگومان ProfileScreen.appBar
ویجت AppBar
از بسته Flutter Material میپذیرد، بنابراین میتوان با آن مانند هر AppBar
دیگری که ساختهاید و به Scaffold
ارسال کردهاید رفتار کرد. در این مثال، عملکرد پیشفرض افزودن خودکار دکمه «بازگشت» حفظ میشود و اکنون صفحه یک عنوان دارد.
کودکان را به صفحه نمایه اضافه کنید
ویجت ProfileScreen همچنین دارای یک آرگومان اختیاری به نام Children است. این آرگومان فهرستی از ویجتها را میپذیرد و آن ویجتها به صورت عمودی در داخل ویجت ستونی قرار میگیرند که قبلاً به صورت داخلی برای ساخت ProfileScreen استفاده شده است. این ویجت ستونی در روش ساخت ProfileScreen، فرزندانی را که از آن عبور میدهید در بالای دکمه «خروج از سیستم» قرار میدهد.
کد را در home.dart به روز کنید تا آرم شرکت در اینجا نشان داده شود، مشابه صفحه ورود به سیستم.
خانه.دارت
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: const Icon(Icons.person),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute<ProfileScreen>(
builder: (context) => ProfileScreen(
appBar: AppBar(
title: const Text('User Profile'),
),
actions: [
SignedOutAction((context) {
Navigator.of(context).pop();
})
],
children: [
const Divider(),
Padding(
padding: const EdgeInsets.all(2),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
),
],
),
),
);
},
)
],
automaticallyImplyLeading: false,
),
body: Center(
child: Column(
children: [
Image.asset('dash.png'),
Text(
'Welcome!',
style: Theme.of(context).textTheme.displaySmall,
),
const SignOutButton(),
],
),
),
);
}
}
برنامه خود را دوباره بارگیری کنید، و این را روی صفحه خواهید دید:
7. ورود به سیستم چند پلتفرمی Google Auth
FlutterFire UI همچنین ویجت ها و قابلیت هایی را برای احراز هویت با ارائه دهندگان شخص ثالث مانند Google، Twitter، Facebook، Apple و Github فراهم می کند.
برای ادغام با احراز هویت گوگل، افزونه رسمی firebase_ui_oauth_google و وابستگی های آن را نصب کنید، که جریان احراز هویت بومی را مدیریت می کند. در ترمینال، به ریشه پروژه flutter خود بروید و دستور زیر را وارد کنید:
flutter pub add google_sign_in flutter pub add firebase_ui_oauth_google
Google Sign-in Provider را فعال کنید
سپس، ارائهدهنده Google را در کنسول Firebase فعال کنید:
- به صفحه ارائه دهندگان ورود به سیستم احراز هویت در کنسول بروید.
- روی "افزودن ارائه دهنده جدید" کلیک کنید.
- "Google" را انتخاب کنید.
- سوئیچ با برچسب "Enable" را تغییر دهید و "Save" را فشار دهید.
- اگر یک مدال با اطلاعاتی در مورد بارگیری فایل های پیکربندی ظاهر شد، روی "انجام شد" کلیک کنید.
- تأیید کنید که ارائه دهنده ورود به سیستم Google اضافه شده است.
دکمه ورود به سیستم Google را اضافه کنید
با فعال بودن ورود به سیستم Google، ویجت مورد نیاز برای نمایش یک دکمه ورود به سیستم Google را به صفحه ورود اضافه کنید. به فایل auth_gate.dart بروید و کد را به صورت زیر به روز کنید:
auth_gate.dart
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:firebase_ui_oauth_google/firebase_ui_oauth_google.dart'; // new
import 'package:flutter/material.dart';
import 'home.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return SignInScreen(
providers: [
EmailAuthProvider(),
GoogleProvider(clientId: "YOUR_WEBCLIENT_ID"), // new
],
headerBuilder: (context, constraints, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
);
},
subtitleBuilder: (context, action) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: action == AuthAction.signIn
? const Text('Welcome to FlutterFire, please sign in!')
: const Text('Welcome to Flutterfire, please sign up!'),
);
},
footerBuilder: (context, action) {
return const Padding(
padding: EdgeInsets.only(top: 16),
child: Text(
'By signing in, you agree to our terms and conditions.',
style: TextStyle(color: Colors.grey),
),
);
},
sideBuilder: (context, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
);
},
);
}
return const HomeScreen();
},
);
}
}
تنها کد جدید در اینجا افزودن GoogleProvider(clientId: "YOUR_WEBCLIENT_ID")
به پیکربندی ویجت SignInScreen است.
با اضافه شدن آن، برنامه خود را مجدداً بارگیری کنید و دکمه ورود به سیستم Google را مشاهده خواهید کرد.
پیکربندی دکمه ورود به سیستم
دکمه بدون تنظیمات اضافی کار نمی کند. اگر در حال توسعه با Flutter Web هستید، این تنها مرحله ای است که باید اضافه کنید تا کار کند. پلتفرم های دیگر نیاز به مراحل اضافی دارند که در کمی مورد بحث قرار می گیرند.
- به صفحه ارائه دهندگان احراز هویت در کنسول Firebase بروید.
- روی ارائه دهنده گوگل کلیک کنید.
- روی پانل توسعه "پیکربندی وب SDK" کلیک کنید.
- مقدار را از "شناسه سرویس گیرنده وب" کپی کنید
- به ویرایشگر متن خود برگردید و نمونه
GoogleProvider
را در فایلauth_gate.dart
با ارسال این شناسه به پارامتر با نامclientId
بهروزرسانی کنید.
GoogleProvider(
clientId: "YOUR_WEBCLIENT_ID"
)
پس از وارد کردن شناسه سرویس گیرنده وب، برنامه خود را دوباره بارگیری کنید. وقتی دکمه «ورود به سیستم با Google» را فشار میدهید، پنجره جدیدی ظاهر میشود (اگر از وب استفاده میکنید) که شما را در جریان ورود به سیستم Google راهنمایی میکند. در ابتدا، به نظر می رسد این است:
iOS را پیکربندی کنید
برای اینکه این کار در iOS کار کند، یک فرآیند پیکربندی اضافی وجود دارد.
- به صفحه تنظیمات پروژه در کنسول Firebase بروید. کارتی وجود خواهد داشت که برنامه های Firebase شما را به شکل زیر فهرست می کند:
- روی iOS کلیک کنید. توجه داشته باشید که نام برنامه شما با من متفاوت خواهد بود. اگر از پروژه
flutter-codelabs/firebase-auth-flutterfire-ui/start
برای دنبال کردن این کد لبه استفاده کرده باشید، در جایی که من می گوید "کامل کنید"، پروژه شما می گوید "شروع". - برای دانلود فایل پیکربندی مورد نیاز، روی دکمه ای که می گوید "GoogleServices-Info.plist" کلیک کنید.
- فایل دانلود شده را به دایرکتوری به نام بکشید و رها کنید.
/ios/Runner
در پروژه Flutter شما. - Xcode را با اجرای دستور ترمینال زیر از ریشه پروژه خود باز کنید:
open ios/Runner.xcworkspace
- روی فهرست Runner کلیک راست کرده و Add Files to "Runner" را انتخاب کنید.
- GoogleService-Info.plist را از مدیر فایل انتخاب کنید.
- در ویرایشگر متن خود (که Xcode نیست)، ویژگی های CFBundleURLTypes را در زیر به فایل [my_project]/ios/Runner/Info.plist اضافه کنید.
<!-- Put me in the [my_project]/ios/Runner/Info.plist file -->
<!-- Google Sign-in Section -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<!-- TODO Replace this value: -->
<!-- Copied from GoogleService-Info.plist key REVERSED_CLIENT_ID -->
<string>com.googleusercontent.apps.861823949799-vc35cprkp249096uujjn0vvnmcvjppkn</string>
</array>
</dict>
</array>
<!-- End of the Google Sign-in Section -->
- باید
GoogleProvider.clientId
را که در تنظیمات وب اضافه کردهاید، با شناسه کلاینت مرتبط با شناسه مشتری Firebase iOS خود جایگزین کنید. ابتدا می توانید این شناسه را در فایلfirebase_options.dart
به عنوان بخشی از ثابتiOS
بیابید. مقدار ارسال شده بهiOSClientId
را کپی کنید.
static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'YOUR API KEY',
appId: 'YOUR APP ID',
messagingSenderId: '',
projectId: 'PROJECT_ID',
storageBucket: 'PROJECT_ID.firebasestorage.app',
iosClientId: 'IOS CLIENT ID', // Find your iOS client Id here.
iosBundleId: 'com.example.BUNDLE',
);
- آن مقدار را در آرگومان
GoogleProvider.clientId
در ویجتAuthGate
جایگذاری کنید.
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:firebase_ui_oauth_google/firebase_ui_oauth_google.dart';
import 'package:flutter/material.dart';
import 'home.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return SignInScreen(
providers: [
EmailAuthProvider(),
GoogleProvider(clientId: "YOUR IOS CLIENT ID"), // replace String
],
headerBuilder: (context, constraints, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
);
},
subtitleBuilder: (context, action) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: action == AuthAction.signIn
? const Text('Welcome to FlutterFire, please sign in!')
: const Text('Welcome to Flutterfire, please sign up!'),
);
},
footerBuilder: (context, action) {
return const Padding(
padding: EdgeInsets.only(top: 16),
child: Text(
'By signing in, you agree to our terms and conditions.',
style: TextStyle(color: Colors.grey),
),
);
},
sideBuilder: (context, shrinkOffset) {
return Padding(
padding: const EdgeInsets.all(20),
child: AspectRatio(
aspectRatio: 1,
child: Image.asset('flutterfire_300x.png'),
),
);
},
);
}
return const HomeScreen();
},
);
}
}
اگر برنامه Flutter شما قبلاً در iOS اجرا می شود، باید آن را به طور کامل خاموش کنید و سپس دوباره برنامه را اجرا کنید. در غیر این صورت، برنامه را در iOS اجرا کنید.
8. تبریک!
شما رابط کاربری Firebase Auth برای Flutter codelab را تکمیل کرده اید. شما می توانید کد تکمیل شده برای این Codelab را در فهرست "کامل" در github پیدا کنید: Flutter Codelabs
آنچه را پوشش داده ایم
- راه اندازی یک برنامه Flutter برای استفاده از Firebase
- راه اندازی یک پروژه Firebase در کنسول Firebase
- FlutterFire CLI
- Firebase CLI
- با استفاده از احراز هویت Firebase
- با استفاده از FlutterFire UI برای کنترل اعتبار Firebase در برنامه Flutter خود به راحتی
مراحل بعدی
- درباره استفاده از Firestore و Authentication در Flutter بیشتر بیاموزید: Firebase را برای Flutter Codelab بشناسید
- سایر ابزارهای Firebase را برای ساخت برنامه Flutter خود کاوش کنید:
- فضای ذخیره سازی ابری
- توابع ابری
- پایگاه داده بیدرنگ
بیشتر بدانید
- سایت Firebase: firebase.google.com
- سایت فلاتر: flutter.dev
- FlutterFire Firebase ویجت های Flutter: firebase.flutter.dev
- کانال یوتیوب Firebase
- کانال یوتیوب فلوتر
Sparky اینجاست تا با شما جشن بگیرد!