无法写入Firebase真实的数据库

jgzswidk  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(133)

因此,我在Firebase上建立了一个项目,并遵循了许多关于如何将Firebase连接到我的Flutter应用程序的教程。我从阅读FlutterFire文档开始,一步一步地,我设法安装了FlutterFire CLI。之后,我直接进入了阅读实时数据库部分,每当我试图写入数据库时,什么都没有发生。
数据库处于测试模式,firebase在项目内部正确初始化,我在尝试写入时没有得到任何错误,所以我认为即使是URL也是正确的(但我可能是错误的)
下面是我使用的代码:

import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'firebase_options.dart'; //generated with FlutterFire CLI
import 'package:firebase_core/firebase_core.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
  await Firebase.initializeApp(
    options: Platform.isWindows ? null : DefaultFirebaseOptions.currentPlatform, //not working on windows
  );
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  final FirebaseDatabase database = FirebaseDatabase.instance;
  final DatabaseReference ref = FirebaseDatabase.instance.ref("/");

  

  void writeToFirebase() async {
    print('wrote to database');

    await ref.set({
      'title': 'Hello World',
      'body': 'This is my first post',
      'userId': '123',
    });

   await ref.child('title').set('Hello World');
    
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: writeToFirebase,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
    );
  }
}

我注意到当print()语句在ref.set()之上时,我在控制台中看到输出。但是,如果我把它放在ref.set()语句之下,我就看不到输出。所以,这使我认为ref.set()永远不会结束它的执行或类似的东西。
我在学习Flutter2周,我真的不能使Firebase的工作

t9aqgxwy

t9aqgxwy1#

既然您正在使用await,那么您是否考虑过也使用try-catch,以便捕获和记录任何错误?
因此:

void writeToFirebase() async {
  print('Start writing to database');
  try {
    await ref.set({
      'title': 'Hello World',
      'body': 'This is my first post',
      'userId': '123',
    });

    await ref.child('title').set('Hello World');
  }
  catch (error) {
    print(error);
  }
  finally {
    print('Done writing to database');
  }
}

相关问题