Flutter firestore阵列中的颤振填充下拉按钮
如何将此数组列表填充到下拉按钮中 我想将此位置列表填充到下拉按钮。 [以下是我的数据库的外观]Flutter firestore阵列中的颤振填充下拉按钮,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,如何将此数组列表填充到下拉按钮中 我想将此位置列表填充到下拉按钮。 [以下是我的数据库的外观] 您可以按以下方式创建下拉按钮 import 'package:flutter/material.dart'; void main() => runApp(MaterialApp( home: MyApp(), )); class MyApp extends StatefulWidget { @override _MyAppState createState(
您可以按以下方式创建下拉按钮
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: MyApp(),
));
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String dropdownValue;
List<String> listOfStrings = ["apple", "banana", "strawberry", "cherry"];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: DropdownButton<String>(
value: dropdownValue,
icon: Icon(Icons.arrow_downward),
iconSize: 24,
elevation: 16,
style: TextStyle(color: Colors.deepPurple),
underline: Container(
height: 2,
color: Colors.deepPurpleAccent,
),
onChanged: (String newValue) {
setState(() {
dropdownValue = newValue;
});
},
items: listOfStrings.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
),
),
);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MaterialApp(
主页:MyApp(),
));
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
字符串下拉值;
列表字符串=[“苹果”、“香蕉”、“草莓”、“樱桃”];
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:下拉按钮(
value:dropdownValue,
图标:图标(图标。向下箭头),
iconSize:24,
海拔:16,
样式:TextStyle(颜色:Colors.deepPurple),
下划线:容器(
身高:2,
颜色:颜色。深紫色,
),
onChanged:(字符串newValue){
设置状态(){
dropdownValue=newValue;
});
},
项:listOfStrings.map((字符串值){
返回下拉菜单项(
价值:价值,
子项:文本(值),
);
}).toList(),
),
),
);
}
}
我推荐flatter\u form\u bloc
套餐。这非常有帮助,您可以异步地将项添加到下拉数组中,以便从API或Firebase获取它们
但是,如果不想使用包,可以创建一个空列表,并将其最初分配给items参数。在您的
initState
方法中,您可以用项目填充该列表,然后调用setState
我知道,现在回答您的问题已经太晚了。但也许,我的答案是给任何寻求答案的人的
只需使用streambuilder在下拉列表中对firestore数据进行流式处理。
以下是我的例子:
StreamBuilder(
stream: Firestore.instance.collection('your collectionName').document('yourDocument').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return textCustom('Loading', Colors.black87, 16, 'Montserrat');
} else {
final data = snapshot.data['data'];
return Theme(
data: Theme.of(context).copyWith(
canvasColor: Color(0xFF221F1F),
),
child: DropdownButtonFormField(
style: TextStyle(color: Colors.white70),
value: _value,
items: data
.map<DropdownMenuItem<String>>(
(x) => DropdownMenuItem(
child: textCustom(
x, Colors.white, 16, 'Montserrat'),
value: '${x}',
),
)
.toList(),
onChanged: (val) => setState(() {
_value = val;
}),
),
);
}
},
)
StreamBuilder(
流:Firestore.instance.collection('your collectionName').document('yourDocument').snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回textCustom('Loading',Colors.black87,16,'Montserrat');
}否则{
最终数据=快照.data['data'];
返回主题(
数据:Theme.of(context).copyWith(
画布颜色:颜色(0xFF221F1F),
),
子项:DropdownButtonFormField(
样式:TextStyle(颜色:Colors.white70),
值:_值,
项目:数据
.地图(
(x) =>下拉菜单项(
孩子:textCustom(
x、 颜色:白色、16、‘蒙特塞拉特’,
值:“${x}”,
),
)
.toList(),
一旦更改:(val)=>setState(){
_值=val;
}),
),
);
}
},
)
签出此链接是否回答了您的问题?当我手动尝试时,它正在工作。当我使用数据['location']时。它给我一个错误。'List'不是'List'类型的子类型。我收到一个错误类型。'List'不是'List'类型的子类型,就像它正在工作一样。我试着用它来表示错误。List listofstring=data['location']什么是数据['location']?你必须给出列表。数据['location']是我从firestore收到的数据。看了这张图片后,你可能会明白这一点。()使用方法如下。List listofstring=data['location'].map((e)=>e.toString()).toList()@利万