【问题标题】:Display four textField显示四个 textField
【发布时间】:2021-08-23 04:04:30
【问题描述】:

我想在我的应用程序中有 4 个文本字段。在initState中,它会从服务器获取数据,然后将文本放入textField中。

List<TextEditingController> _controllers = [];
 
  @override
  void initState() {
    _controllers.add(TextEditingController());
    _controllers[0] = TextEditingController();
    _controllers[1] = TextEditingController();
    _controllers[2] = TextEditingController();
    _controllers[3] = TextEditingController();

    sharedPreferences.getUser().then((onValue) {

      _bloc
          .getData(...) // fetch from server
          .then((onValue) {
        for (int i = 0; i < onValue.esd.data.length; i++) {
          _controllers[i].text = onValue.esd.data['name'];
        }
        setState(() {});
      });
    });
    super.initState();
  }

小部件在这里构建

 Widget _showQueries() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
            ....
        ListView.builder(
          physics: NeverScrollableScrollPhysics(),
          shrinkWrap: true,
          itemCount: 4,
          itemBuilder: (context, index) {
            return Padding(
                padding: EdgeInsets.all(5),
                child: TextField(
                    maxLines: 2,
                    controller: _controllers[index],
                    decoration: InputDecoration(
                      border: OutlineInputBorder(
                          borderRadius: const BorderRadius.all(
                              const Radius.circular(5.0))),
                      contentPadding: EdgeInsets.all(10),
                    )));
          },
        )
      ],
    );
  }

错误

RangeError (index): Invalid value: Only valid value is 0: 1

【问题讨论】:

    标签: flutter dart listview


    【解决方案1】:

    由于您的 _controller 变量,您会收到此错误。在创建小部件时,该变量包含 TextEditingController 类型的空列表。现在,当 initstate 被调用时,您向该列表添加了一个 TextEditingController,但您只添加了一个控制器而不是 4 个,而 Dart 还没有在编译期间记录该列表,因此您可能会在运行时遇到错误。

    可能的解决方法可能不是在 initState 中添加控制器,而是在该列表中添加 4 个控制器。

    List<TextEditingController> _controllers = [
    TextEditingController(),
    TextEditingController(),
    TextEditingController(),
    TextEditingController(),
    ];
    

    现在您可能不会收到范围错误

    【讨论】:

      【解决方案2】:

      请让我们知道您在“onValue”这个变量中从服务器得到什么响应。

      【讨论】:

      • 这取决于服务器。如果只有 1 个值,那么它会显示一个有 1 个值的 textField,而 3 个 textField 将是没有值的。
      • 是的,但是您获取数据的甲酸盐很重要。喜欢用逗号分隔的所有数据还是将每个数据作为单独的 JSON 元素??
      猜你喜欢
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多