如何解决RxString 中传递的 Dropdown 的 setState() 中的数据值在 Flutter 中使用 Getx 显示空值
我需要从第 1 页的文本字段和下拉菜单中获取输入并将其显示在另一个页面上。 文本工作正常,但下拉值显示为“空”。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:justpoll/Constants.dart';
import 'package:justpoll/screens/create_poll/create_poll2.dart';
import 'package:justpoll/widgets/custom_input.dart';
TextEditingController questionController,op1Controller,op2Controller,op3Controller,op4Controller;
String opemo1,opemo2,opemo3,opemo4;
class CreatePoll1 extends StatefulWidget {
@override
_CreatePollState createState() => _CreatePollState();
}
class _CreatePollState extends State<CreatePoll1> {
final controller = Get.put(PollDataController());
final _formKey = GlobalKey<FormState>();
List<String> emoji = [
"❤️","?","✌️",];
下拉代码:
Padding(
padding: const EdgeInsets.only(right: 2.0),child: Row(
children: [
Expanded(
flex: 2,child: Padding(
padding: const EdgeInsets.only(right: 20),child: CustomInput(
textEditingController: op1Controller,labletext: 'Option 1*',decoration: InputDecoration(hintText: 'Option'),validator: (v) {
if (v.trim().isEmpty)
return 'Please enter something';
return null;
},),Expanded(
flex: 1,child: Padding(
padding: const EdgeInsets.only(right: 30),child: Container(
padding: EdgeInsets.only(left: 10,right: 16),decoration: BoxDecoration(
border: Border.all(
color: MyColors.black,width: 1.5),borderRadius: BorderRadius.circular(10)),child: DropdownButton(
hint: Text('❤️'),value: opemo1,icon: Icon(Icons.arrow_drop_down),iconSize: 36,isExpanded: true,underline: SizedBox(),style: TextType.regularDarkText,onChanged: (newValue) {
setState(() {
opemo1 = newValue;
});
},items: emoji.map((opemo1) {
return DropdownMenuItem(
value: opemo1,child: Text(opemo1),);
}).toList(),],
GetX 控制器:
DropDownMenu 的值用于 RxString 传递数据。
class PollDataController extends GetxController {
RxString question = ''.obs;
RxString op1 = ''.obs;
RxString op2 = ''.obs;
RxString op3 = ''.obs;
RxString op4 = ''.obs;
RxString op1Emoji = '$opemo1'.obs;
RxString op2Emoji = ''.obs;
RxString op3Emoji = ''.obs;
RxString op4Emoji = ''.obs;
@override
void onInit() {
super.onInit();
questionController = TextEditingController();
questionController.addListener(() {
question.value = questionController
.text; // the RxString is automatically updated with whatever is input in the textfield
});
op1Controller = TextEditingController();
op1Controller.addListener(() {
op1.value = op1Controller
.text; // the RxString is automatically updated with whatever is input in the textfield
});
op2Controller = TextEditingController();
op2Controller.addListener(() {
op2.value = op2Controller
.text; // the RxString is automatically updated with whatever is input in the textfield
});
op3Controller = TextEditingController();
op3Controller.addListener(() {
op3.value = op3Controller
.text; // the RxString is automatically updated with whatever is input in the textfield
});
op4Controller = TextEditingController();
op4Controller.addListener(() {
op4.value = op4Controller
.text; // the RxString is automatically updated with whatever is input in the textfield
});
}
@override
void onClose() {
super.onClose();
questionController.dispose();
op1Controller.dispose();
op2Controller.dispose();
op3Controller.dispose();
op4Controller.dispose();
}
}
下一页显示代码:
Padding(
padding:
const EdgeInsets.only(left: 10,top: 20),child: Obx(
() => Text(pollDataController.op1Emoji.value),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。