Flutter Windows平台支持插件firebase_windows的使用

Flutter Windows平台支持插件firebase_windows的使用

Firebase Windows

Windows实现的Firebase Flutter插件,适用于Flutter应用。

注意: 该插件代码基于firebase/flutterfire。具体版本信息如下:

  • _flutterfire_internals: v1.3.0
  • firebase_core_platform_interface: v4.8.0
  • firebase_core: v2.12.0
  • firebase_auth_platform_interface: v6.15.0
  • firebase_auth: v4.6.0
  • firebase_storage_platform_interface: v4.4.0
  • firebase_storage: v11.2.0

windows/CMakeLists.txt 文件基于 firebase_core: v2.13.1。CMakeLists.txt

开始使用

这是针对Windows的flutterfire实现。目前只有一部分模块和功能被实现。如需使用,请参考https://github.com/firebase/flutterfire

支持的功能

目前以下模块和功能已实现:

  • firebase_core
  • firebase_auth
    • FirebaseAuth.signInWithCredential
    • FirebaseAuth.signInWithCustomToken
    • FirebaseAuth.signInWithEmailAndPassword
    • FirebaseAuth.signOut
    • User.getIdTokenResult
  • firebase_storage
    • Reference.getDownloadURL
    • Reference.putFile
    • UploadTask.cancel

完整示例代码

以下是完整的示例代码,展示了如何在Flutter Windows平台上使用firebase_windows插件。

import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:firebase_windows/firebase_windows.dart'; // 导入firebase_windows插件

import 'debug_widget.dart';
import 'firebase_options.dart';
import 'view/auth_page.dart';
import 'view/storage_page.dart';

void main() {
  runApp(const MaterialApp(
    home: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final TextEditingController _debugTextEditingController = TextEditingController();

  FirebaseAuth? _auth;

  bool get isInitialized => Firebase.apps.isNotEmpty;

  bool get isSignIn => _auth?.currentUser != null;

  String? get appName => isInitialized ? Firebase.apps.first.name : null;

  Future<void> initializeDefault() async {
    FirebaseApp app = await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    );
    _auth = FirebaseAuth.instanceFor(app: app)
      ..authStateChanges().listen((event) {
        log('authStateChanges, event: $event');
        setState(() {});
      });
    log('Initialized default app $app');
  }

  void apps() {
    final List<FirebaseApp> apps = Firebase.apps;
    log('Currently initialized apps: $apps');
  }

  void options() {
    final FirebaseApp app = Firebase.app();
    final options = app.options;
    log('Current options for app ${app.name}: $options');
  }

  Future<void> openAuthPage() async {
    await Navigator.push<AuthPage>(
      context,
      MaterialPageRoute(builder: (context) => AuthPage(app: Firebase.app())),
    );
  }

  Future<void> openStoragePage() async {
    await Navigator.push<AuthPage>(
      context,
      MaterialPageRoute(builder: (context) => StoragePage(app: Firebase.app())),
    );
  }

  void log(String msg) {
    if (kDebugMode) print(msg);
    _debugTextEditingController.text += '$msg\n';
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.symmetric(vertical: 32, horizontal: 16),
        child: Column(
          children: [
            Text('Initialized app name: $appName\n'),
            Text('Current user: ${_auth?.currentUser?.displayName}\n'),
            SizedBox(
              width: 800,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  ElevatedButton(
                    onPressed: initializeDefault,
                    child: const Text('Initialize default app'),
                  ),
                  ElevatedButton(
                    onPressed: apps,
                    child: const Text('List apps'),
                  ),
                  ElevatedButton(
                    onPressed: isInitialized ? options : null,
                    child: const Text('List default options'),
                  ),
                  ElevatedButton(
                    onPressed: isInitialized ? openAuthPage : null,
                    child: const Text('Open Auth page'),
                  ),
                  ElevatedButton(
                    onPressed: isSignIn ? openStoragePage : null,
                    child: const Text('Open Storage page'),
                  ),
                ],
              ),
            ),
            DebugWidget(controller: _debugTextEditingController),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter Windows平台支持插件firebase_windows的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Windows平台支持插件firebase_windows的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中为Windows平台集成并使用firebase_windows插件的示例代码案例。这个示例将涵盖基本的插件配置和简单的Firebase身份验证功能。

1. 设置Flutter项目

首先,确保你已经创建了一个Flutter项目。如果还没有,可以使用以下命令创建一个新项目:

flutter create my_flutter_app
cd my_flutter_app

2. 添加依赖项

pubspec.yaml文件中,添加firebase_corefirebase_auth依赖项,以及特定于Windows的插件firebase_windows

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.10.0  # 请检查最新版本
  firebase_auth: ^3.3.0   # 请检查最新版本

dev_dependencies:
  flutter_test:
    sdk: flutter

# For Windows platform specific implementation
dependency_overrides:
  firebase_windows:
    git:
      url: https://github.com/FirebaseExtended/flutterfire.git
      path: packages/firebase_windows

注意:由于firebase_windows可能还没有正式发布到pub.dev,这里使用了Git依赖项。如果已正式发布,请直接添加最新版本。

3. 配置Firebase项目

在Firebase控制台中创建一个新的Firebase项目,并添加Windows应用。下载生成的GoogleService-Info.json文件,并将其放置在Flutter项目的windows/runner目录下。

4. 修改Windows平台配置

编辑windows/runner/Runner.rc文件,添加Firebase所需的资源文件引用(如果有的话,通常这一步在FlutterFire插件中自动处理,但确认一下是个好习惯)。

5. 初始化Firebase

lib/main.dart文件中,初始化Firebase并添加基本的身份验证功能:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Firebase应用
  FirebaseApp app = await Firebase.initializeApp();
  assert(app != null);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase Auth Example'),
        ),
        body: FirebaseAuthExample(),
      ),
    );
  }
}

class FirebaseAuthExample extends StatefulWidget {
  @override
  _FirebaseAuthExampleState createState() => _FirebaseAuthExampleState();
}

class _FirebaseAuthExampleState extends State<FirebaseAuthExample> {
  late FirebaseAuth _auth;

  @override
  void initState() {
    super.initState();
    _auth = FirebaseAuth.instance;
  }

  Future<void> _signInAnonymously() async {
    try {
      UserCredential result = await _auth.signInAnonymously();
      User? user = result.user;
      // 更新UI或处理用户数据
      print('User (${user!.uid}) signed in anonymously.');
    } catch (e) {
      print(e.toString());
    }
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: _signInAnonymously,
        child: Text('Sign in Anonymously'),
      ),
    );
  }
}

6. 运行应用

确保你的开发环境已经安装了Flutter和Dart SDK,并且已经配置好了Windows开发工具链(如Visual Studio)。然后,你可以使用以下命令运行应用:

flutter run -d windows

总结

以上步骤涵盖了如何在Flutter项目中为Windows平台集成firebase_windows插件,并实现基本的Firebase身份验证功能。请确保你使用的Firebase和FlutterFire插件版本是最新的,并根据需要进行适当的调整。如果遇到任何问题,请查阅FlutterFire的官方文档或GitHub仓库。

回到顶部