Skip to content

Commit 5a16ad6

Browse files
Merge pull request #1 from SyncfusionExamples/888742
How to display a checkbox in the header cell of a Flutter DataTable.
2 parents 5fd85c1 + a290bdb commit 5a16ad6

File tree

124 files changed

+4829
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+4829
-1
lines changed

.gitignore

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Miscellaneous
2+
*.class
3+
*.log
4+
*.pyc
5+
*.swp
6+
.DS_Store
7+
.atom/
8+
.buildlog/
9+
.history
10+
.svn/
11+
migrate_working_dir/
12+
13+
# IntelliJ related
14+
*.iml
15+
*.ipr
16+
*.iws
17+
.idea/
18+
19+
# The .vscode folder contains launch configuration and tasks you configure in
20+
# VS Code which you may wish to be included in version control, so this line
21+
# is commented out by default.
22+
#.vscode/
23+
24+
# Flutter/Dart/Pub related
25+
**/doc/api/
26+
**/ios/Flutter/.last_build_id
27+
.dart_tool/
28+
.flutter-plugins
29+
.flutter-plugins-dependencies
30+
.pub-cache/
31+
.pub/
32+
/build/
33+
34+
# Symbolication related
35+
app.*.symbols
36+
37+
# Obfuscation related
38+
app.*.map.json
39+
40+
# Android Studio will place build artifacts here
41+
/android/app/debug
42+
/android/app/profile
43+
/android/app/release

README.md

Lines changed: 129 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,129 @@
1-
# How-to-display-a-checkbox-in-the-header-cell-of-a-Flutter-DataTable-
1+
## How to display a checkbox in the header cell of a Flutter DataTable?
2+
3+
In this article, we will show you how to display a checkbox in the header cell of a [Flutter DataTable](https://www.syncfusion.com/flutter-widgets/flutter-datagrid).
4+
5+
Initialize the [SfDataGrid](https://pub.dev/documentation/syncfusion_flutter_datagrid/latest/datagrid/SfDataGrid-class.html) widget with all the necessary properties. Achieve this by loading the [checkbox](https://api.flutter.dev/flutter/material/Checkbox-class.html) widget as a child within the designated [GridColumn](https://pub.dev/documentation/syncfusion_flutter_datagrid/latest/datagrid/GridColumn-class.html). Initialize a map collection to track the state of each checkbox. The keys should correspond to the column names, and the values should represent whether the checkbox is checked or not. In the [onChanged](https://api.flutter.dev/flutter/material/Checkbox/onChanged.html) callback of each checkbox, update the state of the corresponding checkbox in the map using setState, and perform your desired action. Then, retrieve the names of the checked columns using the map collection.
6+
7+
```dart
8+
Map<String, bool> checkedColumns = {
9+
'id': false,
10+
'name': false,
11+
'designation': false,
12+
'salary': false,
13+
};
14+
15+
@override
16+
Widget build(BuildContext context) {
17+
return Scaffold(
18+
appBar: AppBar(
19+
title: const Text('Syncfusion Flutter DataGrid'),
20+
),
21+
body: Column(
22+
children: [
23+
TextButton(
24+
onPressed: () {
25+
// To fetch the checked column names.
26+
List<String> checkedColumnNames = checkedColumns.entries
27+
.where((entry) => entry.value)
28+
.map((entry) => entry.key)
29+
.toList();
30+
},
31+
child: const Text('Checked column')),
32+
Expanded(
33+
child: SfDataGrid(
34+
source: employeeDataSource,
35+
columnWidthMode: ColumnWidthMode.fill,
36+
columns: <GridColumn>[
37+
GridColumn(
38+
columnName: 'id',
39+
label: Container(
40+
padding: const EdgeInsets.all(16.0),
41+
alignment: Alignment.center,
42+
child: Row(
43+
mainAxisAlignment: MainAxisAlignment.center,
44+
children: [
45+
const Text('ID'),
46+
Checkbox(
47+
value: checkedColumns['id'],
48+
onChanged: (bool? value) {
49+
setState(() {
50+
checkedColumns['id'] = value!;
51+
});
52+
},
53+
),
54+
],
55+
),
56+
)),
57+
GridColumn(
58+
columnName: 'name',
59+
label: Container(
60+
padding: const EdgeInsets.all(8.0),
61+
alignment: Alignment.center,
62+
child: Row(
63+
mainAxisAlignment: MainAxisAlignment.center,
64+
children: [
65+
const Text('Name'),
66+
Checkbox(
67+
value: checkedColumns['name'],
68+
onChanged: (bool? value) {
69+
setState(() {
70+
checkedColumns['name'] = value!;
71+
});
72+
},
73+
),
74+
],
75+
),
76+
)),
77+
GridColumn(
78+
columnName: 'designation',
79+
label: Container(
80+
padding: const EdgeInsets.all(8.0),
81+
alignment: Alignment.center,
82+
child: Row(
83+
mainAxisAlignment: MainAxisAlignment.center,
84+
children: [
85+
const Text(
86+
'Designation',
87+
overflow: TextOverflow.ellipsis,
88+
),
89+
Checkbox(
90+
value: checkedColumns['designation'],
91+
onChanged: (bool? value) {
92+
setState(() {
93+
checkedColumns['designation'] = value!;
94+
});
95+
},
96+
),
97+
],
98+
),
99+
)),
100+
GridColumn(
101+
columnName: 'salary',
102+
label: Container(
103+
padding: const EdgeInsets.all(8.0),
104+
alignment: Alignment.center,
105+
child: Row(
106+
mainAxisAlignment: MainAxisAlignment.center,
107+
children: [
108+
const Text('Salary'),
109+
Checkbox(
110+
value: checkedColumns['salary'],
111+
onChanged: (bool? value) {
112+
setState(() {
113+
checkedColumns['salary'] = value!;
114+
});
115+
},
116+
),
117+
],
118+
),
119+
)),
120+
],
121+
),
122+
),
123+
],
124+
),
125+
);
126+
}
127+
```
128+
129+
You can download this example on [GitHub](https://github.com/SyncfusionExamples/How-to-display-a-checkbox-in-the-header-cell-of-a-Flutter-DataTable).

android/.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
gradle-wrapper.jar
2+
/.gradle
3+
/captures/
4+
/gradlew
5+
/gradlew.bat
6+
/local.properties
7+
GeneratedPluginRegistrant.java
8+
9+
# Remember to never publicly share your keystore.
10+
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11+
key.properties
12+
**/*.keystore
13+
**/*.jks

android/app/build.gradle

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
plugins {
2+
id "com.android.application"
3+
id "kotlin-android"
4+
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
5+
id "dev.flutter.flutter-gradle-plugin"
6+
}
7+
8+
def localProperties = new Properties()
9+
def localPropertiesFile = rootProject.file("local.properties")
10+
if (localPropertiesFile.exists()) {
11+
localPropertiesFile.withReader("UTF-8") { reader ->
12+
localProperties.load(reader)
13+
}
14+
}
15+
16+
def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
17+
if (flutterVersionCode == null) {
18+
flutterVersionCode = "1"
19+
}
20+
21+
def flutterVersionName = localProperties.getProperty("flutter.versionName")
22+
if (flutterVersionName == null) {
23+
flutterVersionName = "1.0"
24+
}
25+
26+
android {
27+
namespace = "com.example.flutter_application_1"
28+
compileSdk = flutter.compileSdkVersion
29+
ndkVersion = flutter.ndkVersion
30+
31+
compileOptions {
32+
sourceCompatibility = JavaVersion.VERSION_1_8
33+
targetCompatibility = JavaVersion.VERSION_1_8
34+
}
35+
36+
defaultConfig {
37+
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
38+
applicationId = "com.example.flutter_application_1"
39+
// You can update the following values to match your application needs.
40+
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
41+
minSdk = flutter.minSdkVersion
42+
targetSdk = flutter.targetSdkVersion
43+
versionCode = flutterVersionCode.toInteger()
44+
versionName = flutterVersionName
45+
}
46+
47+
buildTypes {
48+
release {
49+
// TODO: Add your own signing config for the release build.
50+
// Signing with the debug keys for now, so `flutter run --release` works.
51+
signingConfig = signingConfigs.debug
52+
}
53+
}
54+
}
55+
56+
flutter {
57+
source = "../.."
58+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
2+
<!-- The INTERNET permission is required for development. Specifically,
3+
the Flutter tool needs it to communicate with the running application
4+
to allow setting breakpoints, to provide hot reload, etc.
5+
-->
6+
<uses-permission android:name="android.permission.INTERNET"/>
7+
</manifest>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
2+
<application
3+
android:label="flutter_application_1"
4+
android:name="${applicationName}"
5+
android:icon="@mipmap/ic_launcher">
6+
<activity
7+
android:name=".MainActivity"
8+
android:exported="true"
9+
android:launchMode="singleTop"
10+
android:taskAffinity=""
11+
android:theme="@style/LaunchTheme"
12+
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
13+
android:hardwareAccelerated="true"
14+
android:windowSoftInputMode="adjustResize">
15+
<!-- Specifies an Android theme to apply to this Activity as soon as
16+
the Android process has started. This theme is visible to the user
17+
while the Flutter UI initializes. After that, this theme continues
18+
to determine the Window background behind the Flutter UI. -->
19+
<meta-data
20+
android:name="io.flutter.embedding.android.NormalTheme"
21+
android:resource="@style/NormalTheme"
22+
/>
23+
<intent-filter>
24+
<action android:name="android.intent.action.MAIN"/>
25+
<category android:name="android.intent.category.LAUNCHER"/>
26+
</intent-filter>
27+
</activity>
28+
<!-- Don't delete the meta-data below.
29+
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
30+
<meta-data
31+
android:name="flutterEmbedding"
32+
android:value="2" />
33+
</application>
34+
<!-- Required to query activities that can process text, see:
35+
https://developer.android.com/training/package-visibility and
36+
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
37+
38+
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
39+
<queries>
40+
<intent>
41+
<action android:name="android.intent.action.PROCESS_TEXT"/>
42+
<data android:mimeType="text/plain"/>
43+
</intent>
44+
</queries>
45+
</manifest>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.example.flutter_application_1
2+
3+
import io.flutter.embedding.android.FlutterActivity
4+
5+
class MainActivity: FlutterActivity()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- Modify this file to customize your launch splash screen -->
3+
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
4+
<item android:drawable="?android:colorBackground" />
5+
6+
<!-- You can insert your own image assets here -->
7+
<!-- <item>
8+
<bitmap
9+
android:gravity="center"
10+
android:src="@mipmap/launch_image" />
11+
</item> -->
12+
</layer-list>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- Modify this file to customize your launch splash screen -->
3+
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
4+
<item android:drawable="@android:color/white" />
5+
6+
<!-- You can insert your own image assets here -->
7+
<!-- <item>
8+
<bitmap
9+
android:gravity="center"
10+
android:src="@mipmap/launch_image" />
11+
</item> -->
12+
</layer-list>
544 Bytes
Loading

0 commit comments

Comments
 (0)