如何在小部件颤振中设置表单验证

时间:2021-06-21 15:21:46

标签: flutter dart

我正在处理颤振项目。我有一个未按预期工作的修订表单验证器。当我将 TextFormField 留空时,验证器不会显示任何内容。我想留在修订表单上,直到我输入值。

提前致谢

我的代码:

class Revision extends StatefulWidget {

}

class _RevisionState extends State<Revision> with TickerProviderStateMixin {

  
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

  RevisionApi revisionApi = RevisionApi();

  TextEditingController _Kilometrage_revisionController =
      TextEditingController();


_showAddDialog() async {
    await showDialog(
        context: context,
        builder: (context) => AlertDialog(
              backgroundColor: Colors.white,
              title: Text("Ajouter un évènement"),
              content: StatefulBuilder(builder: (
                BuildContext context,
                StateSetter setState,
              ) {
                return SingleChildScrollView(
                    child: Form(
                  key: _formKey,
                  child: Column(
                      mainAxisSize: MainAxisSize.min,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Row(children: [
                          Expanded(
                              child: DropdownButtonFormField(
                            decoration: InputDecoration(
                              hoverColor: Colors.white,
                              //contentPadding: EdgeInsets.only(left: 10, right: 15, top: 15),
                              labelText: 'Type',
                              alignLabelWithHint: true,
                              labelStyle: TextStyle(
                                color: kPrimaryColor,
                              ),
                              enabledBorder: UnderlineInputBorder(
                                borderSide: BorderSide(color: Colors.grey),
                              ),
                            ),
                            dropdownColor: Colors.white,
                            value: status,
                            items: <DropdownMenuItem>[
                              DropdownMenuItem(
                                // value: 'videnge',
                                value: 0,

                                child: InkWell(
                                  child: Text('videnge'),
                                  hoverColor: Colors.indigo,
                                ),
                              ),
                              DropdownMenuItem(
                                // value: 'visite technique',
                                value: 1,

                                child: Text('visite technique'),
                              ),
                              DropdownMenuItem(
                                //  value: 'assurance véhicule',
                                value: 2,

                                child: Text('assurance véhicule'),
                              ),
                              DropdownMenuItem(
                                // value: 'autre',
                                value: 3,

                                child: Text('autre'),
                              ),
                            ],
                            onChanged: (value) {
                              setState(() {
                                status = value;
                              });
                            },
                          )),
                        ]),
                      
                        if (status == 1) visiTechniqueDropdown(),
                      

                      ]),
                ));
              }),
              actions: <Widget>[
                TextButton(
                  child: Text(
                    "Enregistrer",
                    style: TextStyle(
                        color: Colors.red, fontWeight: FontWeight.bold),
                  ),
                  onPressed: () {
                    if (status == null) return;
                    setState(() {
                      if (_events[_controller.selectedDay] != null) {
                        _events[_controller.selectedDay].add(status);
                      } else {
                        _events[_controller.selectedDay] = [status];
                      }
                      prefs.setString(
                          "events", json.encode(encodeMap(_events)));
                      status;

                      setRevision();
                      _KilometrageController.clear();
                      _eventController.clear();
                      _EmplacementController.clear();
                      _DateController.clear();
                      _repeat_revisionController.clear();
                      _revision_agenceController.clear();
                      _Kilometrage_revisionController.clear();
                      Navigator.of(context).pop();
                      //  Navigator.pop(context);
                    });
                  },
                ),
                new TextButton(
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                  child: const Text('Retour'),
                ),
              ],
            ));
  }
 void setRevision() async {
  
    print("hello");

    if (_formKey.currentState.validate()) {
      String kilometrage_pour_vidange = _KilometrageController.text;
      String revision_type = status.toString();
      String revision_title = _eventController.text;
      String revision_location = _EmplacementController.text;
      String revision_date = _DateController.text;
      String repeat_revision = _repeat_revisionController.text;
      String revision_agence = _revision_agenceController.text;
      String kilometrage_revision = _Kilometrage_revisionController.text;
   
      revisionApi
          .setRevision(
        revision_type,
        revision_title,
        revision_date,
        revision_location,
        kilometrage_pour_vidange,
        repeat_revision,
        revision_agence,
        kilometrage_revision,
      )
          .then((data) {
        if (data != null) {
          Navigator.pop(context);
          Navigator.of(context).pop();

          Navigator.push(
              context, MaterialPageRoute(builder: (context) => Revision()));
        }

        ScaffoldMessenger.of(context)
            .showSnackBar(SnackBar(content: Text(data)));
      }).catchError((error) {
        ScaffoldMessenger.of(context)
            .showSnackBar(SnackBar(content: Text(error.toString())));
      });
      setState(() {});
    }
  }

  Widget visiTechniqueDropdown() {
    return Column(mainAxisSize: MainAxisSize.min, children: [
      Row(
        children: [
          Flexible(
              child: TextFormField(
            onFieldSubmitted: (_) => FocusScope.of(context).nextFocus(),
            validator: (value) {
              if (value.isEmpty) {
                return 'Password is required';
              }
              return null;
            },
            controller: _DateController,
            cursorColor: kPrimaryColor,
            decoration: InputDecoration(
              labelText: 'Date',
              alignLabelWithHint: true,
              labelStyle: TextStyle(
                color: kPrimaryColor,
              ),
              enabledBorder: UnderlineInputBorder(
                borderSide: BorderSide(color: Colors.grey),
     
     

如何正确设置验证器?

1 个答案:

答案 0 :(得分:0)

这是给你的。感谢并享受

<td>