繁体   English   中英

在自定义中使用提供程序 class flutter

[英]Using a provider in a custom class flutter

我正在创建一个需要使用 Provider 来获取值的程序。 我在有状态的小部件中像下面这样调用我的提供者

final user = Provider.of<Users>(context);

现在我想在自定义 class 中使用提供程序

class UserInformation {
    final user = Provider.of<Users>(context):
}

这将不起作用,因为未定义上下文。 请协助我如何在不使用BuildContext的情况下执行此操作。

这是我的 class 用户,我在单独的 dart 文件中拥有它,并用作我的数据流的 model。

class Users {
  final String uid;
  final String name;
  final String department;
  final String position;

  Users({ this.uid, this.department, this.name, this.position });
}

这是我用来从 firestore 中提取数据的查询

Stream<List<FormQuestions>> get userData{
  return userCollection.where('name', isEqualTo: 'First Name').where('department', isEqualTo: 'department').snapshots()
  .map(_userDataFromSnapshot);
}

我希望这个名字是一个变量,我从 model class 中说 (user.name) 得到的。对于部门也是如此。

谢谢。

您只能在提供的ChangeNotifier下方的树中的后代小部件中访问属于ChangeNotifiers的类,因为在幕后Provider使用InheritedWidget (它使用context )为您提供您在树中放置的ChangeNotifier

因此,在您的情况下,无法从UserInformation访问Users ,您必须更改代码以解决问题

编辑:如果您在小部件中使用此代码,这是实现您想要的目标的建议:

class UserInformation{
  final User user;

  UserInformation(this.user);
}

class SomeWidget extends StatefulWidget {
  @override
  _SomeWidgetState createState() => _SomeWidgetState();
}

class _SomeWidgetState extends State<SomeWidget> {

  void someMethod(){
    final User user = Provider.of<Users>(context);
    UserInformation userInformation = UserInformation(user);
    //do something
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

¡嘿:在class你需要添加“with ChangeNotifier”:

    class Users with ChangeNotifier {
      final String uid;
      final String name;
      final String department;
      final String position;

      Users({ this.uid, this.department, this.name, this.position });
    }

希望帮助。 对不起英语,yo hablo español。 :D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM