Firebase 实时数据库添加了另一层数据

Firebase Realtime Databae adds another layer of data

出于某种原因,我的 Firebase 实时数据库在对我的数据进行编码时添加了另一层。我刚开始使用 Firebase 服务,所以可能我输入了错误的 link 或 smh。 -N-1sGl-7VrhyIG7PdDa 不应出现。我对它发生的原因略有了解,但我不知道如何访问最后一部分。提前致谢!

Future<void> AddUserGoals(
      String userId, String kcal, String p, String c, String f, BuildContext context) async {
    final url = Uri.parse(
        'https://recipier-e1139-default-rtdb.europe-west1.firebasedatabase.app/usersData/$userId/userGoals.json');
    try {
      print(kcal);
      final response = await http.post(
        url,
        body: json.encode(
          {
            'currentBalance': kcal,
            'protein': p,
            'carbs': c,
            'fats': f,
          },
        ),
      );
      
      var decodedData = json.decode(response.body) as Map<String, dynamic>;
      print(decodedData['currentBalance']);
      if (decodedData['error'] == null) {
        balance = decodedData['currentBalance'];
      } else {
        showDialog(
          context: context,
          builder: (ctx) => const AlertDialog(
            title: Text('An error accured'),
            content: Text('Please try again later.'),
          ),
        );
      }
      notifyListeners();
    } catch (err) {
      rethrow;
    }
  }
 void didChangeDependencies() {
    if (_runsForFirstTime == true) {
      setState(() {
        _isLoading = true;
      });
      User? user = FirebaseAuth.instance.currentUser;
      Provider.of<RecipeProvider>(context).fetchProducts();
      Map<String, dynamic> initialData =
          ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>;
      Provider.of<DiaryProvider>(context, listen: false)
          .AddUserGoals(user!.uid, initialData['kcal']!, initialData['p']!,
              initialData['c']!, initialData['f']!, context)
          .then((_) {
        setState(() {
          _isLoading = false;
        });
      });
    }

    _runsForFirstTime = false;
    super.didChangeDependencies();
  }

当您调用 http.post() 时,您告诉 REST 服务器在路径下创建一个新资源(具有唯一 ID),这就是 Firebase 所做的。

如果你想让服务器把你传递的数据写入路径,使用http.put()

另见: