颤动 - 抽屉作为子类不更新

问题描述 投票:0回答:2

我是一个相当缺乏经验的编码员。

我有一个抽屉,我作为一个单独的类创建。我遇到的问题是抽屉的动态数据没有填充。

我期望从共享首选项中检索的数据应该使用currUserL的值填充我视图的第三行。

它正在被正确评估,并将currUserL的值返回到控制台,但未在Drawer中更新。

我已经加载了一个按钮(触发更新方法),该按钮在手动按下时有效,但数据仅在抽屉保持打开时仍然存在。它在抽屉关闭时恢复。

drawerPatient.dart

class DrawerPatient extends StatefulWidget {
  DrawerPatient({Key key}) : super(key: key);

  @override
  _DrawerPatientState createState() => new _DrawerPatientState();
}

class _DrawerPatientState extends State<DrawerPatient> {
  String currUserL = "nv3";

  Future getPref() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();

    currUserL = prefs.getString('currUserLast');

    debugPrint('user: $currUserL');
  }

  @override
  void initState() {
    getPref();
  }

  void update() {
    setState(() {
      getPref();
    });
  }
  @override
   Widget build(BuildContext context) {
     return Drawer(
        child: new ListView(
          children: <Widget>[
            new DrawerHeader(
              child: new Text('Patient Management'),
              ),
            new ListTile(
              title: new Text('search'),
              onTap: () {},
            ),
            new ListTile(
              title: new Text(currUserL),
              onTap: () {},
            ),
            new Divider(),
            new ListTile(
              title: new Text('About'),
              onTap: update,
            ),
          ],
        ));
     }
 }

userList.dart

class UserList extends StatefulWidget {
  UserList({Key key, this.title}) : super(key: key);

  final String title;
  final String titleHead = "User List";

  @override
  _UserListState createState() => new _UserListState();
  }

class _UserListState extends State<UserList> {
  : sortStr}, headers: {"Accept": "application/json"});

    setState(() {
      data = json.decode(response.body);
    });
    }

  @override
  void initState() {
    this.makeRequest();
//    DrawerPatient().createState().update();
  }


  void _refresh() {
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {

    return new Scaffold(
      appBar: new AppBar(

          title: new Text("Patient List"),

      drawer: new DrawerPatient(key: new UniqueKey()),
...

抽屉打开时

点击后抽屉(更新)

class dart flutter drawer
2个回答
0
投票

所以我找到了答案,感谢@Dinesh指出我正确的方向。

答案是将setState作为异步get prefs的依赖项。

Future getPref() async {
SharedPreferences prefs = await SharedPreferences.getInstance();

setState(() {
  currUserI = prefs.getString('currUserId');
  currUserF = prefs.getString('currUserFirst');
  currUserL = prefs.getString('currUserLast');

  debugPrint('user: $currUserL');
});

}


0
投票

你能试试吗

Future getCurrentUser() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();

  return prefs.getString('currUserLast');
}

void update() {
  val tempName = getCurrentUser();
  setState(() {
     currUserL = tempName;
  });
}

原因:在调用async之前,基本上等待setState方法

© www.soinside.com 2019 - 2024. All rights reserved.