错误:初始化程序中只能访问静态成员



我正在尝试呈现一个设置列表。每个设置都有不同的控制器。例如,控制器可以是一个开关。或者一个按钮。

设置类

import 'package:flutter/cupertino.dart';
class Setting
{
String key;
Widget controller;
Setting(this.key, this.controller);
}

但当我试图将列表作为一个字段时,它说它只能是静态成员,所以我不能使用变量和函数。如何在项目生成器中直接声明此列表?也许是一个带有.toList((的排列运算符?我真的不确定该怎么写。设置页面状态

class _TheSettingsPageState extends State<TheSettingsPage> {
bool _isMilesPerHour = globals.preferences.speedNotation.isMilesPerHour;
bool _isKilometersPerHour = globals.preferences.speedNotation.isKilometersPerHour;
File _pickedImage;
List<Setting> settings = [
Setting
(
SpeedNotation.milesPerHour.shortNotation,
Switch(
value: _isMilesPerHour, 
onChanged: _onMilesPerHourToggled
),
),
Setting
(
),
Setting
(
),
];
_onMilesPerHourToggled(bool isMilesPerHour){
setState(() {
_isMilesPerHour = isMilesPerHour;
_isKilometersPerHour = !isMilesPerHour;
});
globals.preferences.writeSettings();
}
_onKilometersPerHourToggled(bool isKilometersPerHour){
setState(() {
_isKilometersPerHour = isKilometersPerHour;
_isMilesPerHour = !isKilometersPerHour;
});
globals.preferences.writeSettings();
}
Future getImageAsync() async{
File image = await ImagePicker.pickImage(source: ImageSource.gallery);
setState(() {
_pickedImage = image;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: Padding(
padding: EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: 
[ 
Expanded(
flex: 1,
child: Row
(
children: [
Align(
alignment: Alignment.topLeft,
child: NavigatePopButton(),
),
Spacer(),
Align
(
alignment: Alignment.topCenter,
child: Text
(
'Settings',
style: Theme.of(context).textTheme.title,
overflow: TextOverflow.visible,
),
),
Spacer(),
],
)
),
Expanded(
flex: 4,
child: MediaQuery.removePadding(
context: context,
removeTop: true,
child: ListView.separated(
itemCount: 2,
separatorBuilder: (BuildContext context, int index) => Divider(height: 1.0), 
itemBuilder: (BuildContext context, int index){
return settings[index].controller;
}       
),
),
),
]
),
),
);
}
}

尝试在initState()内进行所有初始化

像这样的

class _TheSettingsPageState extends State<TheSettingsPage> {
bool _isMilesPerHour = globals.preferences.speedNotation.isMilesPerHour;
bool _isKilometersPerHour = globals.preferences.speedNotation.isKilometersPerHour;
File _pickedImage;
List<Setting> settings;
@override
initState() {
super.initState();
settings = [
Setting(
SpeedNotation.milesPerHour.shortNotation,
Switch(
value: _isMilesPerHour,
onChanged: _onMilesPerHourToggled,
),
),
Setting(),
Setting(),
];
}
}

最新更新