在Dart中更新地图

时间:2018-12-03 20:45:19

标签: dart flutter

好的,我对此有很大的疑问。 大多数问题类似的问题,对我的帮助并不大,因为他们采用了截然不同的方法。

我正在尝试编辑配置文件中的数据。我正在使用地图访问数据。

现在,当我尝试设置新的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(),
                    ),
                  );
                },
              ),
            ],
          ),
        ),
      ),
    );

  }
}

我不知道我是完全错误的方法还是只是一个小错误。

1 个答案:

答案 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