flutter-test

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


Being a total beginner I am trying out various flutter feature and I am stuck at running the main.dart due to errors in the widget_test.dart file. Please point out if the error is due to some other reason.

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);
  });
}

This is my very first question and I a very sorry if I couldn't place the question in a proper way


Solution

  • It would be better if you also told us the error message you got. However, from what I see, there is no MyApp defined in widget_test.dart.

    You can define a MyApp widget in another file and then import it in your widget_test.dart.

    An example would be:

    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());
      });
    }