aissat / easy_localization

Easy and Fast internationalizing your Flutter Apps
https://pub.dev/packages/easy_localization
MIT License
913 stars 328 forks source link

"The method 'get' was called on null" with EasyLocalization widget if used with integration_test #345

Open Aman-Malhotra opened 3 years ago

Aman-Malhotra commented 3 years ago

Version used

easy_localization: ^3.0.0-dev.1

The Working Scenario

Screenshot 2021-02-26 at 4 04 13 PM

Code to replicate non error scenario

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

void main() {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
  testWidgets(
    'Sample fail test',
    (WidgetTester tester) async {
      await tester.pumpWidget(const MakeTestableApp());
      await tester.pumpAndSettle();
      await Future<void>.delayed(const Duration(seconds: 2));
      await tester.tap(find.byKey(const ValueKey('SignIn')));
      await tester.pump();
      await Future<void>.delayed(const Duration(seconds: 2));
    },
  );
}

class MakeTestableApp extends StatelessWidget {
  const MakeTestableApp();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
          home: Scaffold(
            body: Center(
              child: FlatButton(
                key: const ValueKey('SignIn'),
                onPressed: () {
                  print('Button Tap Happened');
                },
                child: const Text('Hello'),
              ),
            ),
          ),
        );
  }
}

The Error Scenario

Screenshot 2021-02-26 at 4 02 03 PM

Code to replicate error scenario

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

Future<void> main() async {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
  EasyLocalization.ensureInitialized();
  // await Future<void>.delayed(const Duration(seconds: 10));

  testWidgets('Sample fail test', (WidgetTester tester) async {
    await tester.pumpWidget(
      EasyLocalization(
        supportedLocales: const [Locale('en', 'US')],
        fallbackLocale: const Locale('en', 'US'),
        path: 'assets/langs',
        child: const MakeTestableApp(),
      ),
    );
    await tester.pumpAndSettle();
    await Future<void>.delayed(const Duration(seconds: 2));
    await tester.tap(find.byKey(const ValueKey('SignIn')));
    await tester.pump();
    await Future<void>.delayed(const Duration(seconds: 2));
  });
}

class MakeTestableApp extends StatelessWidget {
  const MakeTestableApp();

  @override
  Widget build(BuildContext context) {
    return Builder(builder: (context) {
      return MaterialApp(
          home: Scaffold(
              body: Center(
                  child: FlatButton(
            key: const ValueKey('SignIn'),
            onPressed: () {
              print('Button Tap Happened');
            },
            child: Text(tr('signIn')),
          ))));
    });
  }
}

Error Stack:

✓ Built build/app/outputs/flutter-apk/app-debug.apk.
Installing build/app/outputs/flutter-apk/app.apk...                 0.8s
I/flutter (17660): Observatory listening on http://127.0.0.1:39147/Y00q_1_58GY=/
VMServiceFlutterDriver: Connecting to Flutter application at http://127.0.0.1:54062/Y00q_1_58GY=/
VMServiceFlutterDriver: Isolate found with number: 3784770362147883
VMServiceFlutterDriver: Isolate is paused at start.
VMServiceFlutterDriver: Attempting to resume isolate
I/flutter (17660): 00:00 +0: Sample fail test
VMServiceFlutterDriver: Connected to Flutter application.
I/flutter (17660): (The following exception is now available via WidgetTester.takeException:)
I/flutter (17660): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY
╞═══════════════════════════════════════════════════════════
I/flutter (17660): The following NoSuchMethodError was thrown building Builder(dirty):
I/flutter (17660): The method 'get' was called on null.
I/flutter (17660): Receiver: null
I/flutter (17660): Tried calling: get("signIn")
I/flutter (17660): 
I/flutter (17660): The relevant error-causing widget was:
I/flutter (17660):   Builder
I/flutter (17660):
file:///Users/aman-malhotra/Desktop/Holmusk/meadow/meadow/integration_test/sign_in_test.dart:149:12
I/flutter (17660): 
I/flutter (17660): When the exception was thrown, this was the stack:
I/flutter (17660): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
I/flutter (17660): #1      Localization._resolve
(package:easy_localization/src/localization.dart:138:36)
I/flutter (17660): #2      Localization.tr (package:easy_localization/src/localization.dart:46:13)
I/flutter (17660): #3      tr (package:easy_localization/src/public.dart:41:12)
I/flutter (17660): #4      MakeTestableApp.build.<anonymous closure>
(file:///Users/aman-malhotra/Desktop/Holmusk/meadow/meadow/integration_test/sign_in_test.dart:159:2
5)
I/flutter (17660): #5      Builder.build (package:flutter/src/widgets/basic.dart:7183:48)
I/flutter (17660): #6      StatelessElement.build
(package:flutter/src/widgets/framework.dart:4701:28)
I/flutter (17660): #7      ComponentElement.performRebuild
(package:flutter/src/widgets/framework.dart:4627:15)
I/flutter (17660): #8      Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
I/flutter (17660): #9      ComponentElement._firstBuild
(package:flutter/src/widgets/framework.dart:4606:5)
I/flutter (17660): #10     ComponentElement.mount
(package:flutter/src/widgets/framework.dart:4601:5)
I/flutter (17660): ...     Normal element mounting (21 frames)
I/flutter (17660): #31     Element.inflateWidget
(package:flutter/src/widgets/framework.dart:3569:14)
I/flutter (17660): #32     Element.updateChild (package:flutter/src/widgets/framework.dart:3324:20)
I/flutter (17660): #33     RenderObjectToWidgetElement._rebuild
(package:flutter/src/widgets/binding.dart:1252:16)
I/flutter (17660): #34     RenderObjectToWidgetElement.update
(package:flutter/src/widgets/binding.dart:1230:5)
I/flutter (17660): #35     RenderObjectToWidgetElement.performRebuild
(package:flutter/src/widgets/binding.dart:1244:7)
I/flutter (17660): #36     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
I/flutter (17660): #37     BuildOwner.buildScope
(package:flutter/src/widgets/framework.dart:2730:33)
I/flutter (17660): #38     WidgetsBinding.drawFrame
(package:flutter/src/widgets/binding.dart:913:20)
I/flutter (17660): #39     RendererBinding._handlePersistentFrameCallback
(package:flutter/src/rendering/binding.dart:302:5)
I/flutter (17660): #40     SchedulerBinding._invokeFrameCallback
(package:flutter/src/scheduler/binding.dart:1117:15)
I/flutter (17660): #41     SchedulerBinding.handleDrawFrame
(package:flutter/src/scheduler/binding.dart:1055:9)
I/flutter (17660): #42     LiveTestWidgetsFlutterBinding.handleDrawFrame
(package:flutter_test/src/binding.dart:1447:13)
I/flutter (17660): #43     SchedulerBinding._handleDrawFrame
(package:flutter/src/scheduler/binding.dart:971:5)
I/flutter (17660): #47     _invoke (dart:ui/hooks.dart:251:10)
I/flutter (17660): #48     _drawFrame (dart:ui/hooks.dart:209:3)
I/flutter (17660): (elided 3 frames from dart:async)
I/flutter (17660): 
I/flutter (17660):
═══════════════════════════════════════════════════════════════════════════════════════════════════
═
I/flutter (17660): (If WidgetTester.takeException is called, the above exception will be ignored.
If it is not, then the above exception will be dumped when another exception is caught by the
framework or when the test ends, whichever happens first, and then the test will fail due to having
not caught or expected the exception.)
I/flutter (17660): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY
╞═══════════════════════════════════════════════════════════
I/flutter (17660): The following NoSuchMethodError was thrown building Builder(dirty):
I/flutter (17660): The method 'get' was called on null.
I/flutter (17660): Receiver: null
I/flutter (17660): Tried calling: get("signIn")
I/flutter (17660): 
I/flutter (17660): The relevant error-causing widget was:
I/flutter (17660):   Builder
I/flutter (17660):
file:///Users/aman-malhotra/Desktop/Holmusk/meadow/meadow/integration_test/sign_in_test.dart:149:12
I/flutter (17660): 
I/flutter (17660): When the exception was thrown, this was the stack:
I/flutter (17660): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
I/flutter (17660): #1      Localization._resolve
(package:easy_localization/src/localization.dart:138:36)
I/flutter (17660): #2      Localization.tr (package:easy_localization/src/localization.dart:46:13)
I/flutter (17660): #3      tr (package:easy_localization/src/public.dart:41:12)
I/flutter (17660): #4      MakeTestableApp.build.<anonymous closure>
(file:///Users/aman-malhotra/Desktop/Holmusk/meadow/meadow/integration_test/sign_in_test.dart:159:2
5)
I/flutter (17660): #5      Builder.build (package:flutter/src/widgets/basic.dart:7183:48)
I/flutter (17660): #6      StatelessElement.build
(package:flutter/src/widgets/framework.dart:4701:28)
I/flutter (17660): #7      ComponentElement.performRebuild
(package:flutter/src/widgets/framework.dart:4627:15)
I/flutter (17660): #8      Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
I/flutter (17660): #9      ComponentElement._firstBuild
(package:flutter/src/widgets/framework.dart:4606:5)
I/flutter (17660): #10     ComponentElement.mount
(package:flutter/src/widgets/framework.dart:4601:5)
I/flutter (17660): ...     Normal element mounting (21 frames)
I/flutter (17660): #31     Element.inflateWidget
(package:flutter/src/widgets/framework.dart:3569:14)
I/flutter (17660): #32     Element.updateChild (package:flutter/src/widgets/framework.dart:3324:20)
I/flutter (17660): #33     RenderObjectToWidgetElement._rebuild
(package:flutter/src/widgets/binding.dart:1252:16)
I/flutter (17660): #34     RenderObjectToWidgetElement.update
(package:flutter/src/widgets/binding.dart:1230:5)
I/flutter (17660): #35     RenderObjectToWidgetElement.performRebuild
(package:flutter/src/widgets/binding.dart:1244:7)
I/flutter (17660): #36     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
I/flutter (17660): #37     BuildOwner.buildScope
(package:flutter/src/widgets/framework.dart:2730:33)
I/flutter (17660): #38     WidgetsBinding.drawFrame
(package:flutter/src/widgets/binding.dart:913:20)
I/flutter (17660): #39     RendererBinding._handlePersistentFrameCallback
(package:flutter/src/rendering/binding.dart:302:5)
I/flutter (17660): #40     SchedulerBinding._invokeFrameCallback
(package:flutter/src/scheduler/binding.dart:1117:15)
I/flutter (17660): #41     SchedulerBinding.handleDrawFrame
(package:flutter/src/scheduler/binding.dart:1055:9)
I/flutter (17660): #42     LiveTestWidgetsFlutterBinding.handleDrawFrame
(package:flutter_test/src/binding.dart:1447:13)
I/flutter (17660): #43     SchedulerBinding._handleDrawFrame
(package:flutter/src/scheduler/binding.dart:971:5)
I/flutter (17660): #47     _invoke (dart:ui/hooks.dart:251:10)
I/flutter (17660): #48     _drawFrame (dart:ui/hooks.dart:209:3)
I/flutter (17660): (elided 3 frames from dart:async)
I/flutter (17660): 
I/flutter (17660):
═══════════════════════════════════════════════════════════════════════════════════════════════════
═
I/flutter (17660): ══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK
╞════════════════════════════════════════════════════
I/flutter (17660): The following StateError was thrown running a test:
I/flutter (17660): Bad state: No element
I/flutter (17660): 
I/flutter (17660): When the exception was thrown, this was the stack:
I/flutter (17660): #0      Iterable.single (dart:core/iterable.dart:558:25)
I/flutter (17660): #1      WidgetController._getElementPoint
(package:flutter_test/src/controller.dart:818:47)
I/flutter (17660): #2      WidgetController.getCenter
(package:flutter_test/src/controller.dart:790:12)
I/flutter (17660): #3      WidgetController.tap (package:flutter_test/src/controller.dart:259:18)
I/flutter (17660): #4      main.<anonymous closure>
(file:///Users/aman-malhotra/Desktop/Holmusk/meadow/meadow/integration_test/sign_in_test.dart:138:1
8)
I/flutter (17660): <asynchronous suspension>
I/flutter (17660): #5      main.<anonymous closure>
(file:///Users/aman-malhotra/Desktop/Holmusk/meadow/meadow/integration_test/sign_in_test.dart)
I/flutter (17660): #6      testWidgets.<anonymous closure>.<anonymous closure>
(package:flutter_test/src/widget_tester.dart:146:29)
I/flutter (17660): <asynchronous suspension>
I/flutter (17660): #7      testWidgets.<anonymous closure>.<anonymous closure>
(package:flutter_test/src/widget_tester.dart)
I/flutter (17660): #8      TestWidgetsFlutterBinding._runTestBody
(package:flutter_test/src/binding.dart:784:19)
I/flutter (17660): <asynchronous suspension>
I/flutter (17660): #11     TestWidgetsFlutterBinding._runTest
(package:flutter_test/src/binding.dart:764:14)
I/flutter (17660): #12     LiveTestWidgetsFlutterBinding.runTest
(package:flutter_test/src/binding.dart:1592:12)
I/flutter (17660): #13     IntegrationTestWidgetsFlutterBinding.runTest
(package:integration_test/integration_test.dart:194:17)
I/flutter (17660): #14     testWidgets.<anonymous closure>
(package:flutter_test/src/widget_tester.dart:138:24)
I/flutter (17660): #15     Declarer.test.<anonymous closure>.<anonymous closure>
(package:test_api/src/backend/declarer.dart:175:19)
I/flutter (17660): <asynchronous suspension>
I/flutter (17660): #16     Declarer.test.<anonymous closure>.<anonymous closure>
(package:test_api/src/backend/declarer.dart)
I/flutter (17660): #21     Declarer.test.<anonymous closure>
(package:test_api/src/backend/declarer.dart:173:13)
I/flutter (17660): #22     Invoker.waitForOutstandingCallbacks.<anonymous closure>
(package:test_api/src/backend/invoker.dart:231:15)
I/flutter (17660): #27     Invoker.waitForOutstandingCallbacks
(package:test_api/src/backend/invoker.dart:228:5)
I/flutter (17660): #28     Invoker._onRun.<anonymous closure>.<anonymous closure>.<anonymous
closure> (package:test_api/src/backend/invoker.dart:383:17)
I/flutter (17660): <asynchronous suspension>
I/flutter (17660): #29     Invoker._onRun.<anonymous closure>.<anonymous closure>.<anonymous
closure> (package:test_api/src/backend/invoker.dart)
I/flutter (17660): #34     Invoker._onRun.<anonymous closure>.<anonymous closure>
(package:test_api/src/backend/invoker.dart:370:9)
I/flutter (17660): #35     Invoker._guardIfGuarded
(package:test_api/src/backend/invoker.dart:415:15)
I/flutter (17660): #36     Invoker._onRun.<anonymous closure>
(package:test_api/src/backend/invoker.dart:369:7)
I/flutter (17660): #43     Invoker._onRun (package:test_api/src/backend/invoker.dart:368:11)
I/flutter (17660): #44     LiveTestController.run
(package:test_api/src/backend/live_test_controller.dart:153:11)
I/flutter (17660): (elided 31 frames from dart:async and package:stack_trace)
I/flutter (17660): 
I/flutter (17660): The test description was:
I/flutter (17660):   Sample fail test
I/flutter (17660):
═══════════════════════════════════════════════════════════════════════════════════════════════════
═
I/flutter (17660): ══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK
╞════════════════════════════════════════════════════
I/flutter (17660): The following message was thrown:
I/flutter (17660): Multiple exceptions (2) were detected during the running of the current test,
and at least one was
I/flutter (17660): unexpected.
I/flutter (17660):
═══════════════════════════════════════════════════════════════════════════════════════════════════
═
I/flutter (17660): 00:02 +0: Sample fail test [E]
I/flutter (17660):   Test failed. See exception logs above.
I/flutter (17660):   The test description was: Sample fail test
I/flutter (17660):   
I/flutter (17660): 00:02 +0 -1: (tearDownAll)
Failure Details:
Failure in method: Sample fail test
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═════════════════
The following message was thrown:
Multiple exceptions (2) were detected during the running of the
current test, and at least one was unexpected.
═════════════════════════════════════════════════════════════════

end of failure 1

I/flutter (17660): 00:02 +1 -1: Some tests failed.
Stopping application instance.
Driver tests failed: 1
make: *** [drive] Error 1
kjawadDeveloper1 commented 3 years ago

@Aman-Malhotra do you found any solution?

bw-flagship commented 1 year ago

@Aman-Malhotra is this issue still up to date?