我想更改資料表復選框的背景顏色。
例子
我想從這個:

對此(這是一張圖紙):

是否可以從主題更改它?
編輯 1:
我已經嘗試過checkboxTheme,它只會將邊框從白色更改為我的顏色。但我只想改變填充顏色。
我的復選框主題是:
CheckboxThemeData(fillColor: MaterialStateProperty.resolveWith<Color?>((Set<MaterialState> states) {
if (states.contains(MaterialState.selected))
return primaryColor;
return null;
})),
但是我的資料表的復選框仍然是藍色的,而復選框的小部件改變了顏色......

(底部的復選框來自復選框小部件,用于比較)
uj5u.com熱心網友回復:
這是重新創建復選框主題的嘗試:
CheckboxThemeData(
side: MaterialStateBorderSide.resolveWith(
(_) => const BorderSide(width: 1, color: Colors.blue)),
fillColor: MaterialStateProperty.all(Colors.red),
checkColor: MaterialStateProperty.all(Colors.white),
),
嘗試使用:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool checked = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.light().copyWith(
checkboxTheme: CheckboxThemeData(
side: MaterialStateBorderSide.resolveWith(
(_) => const BorderSide(width: 1, color: Colors.blue)),
fillColor: MaterialStateProperty.all(Colors.red),
checkColor: MaterialStateProperty.all(Colors.white),
),
),
home: Scaffold(
body: Center(
child: Checkbox(
value: checked,
onChanged: (b) {
setState(() {
checked = b ?? false;
});
},
),
),
),
);
}
}
編輯:做一些挖后,我發現,DataTable使用ThemeData.colorScheme.primary作為填充顏色。
試試這個:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool checked = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.light().copyWith(
colorScheme: ThemeData.light().colorScheme.copyWith(
onPrimary: Colors.white, // Color for checkmark in datatable
primary: Colors.red, // Color used for checkbox fill in datatable
),
checkboxTheme: CheckboxThemeData(
side: MaterialStateBorderSide.resolveWith(
(_) => const BorderSide(width: 1, color: Colors.blue)),
fillColor: MaterialStateProperty.all(Colors.red),
checkColor: MaterialStateProperty.all(Colors.white),
),
),
home: Scaffold(
body: DataTable(
columns: const [
DataColumn(label: Text('Checkbox')),
],
rows: [
DataRow(
selected: checked,
onSelectChanged: (b) {
setState(() {
checked = b ?? false;
});
},
cells: const [
DataCell(Text('hi')),
],
),
],
),
),
);
}
}
uj5u.com熱心網友回復:
import 'package:flutter/material.dart';
void main() {
runApp(const Example_App());
}
class Example_App extends StatefulWidget {
const Example_App({Key? key}) : super(key: key);
@override
_Example_AppState createState() => _Example_AppState();
}
class _Example_AppState extends State<Example_App> {
bool checked = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.light().copyWith(
checkboxTheme: CheckboxThemeData(
side: MaterialStateBorderSide.resolveWith(
(_) => const BorderSide(width: 1, color: Colors.blue)),
fillColor: MaterialStateProperty.all(Colors.red),
checkColor: MaterialStateProperty.all(Colors.white),
),
),
home: Scaffold(
body: Center(
child: Checkbox(
value: checked,
onChanged: (b) {
setState(() {
checked = b ?? false;
});
},
),
),
),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392812.html
