好的,我对此有很大的疑问。 大多数问题类似的问题,对我的帮助并不大,因为他们采用了截然不同的方法。
我正在尝试编辑配置文件中的数据。我正在使用地图访问数据。
现在,当我尝试设置新的Map时,会出现错误消息:“只能在初始化程序中访问静态成员。”
我向您展示了所有代码。它不是全部,我更改了一些部分以更好地理解我的意思。我希望你们能理解。
class Tabs extends StatefulWidget {
Tabs({this.infos});
final Map<String, dynamic> info;
@override
State<StatefulWidget> createState() {
return _Tabs();
}
}
class _Tabs extends State<Tabs> {
int _currentIndex = 0; //Bottom Navigation
final List<Widget> _children = [
MaterialApp(
theme: ThemeData(
primaryColor: Colors.white,
primaryColorDark: Colors.cyan[700],
primaryColorLight: Colors.cyan[200],
accentColor: Colors.deepOrange[200],
),
home: Suche(), //not important..
),
Center(child: Text("2")), //some dummy page
Chats(),// some other dummy page
Profile(userInformationen: _infosTabs, updateProfile: _updateProfile), //the Profile Page plus the Error appears "Only static members can be accessed in initializers."
];
void _updateProfil(Map<String, dynamic> newMap) {
setState(() {
_infos = newMap;
});
} //here i want to update the info i receive
final Map<String, dynamic> _infos = ({
'title': "Title",
'name': "name",
'points': 73,
'about me': "texttexttexttexttext"
});
class Profile extends StatelessWidget {
Profile({this.userInformationen, this.updateProfile});
final Map<String, dynamic> userInformationen;
final Function updateProfile;
@override
Widget build(BuildContext context) {
double containerHight = 8.0;
return Scaffold(
drawer: Drawer(
child: Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text("Info"),
),
body: ListView(
children: <Widget>[
ListTile(
leading: Icon(Icons.settings),
title: Text("Profil bearbeiten"),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => EditProfile(
updateProfile: updateProfile),
),
],
),
],
),
),
);
}
}
class EditProfile extends StatefulWidget {
final Function updateProfile;
EditProfile({this.updateProfile});
@override
State<StatefulWidget> createState() {
return _EditProfileStae();
}
}
class _EditProfileState extends State<EditProfile> {
_EditProfileState();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Edit Profile')),
body: Container(
margin: EdgeInsets.all(16.0),
child: Form(
child: ListView(
children: <Widget>[
TextField(
),
RaisedButton(
child: Text("Save"),
onPressed: () {
widget.updateProfile({
'title': 'Title',
'name': 'some name',
'points': 69,
'about': "texttexttext"
});
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (BuildContext context) => Tabs(),
),
);
},
),
],
),
),
),
);
}
}
我不知道我是完全错误的方法还是只是一个小错误。
答案 0 :(得分:0)
您需要执行以下操作。我用for (i = 0 ;i < car.size(); i++){
if(car(i).isCarOn(road1)){
car(i).id.setText(String.valueOf(i));
vCar = autos(i).getSpeed();
text = text + System.lineSeparator() + "Car (" + i + "):" + vCar;
}else if (car(i).isCarOn(road)){
car(i).id.setText(String.valueOf(i));
vCar = car(i).getSpeed();
text2 = text2 + System.lineSeparator() + "Car (" + i + "):" + vCar;
}
}
替换了一些您未定义的小部件。
请注意,Text
不再是最终版本,您需要在children
中进行设置。另请注意,如果您想以当前定义的方式使用initState
,_infos
不能是最终的。
_updateProfile