【发布时间】: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')),
],
);
}
}
【问题讨论】:
标签: flutter google-cloud-firestore flutter-widget