Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振形式提供程序字段的奇怪行为_Flutter_Dart - Fatal编程技术网

Flutter 颤振形式提供程序字段的奇怪行为

Flutter 颤振形式提供程序字段的奇怪行为,flutter,dart,Flutter,Dart,我发现了弗利特和提供者。我和提供者的第一个项目是制作表单,但我有点困惑 我的项目: 如果我在没有填写字段的情况下验证表单,字段将显示一个错误,我将显示一个错误通知栏。我还有一个按钮来清除表单,它应该删除所有数据,如果有错误,则显示错误,并且仅当表单有数据要清除时才显示通知栏 我的问题: 当我想验证我的空表单时,所有字段都变为红色,并显示我的通知栏。 然后,如果我单击表单的delete按钮,字段将恢复正常,不会出现错误。但有时这种行为没有发生,表单的错误仍然很明显 这里有一个例子,说明一切都是

我发现了弗利特和提供者。我和提供者的第一个项目是制作表单,但我有点困惑


我的项目: 如果我在没有填写字段的情况下验证表单,字段将显示一个错误,我将显示一个错误通知栏。我还有一个按钮来清除表单,它应该删除所有数据,如果有错误,则显示错误,并且仅当表单有数据要清除时才显示通知栏


我的问题: 当我想验证我的空表单时,所有字段都变为红色,并显示我的通知栏。 然后,如果我单击表单的delete按钮,字段将恢复正常,不会出现错误。但有时这种行为没有发生,表单的错误仍然很明显

这里有一个例子,说明一切都是正确的。我用2填充距离字段,单击提交然后删除,然后提交然后删除。将删除字段并删除错误。在我第二次提交时,我没有收到绿色通知,因为表单是空的

在我重新启动应用程序并出现错误后立即执行。我点击提交然后删除。错误不会消失。。。此外,如果我点击我的距离字段,它会给我输入的旧值(值2),而我没有在键盘上键入

如何解释这一点?

我的屏幕页面:

class CalculatorScreen extends StatefulWidget{
  CalculatorScreen({Key key}) : super(key: key);
  @override
  _CalculatorScreenState createState() => _CalculatorScreenState();
}

class _CalculatorScreenState extends State<CalculatorScreen> {

   TextEditingController controllerDistance;
   TextEditingController controllerValue ;

  @override
  void initState()
  {
    controllerDistance = TextEditingController();
    controllerValue = TextEditingController();
    super.initState();
  }

  @override
  void dispose()
  {
    controllerDistance.dispose();
    controllerValue.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context)
  {
    return GestureDetector(
      onTap: (() => FocusScope.of(context).requestFocus(FocusNode())),
      child: Scaffold(
          body : _buildBody(context)
      ),
    );
  }

  Widget _buildBody(BuildContext context)
  {
    var _formCalculatorProvider = Provider.of<FormCalculatorNotifier>(context, listen:false);
    return SingleChildScrollView(
      child: Column(
        children: [
          ContainerComponent(
            background: AppColors.colorBgLight,
            children: [
              Form(
                key : _formCalculatorProvider.formGlobalKey,
                autovalidate: _formCalculatorProvider.autovalidateError,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                        //----------------------------------------------
                        LabelComponent(AppTextForm.DISTANCE_LABEL),
                        InputComponent(
                            controller: controllerDistance,
                            keyboard : TextInputType.number,
                            placeholder: AppTextForm.DISTANCE_PLACEHOLDER,
                            onChanged: (var value) {
                              _formCalculatorProvider.saveDistance(value);
                            },
                            validator: (String value){
                              return FormValidatorService.isDistanceValid(value);
                            }
                        ),
                        //----------------------------------------------
                        LabelComponent(AppTextForm.VALUE_LABEL),
                        InputComponent(
                            controller: controllerValue,
                            keyboard : TextInputType.number,
                            placeholder: AppTextForm.VALUE_PLACEHOLDER,
                            onChanged: (var value) {
                              _formCalculatorProvider.saveValue(value);
                            },
                            validator: (String value){
                              return FormValidatorService.isValueValid(value);
                            }
                        ),
                      ]
                    )
                  ],
                ),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  Expanded(
                    child: ButtonComponent.secondary(
                      context: context,
                      text: AppTextButton.ERASE,
                      onPressed: (){
                        _formCalculatorProvider.clearForm(context);
                      },
                    ),
                  ),
                  Expanded(
                    child:  ButtonComponent.primary(
                      context: context,
                      text: AppTextButton.CALCUL,
                      onPressed: (){
                        _formCalculatorProvider.submitForm(context);
                      },
                    ),
                  ),
                ],
              ),
            ],
          )
        ],
      ),
    );
  }
}
class FormCalculatorNotifier extends FormNotifier {
  FormCalculatorModel formData = FormCalculatorModel();

  void saveDistance(String value){
    formData.distance = num.tryParse(value).round();
    notifyListeners();
  }
  void saveValue(String value){
    formData.value = num.tryParse(value).round();
    notifyListeners();
  }

  @override
  void clearAllData() {
    super.clearAllData();
    formState = FormDataState.isEmpty;
    formGlobalKey.currentState.reset();
    autovalidateError = false;
    formData = FormCalculatorModel();
    notifyListeners();
  }

  @override
  void clearFormAutorisation(){
    super.clearFormAutorisation();
    if(!FormCalculatorModel.isEmpty(formData)){
      formState = FormDataState.isNotEmpty;
      notifyListeners();
    }
  }
  
}
class FormCalculatorNotifier extends FormNotifier {
  FormCalculatorModel formData = FormCalculatorModel();

  void saveDistance(String value){
    formData.distance = num.tryParse(value).round();
    notifyListeners();
  }
  void saveValue(String value){
    formData.value = num.tryParse(value).round();
    notifyListeners();
  }

  @override
  void clearAllData() {
    super.clearAllData();
    formState = FormDataState.isEmpty;
    formGlobalKey.currentState.reset();
    autovalidateError = false;
    formData = FormCalculatorModel();
    notifyListeners();
  }

  @override
  void clearFormAutorisation(){
    super.clearFormAutorisation();
    if(!FormCalculatorModel.isEmpty(formData)){
      formState = FormDataState.isNotEmpty;
      notifyListeners();
    }
  }
  
}