Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

create a class extends StatefulWidget, and add a function, then occur CompileError #72

Open
HXiaoMing opened this issue Feb 26, 2024 · 1 comment

Comments

@HXiaoMing
Copy link

test case:

import 'package:dart_eval/dart_eval.dart';
import 'package:dart_eval/dart_eval_bridge.dart';
import 'package:flutter/material.dart';
import 'package:flutter_eval/flutter_eval.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('test MyWidget function', (WidgetTester tester) async {
    final compiler = Compiler();
    setupFlutterForCompile(compiler);
    final program = compiler.compile({
      'example': {
        'main.dart': '''
        import 'package:flutter/material.dart';

        class MyWidget extends StatefulWidget {
        
          void Function(int) _callback;
          
          MyWidget(this._callback);
        
          void testFun() {
            print('testFun');
            return _callback(1);
          }

          @override
          State<MyWidget> createState() {
            return MyWidgetState();
          }
        }

        class MyWidgetState extends State<MyWidget> {
          MyWidgetState();
          final TextEditingController controller = TextEditingController();
          String text = 'Bazinga';

          @override
          void initState() {
            super.initState();
            widget.testFun();
            controller.addListener(() {
              setState(() {
                text = controller.text + '123';
              });
            });
          }

          @override
          Widget build(BuildContext context) {
            return MaterialApp(home: Scaffold(body: Column(children: [
              TextField(
                controller: controller,
              ),
              Text(text)
            ])));
          }
        }
        '''
      }
    });
    final runtime = Runtime(program.write().buffer.asByteData());
    setupFlutterForRuntime(runtime);
    await tester.pumpWidget(
        runtime.executeLib('package:example/main.dart', 'MyWidget.', [
      $Closure((runtime, target, args) {
        debugPrint('eval args ${args[0]!.$value}');
        return null;
      }),
    ]));
    await tester.enterText(find.byType(TextField), 'Hello');
    await tester.pump();
    expect(find.text('Hello123'), findsOneWidget);
  });
}

Error:
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following CompileError was thrown running a test:
Unknown method StatefulWidget.testFun at "widget.testFun()" (file package:example/main.dart)

When the exception was thrown, this was the stack:
#0 resolveInstanceMethod (package:dart_eval/src/eval/compiler/expression/method_invocation.dart:350:9)
#1 resolveInstanceMethod (package:dart_eval/src/eval/compiler/expression/method_invocation.dart:355:14)
#2 resolveInstanceMethod (package:dart_eval/src/eval/compiler/expression/method_invocation.dart:355:14)
#3 resolveInstanceMethod (package:dart_eval/src/eval/compiler/expression/method_invocation.dart:355:14)
#4 _invokeWithTarget (package:dart_eval/src/eval/compiler/expression/method_invocation.dart:259:12)
#5 compileMethodInvocation (package:dart_eval/src/eval/compiler/expression/method_invocation.dart:55:12)
#6 compileExpression (package:dart_eval/src/eval/compiler/expression/expression.dart:38:12)
#7 compileExpressionAndDiscardResult (package:dart_eval/src/eval/compiler/expression/expression.dart:106:12)
#8 compileStatement (package:dart_eval/src/eval/compiler/statement/statement.dart:26:15)
#9 compileBlock (package:dart_eval/src/eval/compiler/statement/block.dart:19:20)
#10 compileMethodDeclaration (package:dart_eval/src/eval/compiler/declaration/method.dart:56:14)
#11 compileDeclaration (package:dart_eval/src/eval/compiler/declaration/declaration.dart:21:12)
#12 compileClassDeclaration (package:dart_eval/src/eval/compiler/declaration/class.dart:47:5)
#13 compileDeclaration (package:dart_eval/src/eval/compiler/declaration/declaration.dart:17:5)
#14 Compiler.compileSources.. (package:dart_eval/src/eval/compiler/compiler.dart:493:11)
#15 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:633:13)
#16 Compiler.compileSources. (package:dart_eval/src/eval/compiler/compiler.dart:482:15)
#17 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:633:13)
#18 Compiler.compileSources (package:dart_eval/src/eval/compiler/compiler.dart:478:32)
#19 Compiler.compile (package:dart_eval/src/eval/compiler/compiler.dart:164:12)
#20 main. (file:///Users/tt/tech/flutter/flutterPro/flutter_eval/test/custom/widget/widget_test.dart:11:30)
#21 testWidgets.. (package:flutter_test/src/widget_tester.dart:168:29)

#22 TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:1013:5)


(elided one frame from package:stack_trace)

@JeffOlajos
Copy link

same issue with controller. happens when you set the contollers text property

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants