对“this”表达式的引用无效

问题描述

我正在尝试获取需要在 url 中传递的 'slug' 参数的数据,该 url 是我从上一个屏幕获得的,但我无法访问它。

此行显示错误

 return BaseClient()
          .postData(url,'filter/productByCategory?page=1&slug=${this.slug}','');

完整代码

  class CategoryDetails extends ConsumerWidget {
    CategoryDetails({this.categoryName = '',this.slug = ''});

    final String categoryName;
    final String slug;

    final productCategoryDetailsProvider = FutureProvider<dynamic>((ref) async {
      final String url = baseUrl;

      return BaseClient()
          .postData(url,'');
    });

    @override
    Widget build(BuildContext context,ScopedReader watch) {
      return Scaffold(
        appBar: AppBar(
          title: Text(categoryName),iconTheme: IconThemeData(color: Colors.white),backgroundColor: Colors.purple,),body: Center(
          child: SingleChildScrollView(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,children: [
                SizedBox(
                  height: 40,Text(
                  categoryName,style: TextStyle(fontSize: 24,color: Colors.purple),Text(
                  slug,SizedBox(
                  height: 20,Container(
                  margin: EdgeInsets.all(20),child: GridView.builder(
                    itemCount: 9,physics: BouncingScrollPhysics(),gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                        maxCrossAxisExtent: 180,childAspectRatio: 3 / 4,crossAxisspacing: 10,mainAxisspacing: 10),shrinkWrap: true,itemBuilder: (BuildContext ctxt,int index) => ProductCard(),],);
    }
  }

解决方法

有了空安全,您可以使用 late 关键字来修复该错误:

代替

final productCategoryDetailsProvider = ...

使用

late final productCategoryDetailsProvider = ...
,

您正在 'CategoryDe​​tails' 构造函数中初始化 categoryName 和 slug。为什么不把它保留为:

CategoryDetails({this.categoryName,this.slug});