如何将数据从一个屏幕传递到抽屉?

时间:2019-10-31 20:48:22

标签: flutter dart

我有一个屏幕,我想将数据从该屏幕传递到抽屉。我的抽屉类如下:

class InitDrawer extends StatelessWidget {
  final Auth auth;

  InitDrawer({this.auth});

  @override
  Widget build(BuildContext context) {
    final String _name = auth.name;
    final String _email = auth.email;

    final drawerHeader = UserAccountsDrawerHeader(
      accountName: Text(_name),
      accountEmail: Text(_email),
      currentAccountPicture: CircleAvatar(
        ...
      ),
    );
    return ListView(
      children: <Widget>[
        ...
      ],
    );
  }
}

这是我的屏幕类,正在传递数据

class QRScannerScreen extends StatefulWidget {
  static const routeName = '/qr';

  final Auth auth;

  const QRScannerScreen(this.auth);

  @override
  _QRScannerScreenState createState() => _QRScannerScreenState();
}
class _QRScannerScreenState extends State<QRScannerScreen> {
    final auth = widget.auth;
    ...
    drawer: InitDrawer(auth: auth,),
    ...
}

最后这是我的Auth类/通知的侦听器

class Auth with ChangeNotifier {
  String _token;
  DateTime _expiryDate;
  String _userId;
  int _carId;
  String _email;
  String _name;

  String get name {
    return _name;
  }

  String get email {
    return _email;
  }
  ...
}

我认为整个问题都来自auth为空,当我尝试查看抽屉时,出现一个错误,提示我类型为Text的小部件不能包含{{1} }。因为我正在使用await和async获取身份验证,也许数据在屏幕加载时没有及时到达那里,并且导致null。也许我必须使用null,但是我对Flutter / Dart还是陌生的,我不知道在哪里使用它。

1 个答案:

答案 0 :(得分:0)

尝试删除final auth = widget.auth;并在构建方法中使用widget.auth,或至少在final auth方法中定义initState。但是,如果您决定使用initState方法,请记住,您可能需要在auth

的状态类中更新didUpdateWidget的值