【问题标题】:Is there a way to create a editable table in flutter?有没有办法在 flutter 中创建一个可编辑的表格?
【发布时间】:2023-01-01 22:30:52
【问题描述】:

如果没有可用的 Flutter 包,如何解决这个问题?

【问题讨论】:

    标签: flutter datatable tabs


    【解决方案1】:

    要创建可编辑的表格,您可以使用 editable 包。

    此示例取自their docs,但经过修改以使用 Null Safety

    import 'package:editable/editable.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Editable example',
          theme: ThemeData(
            primarySwatch: Colors.blue,
            primaryColor: Colors.blue,
            accentColor: Colors.white,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          home: MyHomePage(title: 'Editable example'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key? key, required this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      /// Create a Key for EditableState
      final _editableKey = GlobalKey<EditableState>();
    
      List rows = [
        {
          "name": 'James LongName Joe',
          "date": '23/09/2020',
          "month": 'June',
          "status": 'completed'
        },
        {
          "name": 'Daniel Paul',
          "month": 'March',
          "status": 'new',
          "date": '12/4/2020',
        },
        {
          "month": 'May',
          "name": 'Mark Zuckerberg',
          "date": '09/4/1993',
          "status": 'expert'
        },
        {
          "name": 'Jack',
          "status": 'legend',
          "date": '01/7/1820',
          "month": 'December',
        },
      ];
      List cols = [
        {"title": 'Name', 'widthFactor': 0.2, 'key': 'name', 'editable': false},
        {"title": 'Date', 'widthFactor': 0.2, 'key': 'date'},
        {"title": 'Month', 'widthFactor': 0.2, 'key': 'month'},
        {"title": 'Status', 'key': 'status'},
      ];
    
      /// Function to add a new row
      /// Using the global key assigined to Editable widget
      /// Access the current state of Editable
      void _addNewRow() {
        setState(() {
          _editableKey.currentState?.createRow();
        });
      }
    
      ///Print only edited rows.
      void _printEditedRows() {
        List editedRows = _editableKey.currentState!.editedRows;
        print(editedRows);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            leadingWidth: 200,
            leading: TextButton.icon(
                onPressed: () => _addNewRow(),
                icon: Icon(Icons.add),
                label: Text(
                  'Add',
                  style: TextStyle(fontWeight: FontWeight.bold),
                )),
            title: Text(widget.title),
            actions: [
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: TextButton(
                    onPressed: () => _printEditedRows(),
                    child: Text('Print Edited Rows',
                        style: TextStyle(fontWeight: FontWeight.bold))),
              )
            ],
          ),
          body: Editable(
            key: _editableKey,
            columns: cols,
            rows: rows,
            zebraStripe: true,
            stripeColor1: Colors.grey[200]!,
            stripeColor2: Colors.green[50]!,
            onRowSaved: (value) {
              print(value);
            },
            onSubmitted: (value) {
              print(value);
            },
            borderColor: Colors.blueGrey,
            tdStyle: TextStyle(fontWeight: FontWeight.bold),
            trHeight: 80,
            thStyle: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
            thAlignment: TextAlign.center,
            thVertAlignment: CrossAxisAlignment.end,
            thPaddingBottom: 3,
            showSaveIcon: true,
            saveIconColor: Colors.black,
            showCreateButton: true,
            tdAlignment: TextAlign.left,
            tdEditableMaxLines: 100, // don't limit and allow data to wrap
            tdPaddingTop: 0,
            tdPaddingBottom: 14,
            tdPaddingLeft: 10,
            tdPaddingRight: 8,
            focusedBorder: OutlineInputBorder(
                borderSide: BorderSide(color: Colors.blue),
                borderRadius: BorderRadius.all(Radius.circular(0))),
          ),
        );
      }
    }
    
    

    这个包的教程

    Creating Editable Tables With Flutter (Medium.com)

    Editable - Create Editable tables in flutter(YouTube)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 2022-01-02
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多