【问题标题】:RxDart: Validating TextField double valuesRxDart:验证 TextField 双精度值
【发布时间】:2018-12-13 16:24:18
【问题描述】:

我有一个按钮可以启用 GPS。启用 GPS 时,TextField 应填充纬度值。禁用时,用户应该能够输入纬度值。我需要验证用户提供的值(在 -90.0 到 90.0 的范围内)。

类似:

StreamBuilder(
                stream: bloc.latitude,
                builder: (context, snapshot) {
                  return TextField(
                    keyboardType: TextInputType.number,
                    decoration: new InputDecoration(
                        hintText: 'Latitude',
                        labelText: 'Latitude',
                        errorText: snapshot.error),
                    onChanged: bloc.onLatitudeChanged,
                    //enabled: snapshot.hasData,
                    controller: _latitudeTextController,
                  );
                },
              ),

我的集团有:

final _latitudeController = BehaviorSubject<String>();
Function(String) get onLatitudeChanged => _latitudeController.sink.add;
Stream<String> get latitude => _latitudeController
                              .distinct()
                              .map((l) => double.parse(l))
                              .transform(validateLatitude) // double -> double
                              .map((l) => l.toString());

我有很多问题。如果map 失败,我会得到FormatException,但我不知道如何处理。当启用 GPS 时,我的集团也有一个 Stream&lt;double&gt; currentLatitude(否则它会吐出 Observable.empty()),我不太清楚如何在其中工作(可能是合并?我认为启用 GPS 时我应该只是能够在控制器中设置文本。

【问题讨论】:

    标签: flutter rxdart


    【解决方案1】:

    我认为在使用 Stream Builder 时,您只需要使用 snapshot.hasData()snapshot.hasError() 来检查快照中的数据。这至少可以解决 Observable.empty() 问题。对于 FormatException,您需要在 validate 函数中对此进行验证。希望这会有所帮助!

    可能是这样的

     final TextEditingController _controller = new TextEditingController();
        if (snapshot.hasData) {
          _controller.text = snapshot.data;
        } 
    

    注意:将此 _controller 分配给 TextField 中的控制器。

    【讨论】:

    • 这并不能完全让我到达我需要的位置,因为当我们从 GPS 获取信息时,我还需要启用/禁用输入。我想我几乎需要TextInputState 流或包含文本、可能的错误以及是否启用的内容。
    • 当您从 GPS 获取它时,将 TextInputState 设置为禁用。这是您的架构设计的一部分。
    猜你喜欢
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2016-03-01
    • 2017-04-30
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    相关资源
    最近更新 更多