StatelessWidget:类只能扩展其他类。dart(extends_non_class) - 问题

Posted

技术标签:

【中文标题】StatelessWidget:类只能扩展其他类。dart(extends_non_class) - 问题【英文标题】:StatelessWidget : Classes can only extend other classes.dart(extends_non_class) - issue 【发布时间】:2019-07-09 17:59:24 【问题描述】:

我正在使用我的 Mac 处理颤振。安装了示例代码,我得到了颤振类的错误 StatelessWidget、Widget、BuildContext 说的就是

Undefined class 'StatelessWidget'.dart(undefined_class)
Classes can only extend other classes.dart(extends_non_class)

我该如何解决这个问题。

我试过了 "flutter packages get" 得到如下输出 [ttt] 颤振包获取 在 ttt 中运行“flutter packages get”... 0.5s 退出代码 0

也试过了 “扑医生”

医生摘要(要查看所有详细信息,请运行 flutter doctor -v): [✓] Flutter (Channel stable, v1.0.0, on Mac OS X 10.14.3 18D109, locale en-IN) [✗] android 工具链 - 为 Android 设备开发 ✗ 无法定位 Android SDK。 从以下位置安装 Android Studio:https://developer.android.com/studio/index.html 首次启动时,它将帮助您安装 Android SDK 组件。 (或访问 https://flutter.io/setup/#android-setup 了解详细说明)。 如果 Android SDK 已安装到自定义位置,请将 $ANDROID_HOME 设置为该位置。 您可能还想将它添加到 PATH 环境变量中。 [!] ios 工具链 - 为 iOS 设备开发 (Xcode 10.1) ✗ libimobiledevice 和 ideviceinstaller 未安装。要使用 Brew 安装,请运行: 酿造更新 brew install --HEAD usbmuxd 酿造链接usbmuxd brew install --HEAD libimobiledevice 冲泡安装 ideviceinstaller ✗ ios-deploy 未安装。使用 Brew 安装: brew install ios-deploy ✗ 未安装 CocoaPods。 CocoaPods 用于检索 iOS 平台端的插件代码,以响应您在 Dart 端的插件使用情况。 如果不使用 CocoaPods 解决 iOS 依赖项,插件将无法在 iOS 上运行。 有关更多信息,请参阅 https://flutter.io/platform-plugins 安装: 酿造安装可可豆荚 吊舱设置 [!] Android Studio(未安装) [!] 连接的设备 !没有可用的设备 !医生发现了 4 类问题。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() 
  runApp(FlutterView());


class FlutterView extends StatelessWidget 

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Flutter View',
      theme: ThemeData(
        primarySwatch: Colors.grey,
      ),
      home: MyHomePage(),
    );
  


class MyHomePage extends StatefulWidget 
  @override
  _MyHomePageState createState() => _MyHomePageState();


class _MyHomePageState extends State<MyHomePage> 
  static const String _channel = 'increment';
  static const String _pong = 'pong';
  static const String _emptyMessage = '';
  static const BasicMessageChannel<String> platform =
      BasicMessageChannel<String>(_channel, StringCodec());

  int _counter = 0;

  @override
  void initState() 
    super.initState();
    platform.setMessageHandler(_handlePlatformIncrement);
  

  Future<String> _handlePlatformIncrement(String message) async 
    setState(() 
      _counter++;
    );
    return _emptyMessage;
  

  void _sendFlutterIncrement() 
    platform.send(_pong);
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Expanded(
            child: Center(
              child: Text(
                'Platform button tapped $_counter time$ _counter == 1 ? '' : 's' .',
                style: const TextStyle(fontSize: 17.0))
            ),
          ),
          Container(
            padding: const EdgeInsets.only(bottom: 15.0, left: 5.0),
            child: Row(
              children: <Widget>[
                Image.asset('assets/flutter-mark-square-64.png', scale: 1.5),
                const Text('Flutter', style: TextStyle(fontSize: 30.0)),
              ],
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _sendFlutterIncrement,
        child: const Icon(Icons.add),
      ),
    );
  

如何解决这个编译问题?

【问题讨论】:

我无法使用您的代码进行复制。我得到一个“ A RenderFlex 在右侧溢出了 119 像素。”相反,这只是一个小布局问题。尝试重新启动 IDE。 您的flutter doctor -v 充满了问题 - Unable to locate Android SDK. - flutter.io/docs/get-started/install/macos 看看这个***.com/questions/52259764/… 【参考方案1】:

我重新启动了 VSCODE IDE 但没有工作。甚至还卸载了 Dart 和 Flutter 库。

然后我所做的是删除颤振库包并下载新包,它工作!

【讨论】:

【参考方案2】:

我也遇到了同样的问题。

确保您没有定义或没有导入对颤振隐藏某些内容的类(或者甚至编辑了一个核心 Flutter 类,例如可能解决该问题的 J4Java 的答案)。

我无意中导入了一个 State 类,删除导入后一切都恢复了。

【讨论】:

【参考方案3】:

在我的情况下,只需添加这个

import 'package:flutter/cupertino.dart';

清除所有问题。

如果这不起作用检查是否有未使用的 imort,请将其删除并运行 pub get。这应该可以。

【讨论】:

【参考方案4】:

类似于@Bensal 答案

你可以通过导入来做到这一点

import 'package:flutter/cupertino.dart';

或者

import 'package:flutter/material.dart';

它会解决你的问题

【讨论】:

以上是关于StatelessWidget:类只能扩展其他类。dart(extends_non_class) - 问题的主要内容,如果未能解决你的问题,请参考以下文章

flutter组件

我在尝试转换我的 StatelessWidget 代码时遇到问题。为啥?

如何在 StatelessWidget 的任何函数中获取上下文?

Flutter控件——常用控件:StatelessWidget和Context

JavaooC7

-cpp友元异常和其他