Flutter FormBuilder Проверка выпадающего не работает - PullRequest
1 голос
/ 31 января 2020

Здесь я пытаюсь flutter_form_builder для выпадающего списка. но есть некоторая проблема, когда я проверяю валидацию всех полей при нажатии кнопки «Далее». он проверит состояние формы в силе или нет. если я нажму на следующую кнопку, она покажет все необходимые поля, она также покажет мне выпадающий список, но если я не выбрал значение из раскрывающегося списка, то он не должен перенаправлять любую другую страницу без выбора значения раскрывающегося списка, потому что требуется проверка , так что проблема в том, что выпадающий список показывает, но не работает.

Вот код моего экрана:

class _AddWalkinServiceScheduleScreenState
    extends State<AddWalkinServiceScheduleScreen>
    with TickerProviderStateMixin {
  final GlobalKey<FormState> _formkey = GlobalKey<FormState>();
  AddWalkinModel model;
  bool autovalidate = false;
  final TextEditingController _bspBusinessLegalAddress =
      TextEditingController();
  LocationResult _pickedLocation;
  Map<String, dynamic> _typeValue;
  AnimationController controller;
  Animation<double> animation;
  final TextEditingController _serviceDate = TextEditingController();
  TextEditingController _serviceTime = new TextEditingController();
  String _isoDate;
  String addresschoice;
  List<String> _imageFilesList2 = [];
  List<File> _licenseImages2 = [];
  bool _isFlexible = false;
  String _serviceType;
  List<dynamic> _type = <dynamic>[];

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

  Widget _builddate() {
    return Container(
      padding: EdgeInsets.all(10),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(5.0),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: EdgeInsets.only(left: 11),
            child: Text(
              "Date",
              style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
            ),
          ),
          _buildservicedate(),
        ],
      ),
    );
  }


  Widget _buildselectAddress() {
    return Container(
      padding: EdgeInsets.all(10),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(5.0),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: EdgeInsets.only(left: 11),
            child: Text(
              "Select Address",
              style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
            ),
          ),
          _buildaddresschoice(),
          addresschoice == "Current Location"
              ? _addressTextfield()
              : (addresschoice == "Select from address book" ||
                      model.address != null)
                  ? _addressTextfield()
                  : SizedBox(),
          _buildServicetype()
        ],
      ),
    );
  }

  Widget _addressTextfield() {
    return TudoTextWidget(
      prefixIcon: Icon(FontAwesomeIcons.mapMarkedAlt),
      labelText: "Address",
      hintText: "Address",
      controller: _bspBusinessLegalAddress,
      validator: (val) =>
          Validators.validateRequired(val, "Address"),
    );
  }

  Widget _buildServicetype() {
    return FormBuilder(
      autovalidate: autovalidate,
      child: FormBuilderCustomField(
          attribute: "Select Address",
          validators: [FormBuilderValidators.required()],
          formField: FormField(
            builder: (FormFieldState<dynamic> field) {
              return InputDecorator(
                decoration: InputDecoration(
                  prefixIcon: Icon(Icons.business_center),
                  errorText: field.errorText,
                ),
                isEmpty: _typeValue == [],
                child: new DropdownButtonHideUnderline(
                  child: DropdownButton(
                    hint: Text("Service Type"),
                    isExpanded: true,
                    items: [
                      "Normal",
                      "Urgent",
                      "Emergency",
                    ].map((option) {
                      return DropdownMenuItem(
                        child: Text("$option"),
                        value: option,
                      );
                    }).toList(),
                    value: field.value,
                    onChanged: (value) {
                      field.didChange(value);
                      _serviceType = value;
                    },
                  ),
                ),
              );
            },
          )),
    );
  }



  Widget content(BuildContext context, AddWalkinServiceDetailViewModel awsdVm) {
    var colorStyles = Theming.colorstyle(context);
    Orientation orientation = MediaQuery.of(context).orientation;
    return Scaffold(
      backgroundColor: colorStyles['primary'],
      appBar: AppBar(
        elevation: 0,
        title: Text("Service Details"),
        centerTitle: true,
      ),
    bottomNavigationBar: Container(
        color: Colors.white,
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: <Widget>[
            new FlatButton.icon(
              icon: Icon(FontAwesomeIcons.arrowCircleRight),
              padding: EdgeInsets.symmetric(vertical: 10, horizontal: 30),
              label: Text('Search'),
              color: colorStyles["primary"],
              textColor: Colors.black,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(7),
              ),
              onPressed: () {
                setState(() {
                  autovalidate = true;
                });
                if (_formkey.currentState.validate()) {
                  List<ServicePicture> id1Images = [];
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => ServiceProviderMapScreen(
                          addWalkinModel: model,
                        ),
                      ),
                    );
                  }
                }
            ),
          ],
        ),
      ),
      body: FadeTransition(
        opacity: animation,
        child: Container(
          child: Form(
            autovalidate: autovalidate,
            key: _formkey,
            child: Stack(
              children: <Widget>[
                SingleChildScrollView(
                  padding: EdgeInsets.all(16.0),
                  child: Container(
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.start,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        _builddate(),
                        _buildflexible(),

                      ],
                    ),
                  ),
                )
              ],
            ),
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return new StoreConnector<AppState, AddWalkinServiceDetailViewModel>(
      converter: (Store<AppState> store) =>
          AddWalkinServiceDetailViewModel.fromStore(store),
      builder: (BuildContext context, AddWalkinServiceDetailViewModel awsdVm) =>
          content(context, awsdVm),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...