颤振错误:widget_test.dart 无法检测到 MyApp()

ERROR in flutter: widget_test.dart cannot detect MyApp()

作为一个完全的初学者,我正在尝试各种 flutter 功能,但由于 widget_test.dart 文件中的错误,我被困在 运行 和 main.dart。 如果错误是由于其他原因造成的,请指出。

main.dart

import 'package:flutter/material.dart';
 void main(){
   var app = MaterialApp(
     title: 'FlutterApp',
     debugShowCheckedModeBanner: true,
     theme: ThemeData(
        primaryColor: Colors.black12,
        accentColor: Colors.orange,
     ),
     home: Scaffold(
       appBar: AppBar(
         title: Text('Stateless'),
         backgroundColor: Colors.black,
         ),
   ),
   );
   runApp(app);
 }

widget_test.dart

// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:stateless/main.dart';

void main() {
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(MyApp()); //error over here

    // Verify that our counter starts at 0.
    expect(find.text('0'), findsOneWidget);
    expect(find.text('1'), findsNothing);

    // Tap the '+' icon and trigger a frame.
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();

    // Verify that our counter has incremented.
    expect(find.text('0'), findsNothing);
    expect(find.text('1'), findsOneWidget);
  });
}

这是我的第一个问题,如果我不能以正确的方式提出问题,我感到非常抱歉

如果你也告诉我们你得到的错误信息就更好了。但是,据我所知,widget_test.dart.

中没有定义 MyApp

您可以在另一个文件中定义一个 MyApp 小部件,然后将其导入您的 widget_test.dart。

例如:

another_file.dart

class MyApp extends StatelessWidget {
  const MyApp({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
     title: 'FlutterApp',
     debugShowCheckedModeBanner: true,
     theme: ThemeData(
        primaryColor: Colors.black12,
        accentColor: Colors.orange,
     ),
     home: Scaffold(
       appBar: AppBar(
         title: Text('Stateless'),
         backgroundColor: Colors.black,
         ),
   ),);
  }
}

widget_test.dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:stateless/another_file.dart';

void main() {
  testWidgets('My test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(MyApp());
  });
}

我刚刚发现,解决方案只是输入您实际的有状态小部件名称,而不是默认 Tap Counter 应用程序给出的默认 'MyApp'!

很简单,您只需将 widget_test.dart 文件中的 MyApp 名称替换为您的 class 名称即可。

例如。在 widget_test.dart 文件

中将 MyApp 替换为应用程序(在您的情况下)

您的应用名称在 main.dart 文件中为 MaterialApp,因此在 widget_test.dart 文件中将 MyApp 名称更改为 MaterialApp 就这么简单。

我也是 Flutter 的新手,但解决这些小问题让我有所警觉,而不是给出让人难以理解的解决方案。

创建名为 another_file.dart

的文件后

您必须添加:

import '../test/another_file.dart';

widget_test.dart

只需删除 widget_test.dart 文件中的所有行。清空它.. 用于测试widgets(非必须)......

为此,您只需添加 material 应用程序即可,它运行良好。让我展示一下我的代码。我也遇到了类似的问题:

Main.dart

void main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.grey[600],
          title: Text("I Am Rich"),
        ),
      ),
    ),
  );
}

widget_test.dart

      // Verify that our counter starts at 0.
      expect(find.text('0'), findsOneWidget);
      expect(find.text('1'), findsNothing);

      // Tap the '+' icon and trigger a frame.
      await tester.tap(find.byIcon(Icons.add));
      await tester.pump();

      // Verify that our counter has incremented.
      expect(find.text('0'), findsNothing);
      expect(find.text('1'), findsOneWidget);
    },
  );
}

在这段代码中,我简单地写了 MaterialApp 来代替 MyApp,它也能正常工作,而且简单易行。

解决方案

在您的 pubspec.yaml 顶部,确保验证您的项目名称与测试小部件的导入语句中列出的导入包的名称相匹配。

验证此信息后运行flutter pub get再次同步依赖项。

在我的例子中,这解决了不正确的名称解析问题。