【问题标题】:Flutter - DataTables - Can we have a single edit column for editing rows?Flutter - DataTables - 我们可以有一个编辑列来编辑行吗?
【发布时间】:2022-01-23 13:19:15
【问题描述】:

我知道我们可以通过在 DataCell 中添加一个 TextField 来编辑 DataTable 中的单个单元格:

    dataRows.add(
      DataRow(cells: [
        DataCell(
          TextFormField(
            style: AppTextStyle.textStyleRegular,
            initialValue: _value,
            keyboardType: TextInputType.number,
            onFieldSubmitted: (val) {
              //print('onSubmited $val');
            },
          ),
          showEditIcon: true,
        ),
        ...

我需要的是每行都有一个带有编辑图标的列。单击编辑图标应该使行中的单元格可编辑。有可能这样做吗?在这种情况下,我怎么知道哪个单元格被编辑了?

应该是这样的:

【问题讨论】:

  • 意味着您希望在顶部有一个 TextField 并在其下方列出项目列表,然后如果您单击第二个项目 Textfield 变得可编辑,并且编辑后的值应该反映在同一个项目上?
  • 不,我有一个数据表,我只需要其中的另一列。虽然其他列(单元格)显示一些值,但此列中的单元格将只有一个编辑图标。
  • 你是否传递了任何值来定义哪个单元格应该有一个编辑图标?或者你也可以分享你的 UI。
  • 请查看我添加的图片。
  • 现在你的所有行都有编辑图标,所以现在你希望只有其中一些有编辑图标?

标签: flutter dart datatables rows edit


【解决方案1】:

您可以试试下面的sample code 以获得预期的结果

class MyHomePage extends StatefulWidget {
  final String title;

  const MyHomePage({
    Key? key,
    required this.title,
  }) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  List<bool> _isEditable = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView.builder(
        itemCount: 5,
          itemBuilder: (context, index) {
          _isEditable.add(false);
          return Row(
            children: [
              Expanded(child: Text("#$index")),
              Expanded(child: TextFormField(
                enabled: _isEditable[index],
                controller: TextEditingController(text: "User $index"),
              )),
              Expanded(child: TextFormField(
                enabled: _isEditable[index],
                controller: TextEditingController(text: "${index*5} KG"),
              )),
              IconButton(onPressed: (){
                setState(() {
                  _isEditable[index] = !_isEditable[index];
                });
              }, icon: Icon(Icons.edit)),
            ],
          );
          }),
    );
  }
}

编辑前

点击编辑后

【讨论】:

  • 这种情况下编辑按钮不起作用
  • 你使用的代码和我分享的一样吗?
  • 是的............
  • 让我分享一个链接
  • 即使在飞镖垫上也可以正常工作,您是否在单击编辑按钮后单击编辑字段进行检查,因为它现在没有视觉差异
猜你喜欢
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
相关资源
最近更新 更多