Android MainAxisAlignment.start, 儿童:[ 图标(data.Icon), 尺寸箱(宽度:10), 正文( 数据值, ), ], ), 值:data.key, )) .toList(), 值:selectedOption, 一次更改:一次更改); } }
这就是我在下拉列表中使用GetX的方式 我使用的是具有MVC结构的GetX、列表或响应的模型等、在UI中显示数据的视图、处理业务逻辑的控制器。首先看一下我在这个例子中使用的示例响应 回应 现在,在你的模型课上。比方说->下拉菜单\u model.dart 这是列表的模型,将在下拉列表中显示。您可以在以下位置为您的响应创建模型:Android MainAxisAlignment.start, 儿童:[ 图标(data.Icon), 尺寸箱(宽度:10), 正文( 数据值, ), ], ), 值:data.key, )) .toList(), 值:selectedOption, 一次更改:一次更改); } },android,flutter,dropdown,getx,Android,Flutter,Dropdown,Getx,这就是我在下拉列表中使用GetX的方式 我使用的是具有MVC结构的GetX、列表或响应的模型等、在UI中显示数据的视图、处理业务逻辑的控制器。首先看一下我在这个例子中使用的示例响应 回应 现在,在你的模型课上。比方说->下拉菜单\u model.dart 这是列表的模型,将在下拉列表中显示。您可以在以下位置为您的响应创建模型: 导入'dart:convert'; DropdownModel dropdownModelFromJson(String str)=>DropdownModel.from
导入'dart:convert';
DropdownModel dropdownModelFromJson(String str)=>DropdownModel.fromJson(json.decode(str));
字符串dropdownModelToJson(DropdownModel数据)=>json.encode(data.toJson());
类下拉模型{
下拉模型({
这是我们的用户,
});
列出用户名单;
factory DropdownModel.fromJson(映射json)=>DropdownModel(
用户:List.from(json[“users”].map((x)=>User.fromJson(x)),
);
映射到JSON()=>{
“用户”:List.from(users.map((x)=>x.toJson()),
};
}
类用户{
使用者({
这个.userTypeId,
这个.userType,
});
字符串userTypeId;
字符串用户类型;
工厂用户.fromJson(映射json)=>User(
userTypeId:json[“user\u type\u id”],
userType:json[“用户类型”],
);
映射到JSON()=>{
“用户类型id”:用户类型id,
“用户类型”:用户类型,
};
}
现在,在控制器类中。比如->注册\u controller.dart
//确保导入所需的包
类RegisterController扩展GetxController{
//声明和初始化
下拉模型;
Rx userTypeListM=Rx();
RxselectedUserType=Rx();
RxuserTypeId=Rx();
//这是用来避免在获取列表之前出现任何空错误的
var toggle=false.obs;
//这是一个示例api调用,获取数据/列表并将列表分配给RxList,
//您的API调用在这个方法中是正确的
getList()异步{
String data=await rootBundle.loadString('assets/user_type.json');
model=dropdownModelFromJson(数据);
//如果userTypeListM.value不起作用,请尝试userTypeListM.assignAll(model.users)
userTypeListM.value=model.users;
toggle.value=true;
}
//在onInit()方法中调用getList()
@凌驾
void onInit(){
//TODO:实现onInit
super.onInit();
getList();
}
onSelectionChange(用户值){
selectedUserType.value=值;
userTypeId.value=value.userTypeId;
}
}
现在,在您的视图类中。让我们说->register\u view.dart
//确保导入所需的包
类注册表页扩展了无状态小部件{
final registerController=Get.put(registerController());
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:排(
儿童:[
扩大(
弹性:1,
子:容器(
//颜色:颜色,白色,
边距:仅限边集(左:15,右:15,顶部:16,底部:0),
填充:边缘组。对称(垂直:5,水平:8),
装饰:盒子装饰(
边界半径:边界半径。圆形(30),
颜色:颜色,白色,
boxShadow:[
箱形阴影(
颜色:铜色。浅背景灰色,
扩展半径:5,
半径:25,
偏移量:偏移量(5,5),
),
]
),
子:列(
/*crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.center*/
儿童:[
Obx(()=>registerController.toggle.value
?下拉按钮(
值:registerController.selectedUserType!=null?registerController.selectedUserType.value:null,
项目:registerController.userTypeListM.value
.map((用户值){
返回下拉菜单项(
价值:价值,
子项:文本(value.userType.toString()),
);
}).toList(),
onChanged:(用户值){
registerController.selectedUserType.value=值;
registerController.userTypeId.value=value.userTypeId;
registerController.update();
},
下划线:容器(颜色:Colors.transparent,),
提示:文本(“从下拉列表中选择值”),
是的,
)
:Container()
)
],
)
),
),
]
),
)
);
}
}
就这样!。它应该可以与下拉列表中的任何自定义模型一起使用。我认为您需要调用update();方法,同时更改“选择”上的值。无效更改选择(St
import 'package:cloud_firestore/cloud_firestore.dart';
class CatagoryModel {
String id;
String catagoryname;
Timestamp date;
bool status;
String user;
CatagoryModel(this.id, this.catagoryname, this.date, this.user, this.status);
CatagoryModel.fromDocumentSnapshot(DocumentSnapshot documentSnapshot) {
id = documentSnapshot.id;
catagoryname = documentSnapshot.data()['catagoryname'];
date = documentSnapshot.data()['date'];
user = documentSnapshot.data()['user'];
status = documentSnapshot.data()['status'];
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:get/get.dart';
import 'package:talhatraders/app/data/catagorymodel.dart';
class Database {
final FirebaseFirestore _firebase = FirebaseFirestore.instance;
Future<void> catagoryAdd(String catagoryname,bool status) async {
try {
await _firebase.collection('catagorydb').add({
'date': Timestamp.now(),
'status': status,
'catagoryname': catagoryname,
'user':'user1'
});
} catch (e) {
print(e);
}
}
Future<void> catagoryStatus(CatagoryModel catagorymodel)async{
try {
await _firebase.collection('catagorydb').doc(catagorymodel.id).update({'status':!catagorymodel.status});
} catch (e) {
print(e);
}
}
Future<void> catagoryDelete(CatagoryModel catagorymodel)async{
try {
await _firebase.collection('catagorydb').doc(catagorymodel.id).delete();
} catch (e) {
}
}
Stream<List<CatagoryModel>> catagoryStream() {
return _firebase
.collection('catagorydb')
.snapshots()
.map((QuerySnapshot querysnapshot) {
List<CatagoryModel> todoData= List();
querysnapshot.docs.forEach((element) {
todoData.add(CatagoryModel.fromDocumentSnapshot(element));
});
return todoData;
});
}
}
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:talhatraders/app/data/catagorymodel.dart';
import 'package:talhatraders/app/modules/catagory/controllers/catagoryservice.dart';
class ProductentryController extends GetxController {
Rx<List<CatagoryModel>> catagoryList = Rx<List<CatagoryModel>>();
List<CatagoryModel> get catagories => catagoryList.value;
var selectedItem = "Select Catagory..".obs;
void changeSelect(String select) {
selectedItem.value = select;
}
@override
void onInit() {
catagoryList.bindStream(Database().catagoryStream());
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter/services.dart';
import 'package:talhatraders/app/data/catagorymodel.dart';
import 'package:talhatraders/app/modules/catagory/controllers/catagory_controller.dart';
import 'package:talhatraders/app/modules/productentry/controllers/productentry_controller.dart';
class ProductentryView extends GetView<ProductentryController> {
ProductentryController productController = Get.put(ProductentryController());
final FirebaseFirestore _firebase = FirebaseFirestore.instance;
//Color currentColor =Colors.limeAccent;
String catagory;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('New Item'),
actions: [],
),
body: Column(children: [
GetX<ProductentryController>(
init: Get.put<ProductentryController>(ProductentryController()),
builder: (ProductentryController productentryController) {
return Expanded(
child: Container(
child: Padding(
padding: const EdgeInsets.only(
bottom: 12,top:40, left: 10.0, right: 15.0),
child: InputDecorator(
decoration: InputDecoration(
fillColor: Colors.transparent,
hintStyle: Theme.of(context).textTheme.bodyText2,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15),
borderSide: BorderSide(
width: 10,
style: BorderStyle.none,
),
),
filled: true,
contentPadding: EdgeInsets.all(16),
),
child: DropdownButtonHideUnderline(
child: DropdownButton(
isExpanded: true,
isDense:
true, // Reduces the dropdowns height by +/- 50%
icon: Icon(Icons.keyboard_arrow_down),
hint: Text(
'${productentryController.selectedItem.toString()}'),
value: catagory,
items: productentryController.catagories
.map((CatagoryModel item) {
return DropdownMenuItem(
value: item.catagoryname,
child: Text(item.catagoryname),
);
}).toList(),
onChanged: (selectedItem) {
productentryController.changeSelect(Item);
catagory=productController.selectedItem.value;
}),
)),
),
),
);
},
),
]),
);
}
}
class DropdownPickerGetX extends StatelessWidget {
DropdownPickerGetX(
{this.menuOptions, this.selectedOption, this.onChanged});
final List<dynamic> menuOptions;
final String selectedOption;
final void Function(String) onChanged;
@override
Widget build(BuildContext context) {
//if (Platform.isIOS) {}
return DropdownButton<String>(
items: menuOptions
.map((data) => DropdownMenuItem<String>(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Icon(data.icon),
SizedBox(width: 10),
Text(
data.value,
),
],
),
value: data.key,
))
.toList(),
value: selectedOption,
onChanged: onChanged);
}
}
{
"users": [
{
"user_type_id": "0",
"user_type": "USER 1"
},
{
"user_type_id": "1",
"user_type": "USER 2"
},
{
"user_type_id": "2",
"user_type": "USER 3"
},
{
"user_type_id": "3",
"user_type": "USER 4"
}
]
}
import 'dart:convert';
DropdownModel dropdownModelFromJson(String str) => DropdownModel.fromJson(json.decode(str));
String dropdownModelToJson(DropdownModel data) => json.encode(data.toJson());
class DropdownModel {
DropdownModel({
this.users,
});
List<User> users;
factory DropdownModel.fromJson(Map<String, dynamic> json) => DropdownModel(
users: List<User>.from(json["users"].map((x) => User.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"users": List<dynamic>.from(users.map((x) => x.toJson())),
};
}
class User {
User({
this.userTypeId,
this.userType,
});
String userTypeId;
String userType;
factory User.fromJson(Map<String, dynamic> json) => User(
userTypeId: json["user_type_id"],
userType: json["user_type"],
);
Map<String, dynamic> toJson() => {
"user_type_id": userTypeId,
"user_type": userType,
};
}
//Make sure to import required packages
class RegisterController extends GetxController{
//Declaration and initializations
DropdownModel model;
Rx<List<User>> userTypeListM = Rx<List<User>>();
Rx<User>selectedUserType = Rx<User>();
Rx<String>userTypeId = Rx<String>();
//this is used, just to avoid any null error until list is fetched
var toggle = false.obs;
//This is a sample api call, fetch your data/list and assign list to RxList,
//Your API Call goes right in this method
getList() async {
String data = await rootBundle.loadString('assets/user_type.json');
model = dropdownModelFromJson(data);
//if in case userTypeListM.value doesn't work then try userTypeListM.assignAll(model.users)
userTypeListM.value = model.users;
toggle.value = true;
}
//Call getList() in onInit() method
@override
void onInit() {
// TODO: implement onInit
super.onInit();
getList();
}
onSelectionChange(User value){
selectedUserType.value = value;
userTypeId.value = value.userTypeId;
}
}
//Make sure to import required packages
class RegisterPage extends StatelessWidget{
final registerController = Get.put(RegisterController());
@override
Widget build(BuildContext context) {
return Scaffold(
body:Center(
child:Row(
children:[
Expanded(
flex:1,
child: Container(
//color: Colors.white,
margin: EdgeInsets.only(left: 15,right: 15,top: 16,bottom: 0),
padding: EdgeInsets.symmetric(vertical: 5, horizontal: 8),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
color: Colors.white,
boxShadow: [
BoxShadow(
color: CupertinoColors.lightBackgroundGray,
spreadRadius: 5,
blurRadius: 25,
offset: Offset(5,5),
),
]
),
child: Column(
/* crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,*/
children: <Widget>[
Obx(()=> registerController.toggle.value
? DropdownButton(
value: registerController.selectedUserType!=null ? registerController.selectedUserType.value: null,
items: registerController.userTypeListM.value
.map<DropdownMenuItem<User>>((User value) {
return DropdownMenuItem<User>(
value: value,
child: Text(value.userType.toString()),
);
}).toList(),
onChanged: (User value){
registerController.selectedUserType.value = value;
registerController.userTypeId.value = value.userTypeId;
registerController.update();
},
underline: Container(color: Colors.transparent,),
hint: Text("Select value from dropdown"),
isExpanded: true,
)
: Container()
)
],
)
),
),
]
),
)
);
}
}