将 Slider 小部件中的值传递到 firestore 数据库

Posted

技术标签:

【中文标题】将 Slider 小部件中的值传递到 firestore 数据库【英文标题】:Passing values from a Slider widget into firestore database 【发布时间】:2021-11-22 08:47:40 【问题描述】:

我想知道我可以使用哪些方法将值从滑块小部件传递到链接到 Firestore 数据库的函数中。我有一个设置为零的值列表,目标是在更改滑块的值时更改值。这是函数的sn-p:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:wequilschool_app/screens/blend_&_mix/item.dart';

class SaveIngredientsProvider 
  /// Firestore database reference to the BlendandMix collection
  final CollectionReference blendAndMixDatabase =
      FirebaseFirestore.instance.collection("BlendandMix");

  /// Stores the item's objects
  List<Item> item = [];

  Future<void> updateIngredientCount() 

    // ignore: avoid_dynamic_calls
    return blendAndMixDatabase
        .doc('H2IbznvLGKYRvCLJSomk')
        .set(
          'ingredients': 
            'almond_butter': 0,
            'bananas': 0,
            'blackberries': 0,
            'blueberries': 0,
            'chia_seeds': 0,
            'chocolate_protein_powder': 0,
            'flax_seeds': 0,
            'greek_yogurt': 0,
            'ice_cubes': 0,
            'mango_chunks': 0,
            'mint': 0,
            'pineapple_chunks': 0,
            'raspberries': 0,
            'strawberries': 0,
            'vanilla_protein_powder': 0
          ,
        , SetOptions(merge: true))
        .then((value) => print("Ingrdient(s) Number Updated"))
        .catchError(
            (error) => print("Failed to update ingredient count: $error"));
  

这是另一个带有 Slider 小部件的 sn-p:

import 'package:flutter/material.dart';
import 'package:wequilschool_app/screens/blend_&_mix/services/save_ingredients_provider.dart';

/// Smoothie ingredient item

class Item extends StatefulWidget 
  final String image;
  final String name;
  double saveValue = 0.0;
  double? defaultSaveValue = 0.0;

  /// Each item needs an image and name, so it is required
  Item(
    Key? key,
    required this.image,
    required this.name,
    this.defaultSaveValue,
  ) : super(key: key);

  @override
  _ItemState createState() => _ItemState();


class _ItemState extends State<Item> 

  @override
  Widget build(BuildContext context) 
    return Row(
      mainAxisAlignment: MainAxisAlignment.start,
      children: [
        Image.asset(
          widget.image,
          width: 70,
          fit: BoxFit.contain,
        ),
        Expanded(
          child: Text("$widget.name", textAlign: TextAlign.center),
        ),
        Expanded(
            child: Slider(
          value: widget.defaultSaveValue ?? widget.saveValue,
          min: 0,
          max: 5,
          divisions: 5,
          label: widget.saveValue.toString(),
          onChanged: (double newValue) 
            setState(() 
              widget.defaultSaveValue = newValue;
              widget.saveValue = newValue;
            );
          ,
        )),
        ElevatedButton(
            onPressed: () 
              SaveIngredientsProvider().updateIngredientCount();
            ,
            child: const Text('Save Ingredients')),
      ],
    );
  

【问题讨论】:

【参考方案1】:

您可以在滑块的onChangedEnd() 方法中调用firestore 函数。因此,当滑块的值更改结束时,它将在 Firestore 中设置该值。 在 firestore 函数中传递滑块的值以正确设置 DB 中的值。

【讨论】:

@ChineduNwabuisi 如果以上答案对您有帮助,请告诉我们? 这是answer your question吗?请考虑接受答案,使其对社区成员更加可见。

以上是关于将 Slider 小部件中的值传递到 firestore 数据库的主要内容,如果未能解决你的问题,请参考以下文章

单击时如何将按钮值从自定义小部件传递到 tkinter 中的主应用程序

如何从模型实例(具有来自 api 的值)传递数据并将其提供给 Text() 小部件

Android:将对象从集合小部件传递到活动

如何将数据参数 throw List Tile 传递给 DART 中的有状态小部件?

VTK Iso Slider 不工作或不显示滑块小部件

如何传递一个值来初始化 Kivy 中的屏幕小部件?