Mencari bantuan atau ide di sini. Mungkin saya melakukan sesuatu yang salah atau mungkin seseorang memiliki ide yang dapat mereka bantu.

Saya akhirnya menemukan dan berhasil menerapkan dua Syncfusion DataGrids terpisah. Mereka bekerja dengan sempurna dan melakukan persis apa yang saya butuhkan dan inginkan, meskipun dengan cara yang sangat kompleks dibandingkan dengan DataTable. Maaf harus memasang steker itu di sana. Bagaimanapun, saya memiliki datagrid yang dimuat di layar. Ketika saya pergi ke layar itu, tampilan datagrid dan suhu cpu saya serta kecepatan kipas meroket sangat cepat (satu derajat C setiap 2 detik) hingga 85 derajat + di mana saya menghentikan simulator atau menavigasi ke layar lain. Entah tindakan segera mengurangi suhu cpu yang turun setelah navigasi atau berhenti. Ini seperti jam kerja, navigasi ke datagrid screen-temps naik, navigasi away-temps turun.

Pelakunya terlihat sebagai "pelari" seperti yang disarankan oleh monitor aktivitas (macbook pro) yang mulai menggunakan 75% + cpu.

Adakah yang punya ide bermanfaat yang bisa mereka sarankan? Saya tidak tahu harus mencoba apa, tidak mendapatkan output atau kesalahan. Juga datagrid hampir tidak memiliki data di dalamnya. Saya berbicara seperti 4 baris dan 5 sel data super sederhana ... Tidak ada alasan mengapa ini harus terjadi. DataTable dengan 50X jumlah data bahkan tidak blip cpu...

Juga pertanyaan, adakah orang lain yang memiliki masalah dengan Syncfusion DataGrid?

EDIT: Masalah yang sama saat diluncurkan dengan Android Studio atau VS Code ...

EDIT II: Berjalan di iphone fisik tidak menghasilkan masalah yang sama.

Kode saya untuk DataGrid:

//
///
/// Income data grid- Syncfusion version
import 'package:flutter/material.dart';
import 'package:fp_provider_demo_one/models/income/income.dart';
import 'package:fp_provider_demo_one/models/income/income_data.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:syncfusion_flutter_datagrid/datagrid.dart';

class IncomeDataGrid extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Consumer<IncomeData>(
      builder: (context, incomeData, child) {
        var incomeDataSource =
            IncomeGridSource(incomeData: incomeData.getIncomeList());
        return Scaffold(
          body: SafeArea(
            child: SfDataGrid(
              source: incomeDataSource,
              columnWidthMode: ColumnWidthMode.fill,
              columns: <GridColumn>[
                GridTextColumn(
                  columnName: 'source',
                  label: Container(
                    color: Colors.green,
                    padding: EdgeInsets.all(16.0),
                    alignment: Alignment.center,
                    child: Text(
                      'Source',
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                ),
                GridTextColumn(
                  columnName: 'gross',
                  label: Container(
                    color: Colors.green,
                    padding: EdgeInsets.all(8.0),
                    alignment: Alignment.center,
                    child: Text(
                      'Gross',
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                ),
                GridTextColumn(
                  columnName: 'cgi',
                  label: Container(
                    color: Colors.green,
                    padding: EdgeInsets.all(8.0),
                    alignment: Alignment.center,
                    child: Text(
                      'CGI',
                      style: TextStyle(color: Colors.white),
                      overflow: TextOverflow.ellipsis,
                    ),
                  ),
                ),
                GridTextColumn(
                  columnName: 'incomeDate',
                  label: Container(
                    color: Colors.green,
                    padding: EdgeInsets.all(8.0),
                    alignment: Alignment.center,
                    child: Text(
                      'Income Date',
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                ),
                GridTextColumn(
                  columnName: 'dateAdded',
                  label: Container(
                    color: Colors.green,
                    padding: EdgeInsets.all(8.0),
                    alignment: Alignment.center,
                    child: Text(
                      'Date Added',
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                ),
              ],
            ),
          ),
        );
      },
    );
  }
}

class IncomeGridSource extends DataGridSource {
  /// Creates the income data source class with required details.
  IncomeGridSource({@required List<Income> incomeData}) {
    _incomeData = incomeData
        .map<DataGridRow>(
          (income) => DataGridRow(
            cells: [
              DataGridCell<String>(columnName: 'source', value: income.source),
              DataGridCell<double>(columnName: 'gross', value: income.gross),
              DataGridCell<double>(columnName: 'cgi', value: income.cgi),
              DataGridCell<String>(
                  columnName: 'incomeDate',
                  value: DateFormat.yMMMd().format(income.incomeDate)),
              DataGridCell<String>(
                  columnName: 'dateAdded',
                  value: DateFormat.yMMMd().format(income.dateAdded)),
            ],
          ),
        )
        .toList();
  }

  List<DataGridRow> _incomeData = [];

  @override
  List<DataGridRow> get rows => _incomeData;

  @override
  DataGridRowAdapter buildRow(DataGridRow row) {
    Color getRowBackgroundColor() {
      final int index = _incomeData.indexOf(row);
      if (index % 2 == 0) {
        return Colors.green.shade100;
      }
      return Colors.transparent;
    }

    return DataGridRowAdapter(
        color: getRowBackgroundColor(),
        cells: row.getCells().map<Widget>((e) {
          return Container(
            alignment: Alignment.center,
            padding: EdgeInsets.all(8.0),
            child: Text(e.value.toString()),
          );
        }).toList());
  }
}
0
RobbB 5 April 2021, 00:33

2 jawaban

Jawaban Terbaik

Terima kasih telah menghubungi dukungan Syncfusion,

Berdasarkan detail dan cuplikan kode yang Anda berikan, kami telah menganalisis masalah yang Anda laporkan. Kami telah mencoba potongan kode yang sama dan data lokal kami. Kami tidak menghadapi masalah peningkatan CPU. Kami telah melampirkan cuplikan kode, video, dan detail konfigurasi sistem di bawah ini.

Selain itu, kami menduga Anda membuat konsumen DataGridSource dan getIncomeList itu sendiri. Jadi, mungkin panggilan terus menerus dari penyedia ke konsumen dapat menyebabkan masalah ini. Jadi, kami melakukan beberapa modifikasi untuk mendapatkan data dan menetapkan DataGridSource ke SfDataGrid dalam cuplikan kode di bawah ini.

Mengenai albeit in a very complex manner compared to DataTable, kami telah mengadaptasi Struktur DataTable paginasi untuk mendapatkan widget dari pengguna akhir dan melakukan konsep virtualisasi di SfDataGrid kami.

Cuplikan kode:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:syncfusion_flutter_datagrid/datagrid.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(
            create: (_) => EmployeeDataSource())
      ],
      child: MaterialApp(
        title: 'Syncfusion DataGrid Demo',
        theme: ThemeData(primarySwatch: Colors.blue),
        home: SkyRocketingIssue(),
      ),
    );
  }
}

class SkyRocketingIssue extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Consumer<EmployeeDataSource>(
      builder: (context, employeeDataSource, _) {
        return Scaffold(
          appBar: AppBar(
            title: Text('DataGrid Demo'),
          ),
          body: SfDataGrid(
            source: employeeDataSource,
            columnWidthMode: ColumnWidthMode.fill,
            selectionMode: SelectionMode.multiple,
            navigationMode: GridNavigationMode.cell,
            allowEditing: true,
            // controller: dataGridController,
            onQueryRowHeight: (details) {
              return details.rowHeight;
            },
            columns: <GridColumn>[
              GridTextColumn(
                  columnName: 'id',
                  label: Container(
                      padding: EdgeInsets.all(16.0),
                      alignment: Alignment.centerRight,
                      child: Text(
                        'ID',
                      ))),
              GridTextColumn(
                  columnName: 'name',
                  label: Container(
                      padding: EdgeInsets.all(16.0),
                      alignment: Alignment.centerLeft,
                      child: Text('Name'))),
              GridTextColumn(
                  columnName: 'designation',
                  width: 120,
                  label: Container(
                      padding: EdgeInsets.all(16.0),
                      alignment: Alignment.centerLeft,
                      child: Text('Designation'))),
              GridTextColumn(
                  columnName: 'salary',
                  label: Container(
                      padding: EdgeInsets.all(16.0),
                      alignment: Alignment.centerRight,
                      child: Text('Salary'))),
            ],
          ),
        );
      },
    );
  }
}

/// Custom business object class which contains properties to hold the detailed
/// information about the employee which will be rendered in datagrid.
class Employee {
  /// Creates the employee class with required details.
  Employee(this.id, this.name, this.designation, this.salary);

  /// Id of an employee.
  int id;

  /// Name of an employee.
  String name;

  /// Designation of an employee.
  String designation;

  /// Salary of an employee.
  int salary;
}

/// An object to set the employee collection data source to the datagrid. This
/// is used to map the employee data to the datagrid widget.
class EmployeeDataSource extends DataGridSource {
  /// Creates the employee data source class with required details.
  EmployeeDataSource(){
    employees = getEmployeeData();
    buildDataGridRow();
  }

  void buildDataGridRow() {
    dataGridRows = employees
        .map<DataGridRow>((e) => DataGridRow(cells: [
              DataGridCell<int>(columnName: 'id', value: e.id),
              DataGridCell<String>(columnName: 'name', value: e.name),
              DataGridCell<String>(
                  columnName: 'designation', value: e.designation),
              DataGridCell<int>(columnName: 'salary', value: e.salary),
            ]))
        .toList();
  }

  List<Employee> employees = <Employee>[];

  List<DataGridRow> dataGridRows = [];

  @override
  List<DataGridRow> get rows => dataGridRows;

  @override
  DataGridRowAdapter buildRow(DataGridRow row) {
    return DataGridRowAdapter(
        cells: row.getCells().map<Widget>((e) {
      return Container(
        alignment: (e.columnName == 'id' || e.columnName == 'salary')
            ? Alignment.centerRight
            : Alignment.centerLeft,
        padding: EdgeInsets.all(8.0),
        child: Text(e.value.toString()),
      );
    }).toList());
  }

  List<Employee> getEmployeeData() {
    return [
      Employee(10001, 'James', 'Project Lead', 20000),
      Employee(10002, 'Kathryn', 'Manager', 30000),
      Employee(10003, 'Lara', 'Developer', 15000),
      Employee(10004, 'Michael', 'Designer', 15000),
      Employee(10005, 'Martin', 'Developer', 15000),
      Employee(10006, 'Newberry', 'Developer', 15000),
      Employee(10007, 'Balnc', 'Developer', 15000),
      Employee(10008, 'Perry', 'Developer', 15000),
      Employee(10009, 'Gable', 'Developer', 15000),
      Employee(10010, 'Grimes', 'Developer', 15000),
      Employee(10010, 'Lane', 'Project Lead', 20000),
      Employee(10010, 'Doran', 'Developer', 15000),
      Employee(10010, 'Betts', 'Developer', 15000),
      Employee(10010, 'Tamer', 'Manager', 30000),
      Employee(10001, 'James', 'Project Lead', 20000),
      Employee(10002, 'Kathryn', 'Manager', 30000),
      Employee(10003, 'Lara', 'Developer', 15000),
      Employee(10004, 'Michael', 'Designer', 15000),
      Employee(10005, 'Martin', 'Developer', 15000),
      Employee(10006, 'Newberry', 'Developer', 15000),
      Employee(10007, 'Balnc', 'Developer', 15000),
      Employee(10008, 'Perry', 'Developer', 15000),
      Employee(10009, 'Gable', 'Developer', 15000),
      Employee(10010, 'Grimes', 'Developer', 15000),
      Employee(10010, 'Lane', 'Project Lead', 20000),
      Employee(10010, 'Doran', 'Developer', 15000),
      Employee(10010, 'Betts', 'Developer', 15000),
      Employee(10010, 'Tamer', 'Manager', 30000),
    ];
  }
}

Detail konfigurasi:

Kami telah menguji masalah yang Anda laporkan pada mesin mac yang dikonfigurasi di bawah ini

• Versi MacOS masukkan deskripsi gambar di sinihttps://github.com/flutter/flutter.git Kerangka • revisi 4d7946a68d (3 minggu lalu) • 2021-03-18 17:24:33 -0700 Mesin • revisi 3459eb2436 Alat • Panah 2.12.2*

• Kode X -> 12.4

• Simulator iPhone 12 Pro Max versi: iOS 14.4

Beri tahu kami detail akhir Anda di bawah ini,

• versi macOS • Versi XCode • Versi simulator • Versi saluran Flutter

Ini akan membantu kami untuk menganalisis masalah yang dilaporkan pada versi yang tepat.

1
Balasubramani Sundaram 5 April 2021, 14:44

Sepertinya ini adalah masalah yang diketahui di macos:

https://github.com/flutter/flutter/issues/59327

Saya tidak berpikir bahwa itu memiliki solusi, tetapi dalam masalah ini mereka menyebut masalah tersebut sebagai masalah yang berhubungan dengan animasi!

1
Fahmi Sawalha 4 April 2021, 21:53