首页 > 解决方案 > 使用带有 Flutter 的 Firebase 数据库的权限被拒绝?

问题描述

我正在用 Firebase 学习 Flutter,我想用 Firebase 数据库执行 Crud 操作。 用户界面

Firebase 规则是:

    "rules": {
    ".read": true,
    ".write": true
  }

代码

import 'package:flutter/material.dart';
import 'package:firebase_database/firebase_database.dart';
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(

        primarySwatch: Colors.red,
        // This makes the visual density adapt to the platform that you run
        // the app on. For desktop platforms, the controls will be smaller and
        // closer together (more dense) than on mobile platforms.
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: FirebaseDemoScreen(),
    );
  }
}

class FirebaseDemoScreen extends StatelessWidget  {
  final databaseReference = FirebaseDatabase.instance.reference();
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return  Scaffold(
      appBar: AppBar(
        title: Text('Firebase Connect'),
      ),
      body: Center(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[

              RaisedButton(
                child: Text('Create Record'),
                onPressed: () {
                  createRecord();
                },
              ),

              RaisedButton(
                child: Text('View Record'),
                onPressed: () {
                  getData();
                },
              ),
              RaisedButton(
                child: Text('Update Record'),
                onPressed: () {
                  updateData();
                },
              ),
              RaisedButton(
                child: Text('Delete Record'),
                onPressed: () {
                  deleteData();
                },
              ),
            ],
          )
      ), //center
    );
  }



void createRecord(){
  databaseReference.child("1").set({
    'title': 'Mastering EJB',
    'description': 'Programming Guide for J2EE'
  });
  databaseReference.child("2").set({
    'title': 'Flutter in Action',
    'description': 'Complete Programming Guide to learn Flutter'
  });
}
void getData(){
  databaseReference.once().then((DataSnapshot snapshot) {
    print('Data : ${snapshot.value}');
  });
}

void updateData(){
  databaseReference.child('1').update({
    'description': 'J2EE complete Reference'
  });
}

void deleteData(){
  databaseReference.child('1').remove();
}
}

它会导致错误:

[ERROR:flutter/lib/ui/ui_dart_state.cc(166)] 未处理的异常:PlatformException(-3, Permission denied, ) E/flutter (31408): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs .dart:569:7) E/flutter (31408): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:18) E/flutter (31408): E/flutter (31408): #2 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12) E/flutter (31408): #3 DatabaseReference.set (package:firebase_database/src/database_reference.dart:74:31) E /flutter (31408): #4 FirebaseDemoScreen.createRecord (package:learn/main.dart:77:32) E/flutter (31408): #5 FirebaseDemoScreen.build。(package:learn/main.dart:42:19) E/flutter (31408): #6 _InkResponseState._handleTap (package:flutter/src/material/ink_well. dart:953:19) E/flutter (31408): #7 _InkResponseState.build。(package:flutter/src/material/ink_well.dart:1059:38) E/flutter (31408): #8 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24) E/flutter ( 31408): #9 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:522:11) E/flutter (31408): #10 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart: 282:5) E/flutter (31408): #11 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:217:7) E/flutter (31408): #12 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/ src/gestures/recognizer.dart:475:9) E/flutter (31408): #13 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12) E/flutter (31408): #14指针路由器。_dispatchEventToRoutes。(package:flutter/src/gestures/pointer_router.dart:122:9) E/flutter (31408): #15 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8) E/flutter (31408) : #16 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18) E/flutter (31408): #17 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106: 7) E/flutter (31408): #18 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19) E/flutter (31408): #19 GestureBinding.dispatchEvent (package:flutter/src/手势/绑定.dart:198:22) E/flutter (31408): #20 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7) E/flutter (31408): #21 GestureBinding。 _flushPointerEventQueue(包:flutter/src/gestures/binding.dart:102:

标签: androidfirebaseandroid-studioflutterfirebase-realtime-database

解决方案


制定测试模式的规则尝试 [1]:https ://i.stack.imgur.com/Xeeis.png


推荐阅读