我目前正在学习,我不知道为什么我不能通过构造函数传递这些数据。
主屏幕:
TitleTextField(
textFieldOnSaved: textFieldFinalValue,
hintText: "Add title here",
),
createLocationPostInFirestore(
{String mediaUrl,
String description,
double heightRestriction,
double widthRestriction}) {
locationPostRef
.document(currentUser.id)
.collection("user_location_posts")
.document(postId)
.setData({
"postId": postId,
"ownerId": currentUser.id,
"username": currentUser.username,
]
"test_title": textFieldFinalValue,
});
}
handlePostSubmit() async {
setState(() {
isUploading = true;
});
await compressStoryImage();
String mediaUrl = await uploadStoryImage(locationImageFile);
createLocationPostInFirestore(
mediaUrl: mediaUrl,
heightRestriction: heightRestrictionValue,
);
SnackBar snackbar = SnackBar(
content: Text("Location Uploaded"),
);
_addNewLocationScreenScaffoldKey.currentState.showSnackBar(snackbar);
setState(() {
isUploading = false;
postId = Uuid().v4();
});
}
这是小部件:
import 'package:flutter/material.dart';
class TitleTextField extends StatefulWidget {
final TextEditingController handleTextEditingController;
final String textFieldOnSaved;
final String hintText;
TitleTextField(
{this.handleTextEditingController, this.textFieldOnSaved, this.hintText});
void _getTextfield(String textFieldOnSaved) {
textFieldOnSaved = textFieldOnSaved;
}
_TitleTextFieldState createState() => _TitleTextFieldState();
}
class _TitleTextFieldState extends State<TitleTextField> {
final TextEditingController handleTextEditingController =
TextEditingController();
@override
Widget build(BuildContext context) {
return Container(
child: TextField(
decoration: new InputDecoration.collapsed(
hintText: widget.hintText,
),
controller: handleTextEditingController,
onChanged: (String textFieldValue) {
setState(() {
widget._getTextfield(textFieldValue);
});
},
),
);
}
}
我想做的是从文本字段中获取值,并将其传递回构造函数,然后返回主屏幕,以便随后将值保存到Firestore。
我要去哪里错了?
答案 0 :(得分:1)
我是初学者,但也许我可以为您提供帮助。 我为此安装了软件包共享首选项。 我也在我的应用程序中使用过它。
包裹在这里:https://pub.dev/packages/shared_preferences#-installing-tab-
我有一个文件:Formula.dart,其中包含我需要的所有公式和变量。在这里,我已经导入:
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:math';
我也有这个变量:
bool weight = true;
int mixingRatio = 50;
int liquidGravity = 105;
然后我有一种存储值的方法,用户输入:
updateValues() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setInt('mixingRatio', mixingRatio);
prefs.setInt('liquidGravity', liquidGravity);
prefs.setBool('weight', weight);
}
您也可以加载此值,我仅在加载的第一页上具有此值。看来它已经存在了,您必须将其直接放在类下:
@override
void initState() {
super.initState();
loadValues();
}
loadValues() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
mixingRatio = (prefs.getInt('mixingRatio') ?? 50);
liquidGravity = (prefs.getInt('liquidGravity') ?? 105);
weight = (prefs.getBool('weight') ?? true);
}
您会看到,它拾取了存储的值。如果没有值,则将其放在??之后给出的值中。
祝你好运!