[analysis_server] Include placeholder Container() in Flutter snippet build methods
Fixes https://github.com/Dart-Code/Dart-Code/issues/3975. Change-Id: I388f22fefed048dabd200070482a2a2915c5b971 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245840 Commit-Queue: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
committed by
Commit Bot
parent
0baad453cc
commit
cd4d9c6f2f
@@ -17,6 +17,7 @@ abstract class FlutterSnippetProducer extends DartSnippetProducer {
|
||||
final flutter = Flutter.instance;
|
||||
|
||||
late ClassElement? classWidget;
|
||||
late ClassElement? classContainer;
|
||||
|
||||
FlutterSnippetProducer(super.request);
|
||||
|
||||
@@ -27,6 +28,10 @@ abstract class FlutterSnippetProducer extends DartSnippetProducer {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((classContainer = await _getClass('Container')) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.isValid();
|
||||
}
|
||||
|
||||
@@ -344,6 +349,7 @@ mixin FlutterWidgetSnippetProducerMixin on FlutterSnippetProducer {
|
||||
// Checked by isValid() before this will be called.
|
||||
final classBuildContext = this.classBuildContext!;
|
||||
final classWidget = this.classWidget!;
|
||||
final classContainer = this.classContainer!;
|
||||
|
||||
// Add the build method.
|
||||
builder.writeln(' @override');
|
||||
@@ -359,9 +365,13 @@ mixin FlutterWidgetSnippetProducerMixin on FlutterSnippetProducer {
|
||||
},
|
||||
bodyWriter: () {
|
||||
builder.writeln('{');
|
||||
builder.write(' ');
|
||||
builder.write(' return ');
|
||||
builder.writeType(_getType(classContainer));
|
||||
builder.writeln('(');
|
||||
builder.write(' ');
|
||||
builder.selectHere();
|
||||
builder.writeln();
|
||||
builder.writeln(' );');
|
||||
builder.writeln(' }');
|
||||
},
|
||||
);
|
||||
|
||||
@@ -2854,6 +2854,7 @@ void f() {
|
||||
class FlutterSnippetCompletionTest extends SnippetCompletionTest {
|
||||
/// Standard import statements expected for basic Widgets.
|
||||
String get expectedImports => '''
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';''';
|
||||
|
||||
/// Nullability suffix expected in this test class.
|
||||
@@ -2908,7 +2909,9 @@ class \${1:MyWidget} extends StatefulWidget {
|
||||
class _\${1:MyWidget}State extends State<\${1:MyWidget}> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
\$0
|
||||
return Container(
|
||||
\$0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2965,7 +2968,9 @@ class _\${1:MyWidget}State extends State<\${1:MyWidget}>
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
\$0
|
||||
return Container(
|
||||
\$0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3001,7 +3006,9 @@ class \${1:MyWidget} extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
\$0
|
||||
return Container(
|
||||
\$0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3035,7 +3042,9 @@ class \${1:MyWidget} extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
\$0
|
||||
return Container(
|
||||
\$0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3063,7 +3072,9 @@ class \${1:MyWidget} extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
\$0
|
||||
return Container(
|
||||
\$0
|
||||
);
|
||||
}
|
||||
}
|
||||
''');
|
||||
@@ -3089,7 +3100,9 @@ class \${1:MyWidget} extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
\$0
|
||||
return Container(
|
||||
\$0
|
||||
);
|
||||
}
|
||||
}
|
||||
''');
|
||||
@@ -3131,6 +3144,7 @@ class FlutterSnippetCompletionWithoutNullSafetyTest
|
||||
@override
|
||||
String get expectedImports => '''
|
||||
import 'package:flutter/src/foundation/key.dart';
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';''';
|
||||
|
||||
@override
|
||||
|
||||
+41
-23
@@ -91,6 +91,7 @@ class FlutterStatefulWidgetSnippetProducerTest
|
||||
}
|
||||
expect(code, '''
|
||||
import 'package:flutter/src/foundation/key.dart';
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
|
||||
class MyWidget extends StatefulWidget {
|
||||
@@ -103,7 +104,9 @@ class MyWidget extends StatefulWidget {
|
||||
class _MyWidgetState extends State<MyWidget> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return Container(
|
||||
|
||||
);
|
||||
}
|
||||
}''');
|
||||
}
|
||||
@@ -126,6 +129,7 @@ class _MyWidgetState extends State<MyWidget> {
|
||||
code = SourceEdit.applySequence(code, edit.edits);
|
||||
}
|
||||
expect(code, '''
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
|
||||
class MyWidget extends StatefulWidget {
|
||||
@@ -138,20 +142,22 @@ class MyWidget extends StatefulWidget {
|
||||
class _MyWidgetState extends State<MyWidget> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return Container(
|
||||
|
||||
);
|
||||
}
|
||||
}''');
|
||||
expect(snippet.change.selection!.file, testFile);
|
||||
expect(snippet.change.selection!.offset, 296);
|
||||
expect(snippet.change.selection!.offset, 373);
|
||||
expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
|
||||
{
|
||||
'positions': [
|
||||
{'file': testFile, 'offset': 60},
|
||||
{'file': testFile, 'offset': 102},
|
||||
{'file': testFile, 'offset': 146},
|
||||
{'file': testFile, 'offset': 174},
|
||||
{'file': testFile, 'offset': 201},
|
||||
{'file': testFile, 'offset': 229},
|
||||
{'file': testFile, 'offset': 113},
|
||||
{'file': testFile, 'offset': 155},
|
||||
{'file': testFile, 'offset': 199},
|
||||
{'file': testFile, 'offset': 227},
|
||||
{'file': testFile, 'offset': 254},
|
||||
{'file': testFile, 'offset': 282},
|
||||
],
|
||||
'length': 8,
|
||||
'suggestions': []
|
||||
@@ -189,6 +195,7 @@ class FlutterStatefulWidgetWithAnimationControllerSnippetProducerTest
|
||||
expect(code, '''
|
||||
import 'package:flutter/src/animation/animation_controller.dart';
|
||||
import 'package:flutter/src/foundation/key.dart';
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
import 'package:flutter/src/widgets/ticker_provider.dart';
|
||||
|
||||
@@ -217,7 +224,9 @@ class _MyWidgetState extends State<MyWidget>
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return Container(
|
||||
|
||||
);
|
||||
}
|
||||
}''');
|
||||
}
|
||||
@@ -241,6 +250,7 @@ class _MyWidgetState extends State<MyWidget>
|
||||
}
|
||||
expect(code, '''
|
||||
import 'package:flutter/src/animation/animation_controller.dart';
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
import 'package:flutter/src/widgets/ticker_provider.dart';
|
||||
|
||||
@@ -269,20 +279,22 @@ class _MyWidgetState extends State<MyWidget>
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return Container(
|
||||
|
||||
);
|
||||
}
|
||||
}''');
|
||||
expect(snippet.change.selection!.file, testFile);
|
||||
expect(snippet.change.selection!.offset, 699);
|
||||
expect(snippet.change.selection!.offset, 776);
|
||||
expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
|
||||
{
|
||||
'positions': [
|
||||
{'file': testFile, 'offset': 185},
|
||||
{'file': testFile, 'offset': 227},
|
||||
{'file': testFile, 'offset': 271},
|
||||
{'file': testFile, 'offset': 299},
|
||||
{'file': testFile, 'offset': 326},
|
||||
{'file': testFile, 'offset': 354},
|
||||
{'file': testFile, 'offset': 238},
|
||||
{'file': testFile, 'offset': 280},
|
||||
{'file': testFile, 'offset': 324},
|
||||
{'file': testFile, 'offset': 352},
|
||||
{'file': testFile, 'offset': 379},
|
||||
{'file': testFile, 'offset': 407},
|
||||
],
|
||||
'length': 8,
|
||||
'suggestions': []
|
||||
@@ -316,6 +328,7 @@ class FlutterStatelessWidgetSnippetProducerTest
|
||||
}
|
||||
expect(code, '''
|
||||
import 'package:flutter/src/foundation/key.dart';
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
|
||||
class MyWidget extends StatelessWidget {
|
||||
@@ -323,7 +336,9 @@ class MyWidget extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return Container(
|
||||
|
||||
);
|
||||
}
|
||||
}''');
|
||||
}
|
||||
@@ -346,6 +361,7 @@ class MyWidget extends StatelessWidget {
|
||||
code = SourceEdit.applySequence(code, edit.edits);
|
||||
}
|
||||
expect(code, '''
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
|
||||
class MyWidget extends StatelessWidget {
|
||||
@@ -353,16 +369,18 @@ class MyWidget extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return Container(
|
||||
|
||||
);
|
||||
}
|
||||
}''');
|
||||
expect(snippet.change.selection!.file, testFile);
|
||||
expect(snippet.change.selection!.offset, 182);
|
||||
expect(snippet.change.selection!.offset, 259);
|
||||
expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
|
||||
{
|
||||
'positions': [
|
||||
{'file': testFile, 'offset': 60},
|
||||
{'file': testFile, 'offset': 103},
|
||||
{'file': testFile, 'offset': 113},
|
||||
{'file': testFile, 'offset': 156},
|
||||
],
|
||||
'length': 8,
|
||||
'suggestions': []
|
||||
|
||||
Reference in New Issue
Block a user