【问题标题】:Write an array in Firestore from a string in Flutter从 Flutter 中的字符串写入 Firestore 中的数组
【发布时间】:2021-03-04 19:42:02
【问题描述】:

我已经花了一天的时间来解决这个问题,所以我想我可以寻求一点帮助: 我需要在 firestore 中写一个数组,从 Flutter 中的一个字符串。

基本上我有 MyString = "a,ab,abc,abcd" 在颤动。 我需要将它发送到新数组中的 firestore,字符串中的每个逗号分隔值:

#数组

  • 一个
  • ab
  • abc
  • abcd

知道如何实现吗?

完整代码:

class MyForm extends StatefulWidget {
  @override
  _MyFormState createState() => _MyFormState();
}
class _MyFormState extends State {

  final _formKey = GlobalKey();
  final _newPerson = Person();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Profile')),
        body: Container(
            padding:
            const EdgeInsets.symmetric(vertical: 16.0, horizontal: 16.0),
            child: Builder(
                builder: (context) => Form(
                    key: _formKey,
                    child: Column(
                        crossAxisAlignment: CrossAxisAlignment.stretch,
                        children: [
                          TextFormField(
                            decoration:
                            InputDecoration(labelText: 'Nom'),
                            validator: (value) {
                              if (value.isEmpty) {
                                return 'Please enter your first name';
                              }
                            },
                            onChanged: (val) =>
                                setState(() => _newPerson.firstName = val),
                          ),
                          TextFormField(
                              decoration:
                              InputDecoration(labelText: 'Last name'),
                              validator: (value) {
                                if (value.isEmpty) {
                                  return 'Please enter your last name.';
                                }
                              },
                              onChanged: (val) =>
                                  setState(() => _newPerson.lastName = val)),
                          // Container(
                          //   padding: const EdgeInsets.fromLTRB(0, 50, 0, 20),
                          //   child: Text('Subscribe'),
                          // ),
                         // // SwitchListTile(
                         //      title: const Text('Monthly Newsletter'),
                         //      value: _newPerson.newsletter,
                         //      onChanged: (bool val) =>
                         //          setState(() => _newPerson.newsletter = val)),
                         // // Container(
                         //    padding: const EdgeInsets.fromLTRB(0, 50, 0, 20),
                         //    child: Text('Interests'),
                         //  ),
                         //  CheckboxListTile(
                         //      title: const Text('Cooking'),
                         //      value: _newPerson.passions[Person.PassionCooking],
                         //      onChanged: (val) {
                         //        setState(() =>
                         //        _newPerson.passions[Person.PassionCooking] = val);
                         //      }),
                         //  CheckboxListTile(
                         //      title: const Text('Traveling'),
                         //      value: _newPerson.passions[Person.PassionTraveling],
                         //      onChanged: (val) {
                         //        setState(() => _newPerson
                         //            .passions[Person.PassionTraveling] = val);
                         // //      }),
                         //  CheckboxListTile(
                         //      title: const Text('Hiking'),
                         //      value: _newPerson.passions[Person.PassionHiking],
                         //      onChanged: (val) {
                         //        setState(() =>
                         //        _newPerson.passions[Person.PassionHiking] = val);
                         //      }),
                          Container(
                              padding: const EdgeInsets.symmetric(
                                  vertical: 16.0, horizontal: 16.0),
                              child: RaisedButton(
                                  onPressed: () {
                                  globals.update("nv_personne_nom", (value) => _newPerson.lastName);
                                  globals.update("nv_personne_prenom", (value) => _newPerson.firstName);
                                  print(_newPerson.lastName);
                                  print(_newPerson.firstName);

                              //construction des keywords
                                  String buildkeywords = "";

                              //calcul longueur du nom
                                  int strlength = _newPerson.lastName.length;
                                  print(strlength);
                                  int i = 0;
                                  while (i <= strlength) {
                                  print(_newPerson.lastName.substring(0, i));
                                  buildkeywords = buildkeywords + "," + _newPerson.lastName.substring(0, i);
                              //globals.update("keywords",(value) => (buildkeywords));
                                  i = i + 1;
                                  };
                              //Making a list from the built keyword
                                 //globals.update("keywords",(value) => (buildkeywords));
                                  List<String> arrayOfKeywords = buildkeywords.split(',');
                                

                                  },

                                  child: Text('check')
                              )
                          ),
                          Container(
                              padding: const EdgeInsets.symmetric(
                                  vertical: 16.0, horizontal: 16.0),
                              child: RaisedButton(
                                  onPressed: () {
                                    createPerson;
                                  },

                                  child: Text('save')
                              )
                          ),
                        ])))));
  }
  _showDialog(BuildContext context) {
    Scaffold.of(context)
        .showSnackBar(SnackBar(content: Text('Submitting form')
    )
    );
  }


}



  final databaseReference = FirebaseFirestore.instance;

  void createPerson() async {


    /* await databaseReference.collection("Personnes")
      .document("BAX")
      .setData({
    'prenom': (globals["nv_personne_prenom"]),
    'nom': (globals["nv_personne_nom"]),
    'keyword': (globals["keyword"]),

  });*/


    DocumentReference ref = await databaseReference.collection("personnes")
        .add({
      // 'personne': '',
      // 'categorie': '',
      // 'Intervenant': '',
      // 'Intervenant': (globals["utilisateur"]),
      // 'nom': (globals["lieu"]),
      'prenom': (globals["nv_personne_prenom"]),
      'nom': (globals["nv_personne_nom"]),
      //'keywords': arrayOfKeywords,

    });

    print(ref.id);
  }

【问题讨论】:

    标签: arrays string firebase flutter google-cloud-firestore


    【解决方案1】:

    首先,将字符串转换为List

    List<String> arrayString = MyString.split(',');
    

    然后将数组写入firestore

     await FirebaseFirestore.instance.collection('collection').add({'arrayString':arrayString});
    

    编辑:

    class MyForm extends StatefulWidget {
      @override
      _MyFormState createState() => _MyFormState();
    }
    
    class _MyFormState extends State {
      final _formKey = GlobalKey();
      final _newPerson = Person();
      // initialize an empty array
      List<String> arrayOfKeywords = [];
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(title: Text('Profile')),
            body: Container(
                padding:
                    const EdgeInsets.symmetric(vertical: 16.0, horizontal: 16.0),
                child: Builder(
                    builder: (context) => Form(
                        key: _formKey,
                        child: Column(
                            crossAxisAlignment: CrossAxisAlignment.stretch,
                            children: [
                              TextFormField(
                                decoration: InputDecoration(labelText: 'Nom'),
                                validator: (value) {
                                  if (value.isEmpty) {
                                    return 'Please enter your first name';
                                  }
                                },
                                onChanged: (val) =>
                                    setState(() => _newPerson.firstName = val),
                              ),
                              TextFormField(
                                  decoration:
                                      InputDecoration(labelText: 'Last name'),
                                  validator: (value) {
                                    if (value.isEmpty) {
                                      return 'Please enter your last name.';
                                    }
                                  },
                                  onChanged: (val) =>
                                      setState(() => _newPerson.lastName = val)),
                              // Container(
                              //   padding: const EdgeInsets.fromLTRB(0, 50, 0, 20),
                              //   child: Text('Subscribe'),
                              // ),
                              // // SwitchListTile(
                              //      title: const Text('Monthly Newsletter'),
                              //      value: _newPerson.newsletter,
                              //      onChanged: (bool val) =>
                              //          setState(() => _newPerson.newsletter = val)),
                              // // Container(
                              //    padding: const EdgeInsets.fromLTRB(0, 50, 0, 20),
                              //    child: Text('Interests'),
                              //  ),
                              //  CheckboxListTile(
                              //      title: const Text('Cooking'),
                              //      value: _newPerson.passions[Person.PassionCooking],
                              //      onChanged: (val) {
                              //        setState(() =>
                              //        _newPerson.passions[Person.PassionCooking] = val);
                              //      }),
                              //  CheckboxListTile(
                              //      title: const Text('Traveling'),
                              //      value: _newPerson.passions[Person.PassionTraveling],
                              //      onChanged: (val) {
                              //        setState(() => _newPerson
                              //            .passions[Person.PassionTraveling] = val);
                              // //      }),
                              //  CheckboxListTile(
                              //      title: const Text('Hiking'),
                              //      value: _newPerson.passions[Person.PassionHiking],
                              //      onChanged: (val) {
                              //        setState(() =>
                              //        _newPerson.passions[Person.PassionHiking] = val);
                              //      }),
                              Container(
                                  padding: const EdgeInsets.symmetric(
                                      vertical: 16.0, horizontal: 16.0),
                                  child: RaisedButton(
                                      onPressed: () {
                                        globals.update("nv_personne_nom",
                                            (value) => _newPerson.lastName);
                                        globals.update("nv_personne_prenom",
                                            (value) => _newPerson.firstName);
                                        print(_newPerson.lastName);
                                        print(_newPerson.firstName);
    
                                        //construction des keywords
                                        String buildkeywords = "";
    
                                        //calcul longueur du nom
                                        int strlength = _newPerson.lastName.length;
                                        print(strlength);
                                        int i = 0;
                                        while (i <= strlength) {
                                          print(
                                              _newPerson.lastName.substring(0, i));
                                          buildkeywords = buildkeywords +
                                              "," +
                                              _newPerson.lastName.substring(0, i);
                                          //globals.update("keywords",(value) => (buildkeywords));
                                          i = i + 1;
                                        }
                                        ;
                                        //Making a list from the built keyword
                                        //globals.update("keywords",(value) => (buildkeywords));
                                        arrayOfKeywords = buildkeywords.split(',');
                                      },
                                      child: Text('check'))),
                              Container(
                                  padding: const EdgeInsets.symmetric(
                                      vertical: 16.0, horizontal: 16.0),
                                  child: RaisedButton(
                                      onPressed: () {
                                        // passing the array to createPerson
                                        createPerson(arrayOfKeywords);
                                      },
                                      child: Text('save'))),
                            ])))));
      }
    
      _showDialog(BuildContext context) {
        Scaffold.of(context)
            .showSnackBar(SnackBar(content: Text('Submitting form')));
      }
    }
    
    final databaseReference = FirebaseFirestore.instance;
    
    void createPerson(List<String> arrayOfKeywords) async {
      /* await databaseReference.collection("Personnes")
          .document("BAX")
          .setData({
        'prenom': (globals["nv_personne_prenom"]),
        'nom': (globals["nv_personne_nom"]),
        'keyword': (globals["keyword"]),
    
      });*/
    
    // !----------------------------
      DocumentReference ref = await databaseReference.collection("personnes").add({
        // 'personne': '',
        // 'categorie': '',
        // 'Intervenant': '',
        // 'Intervenant': (globals["utilisateur"]),
        // 'nom': (globals["lieu"]),
        'prenom': (globals["nv_personne_prenom"]),
        'nom': (globals["nv_personne_nom"]),
        'keywords': arrayOfKeywords,
      });
    
      print(ref.id);
    }
    

    【讨论】:

    • 这是个好主意,谢谢!虽然我无法测试它,因为我无法将 arraystring 变量传递给我用来在 Firestore 中编写的 void 函数。基本上我有我的主类 MyForm ,它从用户条目构建变量,当用户点击提交时,一个 void createPerson() 异步函数被调用。但我无法在那里使用 MyForm 中的变量。任何想法 ? (对不起......这是我知道的问题中的一个问题:)
    • 尝试通过构造函数传递数组字符串
    • 我正在尝试,但我就是不明白,当我创建构造函数时,我的变量无法识别。你会考虑真正的付费辅导吗?我很感兴趣,我真的需要帮助:)
    • 用代码更新了我的问题:我有一个 _MyFormState 类,用户可以在其中输入名字和姓氏。点击复选按钮时,名字和姓氏存储在一个全局变量文件中。然后从姓氏(这是我最初的问题)构建一个关键字列表。并存储在 arrayOfKeywords 变量中。检查后,点击 Save 按钮将调用 createPerson void 函数。在那里我得到了以前存储在全局中的变量,我还需要得到 arrayOfKeywords 但我不知道该怎么做。
    • 我的问题是我的 void 函数正在从构造函数中获取空列表。不是更新的。
    猜你喜欢
    • 2020-01-29
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    相关资源
    最近更新 更多