【问题标题】:Dart extension - Getting "isn't a type" errorDart 扩展 - 出现“不是类型”错误
【发布时间】:2021-02-01 21:07:25
【问题描述】:

我正在尝试扩展 BuildContext,更多的是为了我的学习。但是,我收到此错误:

AppBuildContext 不是一种类型。尝试更正名称以匹配 现有类型

我已将此添加到我正在使用它的文件中:

extension AppBuildContext on BuildContext {
  ThemeData get theme {
    return Theme.of(this);
  }

  FocusScopeNode get focusScope {
    return FocusScope.of(this);
  }

  NavigatorState get navigator {
    return Navigator.of(this);
  }

  T args<T>() {
    return ModalRoute.of(this).settings.arguments as T;
  }
}

我是这样使用的:

class LoginView extends StatelessWidget {
  @override
  Widget build(AppBuildContext context) {
    return Scaffold(
        body: Center(
            child: VpGradientContainer(
      beginColor: initialGradientColor,
      endColor: Theme.of(context).colorScheme.primary,
      child: Column(...

我做错了什么?

Flutter 和 dart 版本:

Flutter 1.22.2 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 84f3d28555 (3 days ago) • 2020-10-15 16:26:19 -0700
Engine • revision b8752bbfff
Tools • Dart 2.10.2

【问题讨论】:

  • AppBuildContext 是扩展名,而不是类名。您的 build 方法应该像以前一样继续采用 BuildContext context 参数。扩展方法的重点是提供语法糖,使函数可用于原始类的所有实例。

标签: flutter dart


【解决方案1】:

AppBuildContext 名称仅用于声明导入限制。使用它,你仍然调用BuildContext

import 'AppBuildContext.dart'; // import the file that contains the extension manully

class LoginView extends StatelessWidget {
  @override
  Widget build(BuildContext context) { // just use normal BuildContext
    return Scaffold(
        body: Center(
            child: VpGradientContainer(
      beginColor: initialGradientColor,
      endColor: context.theme.colorScheme.primary,
      child: Column(...),

【讨论】:

  • 谢谢。我最初是这样做的,但是当我这样做时它只是说“未使用的导入:'appBuildContext.dart'”。它根本不认识它。
  • 这只是一个警告,一旦你使用扩展它就会消失。你可以忽略它。
  • @BeniaminoBaggins 您的“我这样使用它”示例实际上并没有使用扩展。也就是说,您不要在BuildContext 上调用.theme.focusScope.navigator.args()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2015-07-11
  • 2015-10-22
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多