// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'project.dart'; class BasicProject extends Project { @override final String pubspec = ''' name: test environment: sdk: '>=2.12.0-0 <3.0.0' dependencies: flutter: sdk: flutter '''; @override final String main = r''' import 'dart:async'; import 'package:flutter/material.dart'; Future<void> main() async { while (true) { runApp(MyApp()); await Future.delayed(const Duration(milliseconds: 50)); } } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { topLevelFunction(); return MaterialApp( // BUILD BREAKPOINT title: 'Flutter Demo', home: Container(), ); } } topLevelFunction() { print("topLevelFunction"); // TOP LEVEL BREAKPOINT } '''; Uri get buildMethodBreakpointUri => mainDart; int get buildMethodBreakpointLine => lineContaining(main, '// BUILD BREAKPOINT'); Uri get topLevelFunctionBreakpointUri => mainDart; int get topLevelFunctionBreakpointLine => lineContaining(main, '// TOP LEVEL BREAKPOINT'); } /// A project that throws multiple exceptions during Widget builds. /// /// A repro for the issue at https://github.com/Dart-Code/Dart-Code/issues/3448 /// where Hot Restart could become stuck on exceptions and never complete. class BasicProjectThatThrows extends Project { @override final String pubspec = ''' name: test environment: sdk: '>=2.12.0-0 <3.0.0' dependencies: flutter: sdk: flutter '''; @override final String main = r''' import 'package:flutter/material.dart'; void a() { throw Exception('a'); } void b() { try { a(); } catch (e) { throw Exception('b'); } } void c() { try { b(); } catch (e) { throw Exception('c'); } } void main() { runApp(App()); } class App extends StatelessWidget { @override Widget build(BuildContext context) { c(); return MaterialApp( debugShowCheckedModeBanner: false, title: 'Study Flutter', theme: ThemeData( primarySwatch: Colors.green, ), home: Container(), ); } } '''; } class BasicProjectWithTimelineTraces extends Project { @override final String pubspec = ''' name: test environment: sdk: '>=2.12.0-0 <3.0.0' dependencies: flutter: sdk: flutter '''; @override final String main = r''' import 'dart:async'; import 'dart:developer'; import 'package:flutter/material.dart'; Future<void> main() async { while (true) { runApp(MyApp()); await Future.delayed(const Duration(milliseconds: 50)); Timeline.instantSync('main'); } } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { topLevelFunction(); return MaterialApp( // BUILD BREAKPOINT title: 'Flutter Demo', home: Container(), ); } } topLevelFunction() { print("topLevelFunction"); // TOP LEVEL BREAKPOINT } '''; } class BasicProjectWithFlutterGen extends Project { @override final String generatedFile = ''' String x = "a"; '''; @override final String pubspec = ''' name: test environment: sdk: '>=2.12.0-0 <3.0.0' dependencies: flutter: sdk: flutter flutter: generate: true '''; @override final String main = r''' // @dart = 2.8 // generated package does not support null safety. import 'dart:async'; import 'package:flutter_gen/flutter_gen.dart'; void main() {} '''; } class BasicProjectWithUnaryMain extends Project { @override final String pubspec = ''' name: test environment: sdk: '>=2.12.0-0 <3.0.0' dependencies: flutter: sdk: flutter '''; @override final String main = r''' import 'dart:async'; import 'package:flutter/material.dart'; Future<void> main(List<String> args) async { while (true) { runApp(MyApp()); await Future.delayed(const Duration(milliseconds: 50)); } } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { topLevelFunction(); return MaterialApp( // BUILD BREAKPOINT title: 'Flutter Demo', home: Container(), ); } } topLevelFunction() { print("topLevelFunction"); // TOP LEVEL BREAKPOINT } '''; }