Flutter - 基于下拉值的 Firestore 流控制器

问题描述

我对 Flutter 和 dart 比较陌生,现在面临这个我找不到任何解决方案的问题。

目标

  • 从 firestore 生成集合的列表文档条目,其中通过下拉菜单选择集合。

问题

  • 如何在用户选择另一个下拉选项时刷新流控制器?
  • 是否通过 setState 函数将所选值分配给流变量?

Firestore 架构

种植(集合)-> 用户 ID(文档)-> 一月/二月(子集合)-> 植物信息文档

代码

class _PlantingListState extends State<PlantingList> {
FirebaseAuth _auth = FirebaseAuth.instance;

StreamController _streamController;
Stream _stream;
final _monthOptions = ["January","Febuary"];
String _option = "";
String uid = "";

@override
void initState() {
  super.initState();

  _streamController = StreamController();
  _stream = _streamController.stream;
}

_onChange(){
  _streamController.add(widget.db.collection("Planting").doc(uid).collection(_option).snapshots());
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: GFAppBar(
      bottom: PreferredSize(
        preferredSize: Size.fromHeight(48.0),child: Row(
            children: <Widget>[
            Expanded(
                child: FormBuilderDropdown(
                name: 'month',initialValue: "January",decoration: Inputdecoration(
                  labelText: 'Month',),onChanged: (value){
                  User user = _auth.currentUser;
                  setState(() {
                    _option = value;
                    uid = user.uid;
                  });
                  print(_option);
                  print(uid);
                },allowClear: true,hint: Text('Select Month'),validator: FormBuilderValidators.compose(
                    [FormBuilderValidators.required(context)]),items: _monthOptions
                    .map((month) => DropdownMenuItem(
                  value: month,child: Text('$month'),))
                    .toList(),)
        ],leading: GFIconButton(
      icon: Icon(
        Icons.arrow_back,color: Colors.grey,onpressed: () {
        Navigator.pop(context);
      },type: GFButtonType.transparent,title: Text("View Planting Entry"),backgroundColor: Colors.white,body: StreamBuilder<QuerySnapshot>(
    stream: _stream,builder: (context,AsyncSnapshot<QuerySnapshot> snapshot){
      if(!snapshot.hasData) {
        return Text('Loading...');
      }
      return Column(
        children: [
          new Expanded(child: ListView.builder(
              itemCount: snapshot.data.docs.length,itemBuilder: (context,index){
                String itemTitle = snapshot.data.docs[index]['name'];
                // return CardItem(itemTitle: itemTitle,);
              }))
        ],);
    },)
);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)