首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振Consumer<Generic>?

颤振Consumer<Generic>?
EN

Stack Overflow用户
提问于 2022-03-21 15:21:43
回答 1查看 202关注 0票数 1

我正在尝试生成一个消费者小部件,但是根据参数的不同,这可以适用于两个不同的提供者

代码语言:javascript
复制
 class Header extends StatelessWidget {
  const Header({
    Key? key,

    required this.dataProvider,
  }) : super(key: key);


  final IceCreamProvider dataProvider;

  @override
  Widget build(BuildContext context) {
    return  Consumer<dataProvider>(builder: (context, value, child) {
              return Container();
            },),
}

当然,这段代码不起作用,但我想知道是否有办法让它工作?

EN

回答 1

Stack Overflow用户

发布于 2022-03-21 16:37:49

泛型应该是变量的TYPE,因此在您的示例中,您必须使用IceCreamProvider而不是变量名称dataProvider

更新后添加了HeaderWrapper

由于您希望传递提供程序,您必须上升一级,并为您的ChangeNotifierProvider (假设您正在使用)提供要使用的正确实例。

代码语言:javascript
复制
class HeaderWrapper extends StatelessWidget {
  const HeaderWrapper({
    Key? key,
    required this.dataProvider,
  }) : super(key: key);

  final IceCreamProvider dataProvider;

  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (_) => dataProvider,
      child: Header(),
    );
  }
}

然后在Header内部,使用前面编写的“消费者”(您甚至可以跳过字段dataProvider,因为它不会被使用)

代码语言:javascript
复制
class Header extends StatelessWidget {
  const Header({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Consumer<IceCreamProvider>(
      builder: (context, value, child) {
        return Container();
      },
    );
  }
}

泛型处理:在用户注释之后进行编辑

不能简单地将Type作为参数传递并作为泛型设置到括号中,但是可以将泛型添加到类中

代码语言:javascript
复制
class Header<T> extends StatelessWidget {
  const Header({
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Consumer<T>(builder: (context, value, child) {
      return Container();
    });
  }
}

用法: Header<IceCreamProvider>()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71559988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档