【问题标题】:how to pass provider classname as an argument?如何将提供者类名作为参数传递?
【发布时间】:2021-11-06 13:39:38
【问题描述】:

我想将提供程序类名作为参数传递,但它一直给我错误 The name 'providerClassName' is not a type 所以它不能用作类型参数。

我正在尝试这个

  Widget buildText<T>({@required T providerClassName}) {
    return Text(
        Provider.of<providerClassName>(context, listen: false).username);
  }

我正在调用这样的函数

 buildText(providerClassName: HomeScreenProvider);

【问题讨论】:

    标签: flutter dart flutter-provider


    【解决方案1】:

    你几乎猜对了。 你有方法的泛型类型T

    buildText<T extends HomeScreenProvider>
    

    这样你就可以像Provider.of&lt;T&gt;(context, listen: false).username 一样使用它并调用它
    buildText&lt;HomeScreenProvider&gt;();

    【讨论】:

    • 它成功了,谢谢。但我无法访问用户名它给了我错误吸气剂'用户名'没有为类型'T'定义。尝试导入定义“用户名”的库,将名称更正为现有 getter 的名称,或定义名为“用户名”的 getter 或字段。
    • 您是否有不同的提供者(如 HomeScreenProvider 等)扩展了具有成员变量 username 的单个父提供者?
    • 我的 HomeScreenProvider 看起来像这样 HomeScreenProvider extends ChangeNotifier { String username = "soumya"; }
    • 我编辑了答案。您需要将定义更改为buildText&lt;T extends HomeScreenProvider&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2011-10-01
    • 2021-09-07
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多