тип ‘Future’ не является подтипом типа ‘() => void’ в flutter firestore

#flutter #dart #google-cloud-firestore

#flutter #dart #google-cloud-firestore

Вопрос:

Я пытаюсь создать эти поля в firestore с помощью flutter, но я могу продолжать получать эту ошибку. Я видел, что другой человек опубликовал здесь аналогичный вопрос, но его предпочтительное решение не решает мой вопрос. Выдержка из моего кода приведена ниже

                                           GestureDetector(
                                          onTap: (){
                                            return showDialog(
                                              context: context,
                                              builder: (context){
                                                return Center(
                                                  child: Material(
                                                    child: Padding(
                                                      padding: EdgeInsets.only(left: 20, right: 20, top: 10),
                                                      child: Container(
                                                        decoration: BoxDecoration(
                                                            borderRadius: BorderRadius.circular(10)
                                                        ),
                                                        height: 160,
                                                        width: 250,
                                                        child: Column(
                                                          children: [
                                                            Container(
                                                              decoration: BoxDecoration(
                                                                borderRadius: BorderRadius.circular(10)
                                                              ),
                                                              child: Form(
                                                                key: _mobiileKey,
                                                                autovalidate: _autoValidate,
                                                                child: TextFormField(
                                                                  maxLines: 1,
                                                                  autofocus: false,
                                                                  keyboardType: TextInputType.phone,
                                                                  onChanged: (value) {
                                                                    mobile = value;
                                                                  },
                                                                  validator: validateMobile,
                                                                  onSaved: (value) => mobile = value,
                                                                  style: TextStyle(
                                                                    color: Colors.black,
                                                                  ),
                                                                  decoration: InputDecoration(
                                                                      focusedBorder: OutlineInputBorder(
                                                                        borderRadius: BorderRadius.all(Radius.circular(4)),
                                                                        borderSide: BorderSide(width: 1,color: Palette.mainColor),
                                                                      ),
                                                                      border: OutlineInputBorder(),
                                                                      labelText: 'Phone Number',
                                                                      prefixIcon: Icon(Icons.phone_android,
                                                                        color: Colors.black,),
                                                                      labelStyle: TextStyle(
                                                                        fontSize: 15,
                                                                        color: Colors.black,
                                                                      )
                                                                  ),
                                                                ),
                                                              ),
                                                            ),
                                                            Padding(
                                                              padding: EdgeInsets.only(top: 10),
                                                              child: MaterialButton(
                                                                onPressed: validateAndSubmit(title, price, thumbnailUrl, mobile),
                                                                child: Text('PROCEED TO ORDER',
                                                                  style: TextStyle(
                                                                    fontSize: 15,
                                                                    fontWeight: FontWeight.bold,
                                                                  ),
                                                                ),
                                                                
                                                                color: Color(0xff706695),
                                                                elevation: 0,
                                                                minWidth: 400,
                                                                height: 50,
                                                                textColor: Colors.white,
                                                                shape: RoundedRectangleBorder(
                                                                    borderRadius: BorderRadius.circular(10)
                                                                ),
                                                              ),
                                                            ),
                                                          ],
                                                        ),
                                                      ),
                                                    )
                                                  )
                                                );
                                              }
                                            );
                                            print('Orders');
                                          }, 
                                        )
  

И ЭТО функция validateAndSubmit

 validateAndSubmit (title, price, thumbnailUrl, mobile) async {
    if (validateAndSave()){
      setState(() {
        loading = true;
      });

      try{
        Navigator.pushReplacement(context,
            MaterialPageRoute(builder: (context) => BottomNavScreen()));

        User user = auth.currentUser;

        await db.doc(widget.productId).set({
          'uid': user.uid,
          "Product Title": title,
          "Product Price": price,
          "Mobile Number": mobile,
          "thumbnail": thumbnailUrl,
          "Published Date": DateTime.now(),
        }).then((value) => null);

      } catch (e){

      }
    }
  }
  

И ЭТО СООБЩЕНИЕ ОБ ОШИБКЕ

тип ‘Future’ не является подтипом типа ‘() => void’

Любая помощь приветствуется.

Ответ №1:

изменить:

 onPressed: validateAndSubmit(title, price, thumbnailUrl, mobile),
  

Для:

 onPressed:(){
  validateAndSubmit(title, price, thumbnailUrl, mobile);
}
  

Я думаю, что это может быть проблемой. Для onPressed требуется void . Дайте мне знать, если это сработает.