Skip to content

Instantly share code, notes, and snippets.

@itome
Created May 23, 2019 05:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itome/cf65e854970bebaa06f1bae891bd5462 to your computer and use it in GitHub Desktop.
Save itome/cf65e854970bebaa06f1bae891bd5462 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
[Trace - 12:34:32 PM]
Sending request 'initialize - (1)'.
Params:
{
"processId": 29578,
"rootPath": "/Users/s04407/OSS/flutter_compass/",
"rootUri": "file:///Users/s04407/OSS/flutter_compass/",
"capabilities": {
"workspace": {
"workspaceEdit": {
"documentChanges": true,
"resourceOperations": [
"create",
"rename",
"delete"
]
},
"applyEdit": true,
"symbol": {
"symbolKind": {
"valueSet": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
]
}
},
"executeCommand": {
"dynamicRegistration": false
},
"didChangeWatchedFiles": {
"dynamicRegistration": true
},
"workspaceFolders": true,
"configuration": true
},
"textDocument": {
"declaration": {
"linkSupport": true
},
"definition": {
"linkSupport": true
},
"implementation": {
"linkSupport": true
},
"typeDefinition": {
"linkSupport": true
},
"synchronization": {
"willSave": true,
"didSave": true,
"willSaveWaitUntil": true
},
"documentSymbol": {
"symbolKind": {
"valueSet": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
]
},
"hierarchicalDocumentSymbolSupport": true
},
"formatting": {
"dynamicRegistration": true
},
"codeAction": {
"dynamicRegistration": true,
"codeActionLiteralSupport": {
"codeActionKind": {
"valueSet": [
"",
"quickfix",
"refactor",
"refactor.extract",
"refactor.inline",
"refactor.rewrite",
"source",
"source.organizeImports"
]
}
}
},
"completion": {
"completionItem": {
"snippetSupport": true
},
"contextSupport": true
},
"signatureHelp": {
"signatureInformation": {
"parameterInformation": {
"labelOffsetSupport": true
}
}
},
"documentLink": {
"dynamicRegistration": true
},
"hover": {
"contentFormat": [
"plaintext",
"markdown"
]
},
"foldingRange": {
"dynamicRegistration": true,
"rangeLimit": null,
"lineFoldingOnly": null
}
}
},
"initializationOptions": null
}
[Trace - 12:34:34 PM]
Received response 'initialize - (1)' in 187ms.
Result:
{
"capabilities": {
"workspace": {
"workspaceFolders": {
"changeNotifications": true,
"supported": true
}
},
"declarationProvider": {
"commands": [
"edit.sortMembers",
"edit.organizeImports",
"edit.sendWorkspaceEdit"
]
},
"foldingRangeProvider": true,
"renameProvider": true,
"documentOnTypeFormattingProvider": {
"moreTriggerCharacter": [
";"
],
"firstTriggerCharacter": "}"
},
"documentRangeFormattingProvider": null,
"documentFormattingProvider": true,
"codeActionProvider": {
"codeActionKinds": [
"source",
"source.organizeImports",
"source.sortMembers",
"quickfix"
]
},
"workspaceSymbolProvider": true,
"documentSymbolProvider": true,
"documentHighlightProvider": true,
"referencesProvider": true,
"implementationProvider": true,
"definitionProvider": true,
"signatureHelpProvider": {
"triggerCharacters": []
},
"completionProvider": {
"triggerCharacters": [
".",
"=",
"(",
"$"
],
"resolveProvider": true
},
"hoverProvider": true,
"textDocumentSync": {
"willSaveWaitUntil": null,
"willSave": null,
"change": 2,
"openClose": true
}
}
}
[Trace - 12:34:34 PM]
Sending notification 'initialized'.
Params:
{
}
[Trace - 12:34:34 PM]
Sending notification 'textDocument/didOpen'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"languageId": "dart",
"version": 0,
"text": "import 'dart:async';\nimport 'dart:convert';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:sensors/sensors.dart';\nimport 'package:flutter_compass/flutter_compass.dart';\nimport 'package:flare_dart/math/mat2d.dart';\nimport 'package:flare_flutter/flare.dart';\nimport 'package:flare_flutter/flare_controller.dart';\nimport 'package:flare_flutter/flare_actor.dart';\nimport 'package:location/location.dart';\nimport 'package:http/http.dart' as http;\n\nvoid main() {\n SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);\n runApp(MaterialApp(\n title: 'Compass',\n theme: ThemeData.dark(),\n home: HomePage(),\n ));\n}\n\nclass Anim {\n String name;\n double _value = 0, pos = 0, min, max, speed;\n bool endless = false;\n ActorAnimation actor;\n Anim(this.name, this.min, this.max, this.speed, this.endless);\n get value => _value * (max - min) + min;\n set value(double v) => _value = (v - min) / (max - min);\n}\n\nclass AniControler implements FlareController {\n List<Anim> items;\n AniControler(this.items);\n\n @override\n bool advance(FlutterActorArtboard board, double elapsed) {\n for (var a in items) {\n if (a.actor == null) continue;\n var d = (a.pos - a._value).abs();\n var m = a.pos > a._value ? -1 : 1;\n if (a.endless && d > 0.5) {\n m = -m;\n d = 1.0 - d;\n }\n var e = elapsed / a.actor.duration * (1 + d * a.speed);\n a.pos = e < d ? (a.pos + e * m) : a._value;\n if (a.endless) a.pos %= 1.0;\n a.actor.apply(a.actor.duration * a.pos, board, 1.0);\n }\n return true;\n }\n\n @override\n void initialize(FlutterActorArtboard board) {\n items.forEach((a) => a.actor = board.getAnimation(a.name));\n }\n\n @override\n void setViewTransform(Mat2D viewTransform) {}\n\n operator [](String name) {\n for (var a in items) if (a.name == name) return a;\n }\n}\n\nclass HomePage extends StatefulWidget {\n @override\n _HomePageState createState() => _HomePageState();\n}\n\nclass _HomePageState extends State<HomePage> {\n int mode = 0;\n AniControler compass;\n AniControler earth;\n double lat, lon;\n\n String city = '', weather = '', icon = '01d';\n double temp = 0, humidity = 0;\n\n void getWeather() async {\n var key = '7c5c03c8acacd8dea3abd517ae22af34';\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n var resp = await http.Client().get(url);\n var data = json.decode(resp.body);\n city = data['name'];\n var m = data['weather'][0];\n weather = m['main'];\n icon = m['icon'];\n m = data['main'];\n temp = m['temp'] - 273.15;\n humidity = m['humidity'] + 0.0;\n setState(() {});\n }\n\n void setLocation(double lati, double long, [bool weather = true]) {\n earth['lat'].value = lat = lati;\n earth['lon'].value = lon = long;\n if (weather) getWeather();\n setState(() {});\n }\n\n @override\n void initState() {\n super.initState();\n\n compass = AniControler([\n Anim('dir', 0, 360, 30, true),\n Anim('hor', -9.6, 9.6, 20, false),\n Anim('ver', -9.6, 9.6, 20, false),\n ]);\n\n earth = AniControler([\n Anim('dir', 0, 360, 20, true),\n Anim('lat', -90, 90, 1, false),\n Anim('lon', -180, 180, 1, true),\n ]);\n\n FlutterCompass.events.listen((angle) {\n compass['dir'].value = angle;\n earth['dir'].value = angle;\n });\n\n accelerometerEvents.listen((event) {\n compass['hor'].value = -event.x;\n compass['ver'].value = -event.y;\n });\n\n setLocation(0, 0);\n Timer.periodic(Duration(seconds: 15), (t) {\n Location().getLocation().then((p) => setLocation(p.latitude, p.longitude));\n });\n }\n\n Widget Compass() {\n return GestureDetector(\n onTap: () => setState(() => mode++),\n child: FlareActor(\"assets/compass.flr\", animation: 'mode${mode % 2}', controller: compass),\n );\n }\n\n Widget Earth() {\n return Column(mainAxisAlignment: MainAxisAlignment.center, children: [\n Text(city, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),\n Text('lat:${lat.toStringAsFixed(2)} lon:${lon.toStringAsFixed(2)}'),\n Expanded(\n child: GestureDetector(\n onPanUpdate: (pan) => setLocation((lat - pan.delta.dy).clamp(-90.0, 90.0), (lon - pan.delta.dx + 180) % 360 - 180, false),\n onPanEnd: (pan) => getWeather(),\n child: FlareActor(\"assets/earth.flr\", animation: \"pulse\", controller: earth),\n ),\n ),\n Row(mainAxisAlignment: MainAxisAlignment.center, children: [\n Container(width: 128, height: 128, child: FlareActor('assets/weather.flr', animation: icon)),\n Column(crossAxisAlignment: CrossAxisAlignment.start, children: [\n Text('${temp.toInt()}°', style: TextStyle(fontSize: 60)),\n Text(weather),\n Text('Humidity ${humidity.toInt()}%'),\n ]),\n ]),\n ]);\n }\n\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n body: PageView(\n controller: PageController(viewportFraction: 0.8),\n scrollDirection: Axis.vertical,\n children: [Compass(), Earth()],\n ),\n );\n }\n}\n"
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/codeAction - (2)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 47,
"character": 0
},
"end": {
"line": 47,
"character": 49
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (3)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 6
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (4)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 8
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (5)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 12
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (6)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 14
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (7)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 16
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (8)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 18
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (9)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 23
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (10)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 25
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (11)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 29
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (12)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 31
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (13)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 35
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (14)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 40
}
}
[Trace - 12:34:34 PM]
Sending request 'textDocument/hover - (15)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 47,
"character": 42
}
}
[Trace - 12:34:36 PM]
Received notification '$/analyzerStatus'.
Params:
{
"isAnalyzing": true
}
[Trace - 12:34:36 PM]
Sending request 'textDocument/codeAction - (16)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 80,
"character": 0
},
"end": {
"line": 80,
"character": 0
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:36 PM]
Sending request 'textDocument/documentHighlight - (17)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 80,
"character": 0
}
}
[Trace - 12:34:36 PM]
Sending request 'textDocument/hover - (18)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 80,
"character": 0
}
}
[Trace - 12:34:36 PM]
Sending request 'textDocument/signatureHelp - (19)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 80,
"character": 0
}
}
[Trace - 12:34:38 PM]
Sending request 'textDocument/codeAction - (20)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 64,
"character": 0
},
"end": {
"line": 64,
"character": 3
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:38 PM]
Sending request 'textDocument/documentHighlight - (21)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 64,
"character": 2
}
}
[Trace - 12:34:38 PM]
Sending request 'textDocument/hover - (22)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 64,
"character": 2
}
}
[Trace - 12:34:38 PM]
Sending request 'textDocument/signatureHelp - (23)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 64,
"character": 2
}
}
[Trace - 12:34:39 PM]
Sending request 'textDocument/codeAction - (24)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 65,
"character": 0
},
"end": {
"line": 65,
"character": 1
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:39 PM]
Sending request 'textDocument/hover - (25)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 65,
"character": 0
}
}
[Trace - 12:34:39 PM]
Sending request 'textDocument/signatureHelp - (26)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 65,
"character": 0
}
}
[Trace - 12:34:45 PM]
Sending notification 'textDocument/didOpen'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"languageId": "dart",
"version": 0,
"text": "import 'dart:async';\nimport 'dart:convert';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:sensors/sensors.dart';\nimport 'package:flutter_compass/flutter_compass.dart';\nimport 'package:flare_dart/math/mat2d.dart';\nimport 'package:flare_flutter/flare.dart';\nimport 'package:flare_flutter/flare_controller.dart';\nimport 'package:flare_flutter/flare_actor.dart';\nimport 'package:location/location.dart';\nimport 'package:http/http.dart' as http;\n\nvoid main() {\n SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);\n runApp(MaterialApp(\n title: 'Compass',\n theme: ThemeData.dark(),\n home: HomePage(),\n ));\n}\n\nclass Anim {\n String name;\n double _value = 0, pos = 0, min, max, speed;\n bool endless = false;\n ActorAnimation actor;\n Anim(this.name, this.min, this.max, this.speed, this.endless);\n get value => _value * (max - min) + min;\n set value(double v) => _value = (v - min) / (max - min);\n}\n\nclass AniControler implements FlareController {\n List<Anim> items;\n AniControler(this.items);\n\n @override\n bool advance(FlutterActorArtboard board, double elapsed) {\n for (var a in items) {\n if (a.actor == null) continue;\n var d = (a.pos - a._value).abs();\n var m = a.pos > a._value ? -1 : 1;\n if (a.endless && d > 0.5) {\n m = -m;\n d = 1.0 - d;\n }\n var e = elapsed / a.actor.duration * (1 + d * a.speed);\n a.pos = e < d ? (a.pos + e * m) : a._value;\n if (a.endless) a.pos %= 1.0;\n a.actor.apply(a.actor.duration * a.pos, board, 1.0);\n }\n return true;\n }\n\n @override\n void initialize(FlutterActorArtboard board) {\n items.forEach((a) => a.actor = board.getAnimation(a.name));\n }\n\n @override\n void setViewTransform(Mat2D viewTransform) {}\n\n operator [](String name) {\n for (var a in items) if (a.name == name) return a;\n }\n}\n\nclass HomePage extends StatefulWidget {\n @override\n _HomePageState createState() => _HomePageState();\n}\n\nclass _HomePageState extends State<HomePage> {\n int mode = 0;\n AniControler compass;\n AniControler earth;\n double lat, lon;\n\n String city = '', weather = '', icon = '01d';\n double temp = 0, humidity = 0;\n\n void getWeather() async {\n var key = '7c5c03c8acacd8dea3abd517ae22af34';\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n var resp = await http.Client().get(url);\n var data = json.decode(resp.body);\n city = data['name'];\n var m = data['weather'][0];\n weather = m['main'];\n icon = m['icon'];\n m = data['main'];\n temp = m['temp'] - 273.15;\n humidity = m['humidity'] + 0.0;\n setState(() {});\n }\n\n void setLocation(double lati, double long, [bool weather = true]) {\n earth['lat'].value = lat = lati;\n earth['lon'].value = lon = long;\n if (weather) getWeather();\n setState(() {});\n }\n\n @override\n void initState() {\n super.initState();\n\n compass = AniControler([\n Anim('dir', 0, 360, 30, true),\n Anim('hor', -9.6, 9.6, 20, false),\n Anim('ver', -9.6, 9.6, 20, false),\n ]);\n\n earth = AniControler([\n Anim('dir', 0, 360, 20, true),\n Anim('lat', -90, 90, 1, false),\n Anim('lon', -180, 180, 1, true),\n ]);\n\n FlutterCompass.events.listen((angle) {\n compass['dir'].value = angle;\n earth['dir'].value = angle;\n });\n\n accelerometerEvents.listen((event) {\n compass['hor'].value = -event.x;\n compass['ver'].value = -event.y;\n });\n\n setLocation(0, 0);\n Timer.periodic(Duration(seconds: 15), (t) {\n Location().getLocation().then((p) => setLocation(p.latitude, p.longitude));\n });\n }\n\n Widget Compass() {\n return GestureDetector(\n onTap: () => setState(() => mode++),\n child: FlareActor(\"assets/compass.flr\", animation: 'mode${mode % 2}', controller: compass),\n );\n }\n\n Widget Earth() {\n return Column(mainAxisAlignment: MainAxisAlignment.center, children: [\n Text(city, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),\n Text('lat:${lat.toStringAsFixed(2)} lon:${lon.toStringAsFixed(2)}'),\n Expanded(\n child: GestureDetector(\n onPanUpdate: (pan) => setLocation((lat - pan.delta.dy).clamp(-90.0, 90.0), (lon - pan.delta.dx + 180) % 360 - 180, false),\n onPanEnd: (pan) => getWeather(),\n child: FlareActor(\"assets/earth.flr\", animation: \"pulse\", controller: earth),\n ),\n ),\n Row(mainAxisAlignment: MainAxisAlignment.center, children: [\n Container(width: 128, height: 128, child: FlareActor('assets/weather.flr', animation: icon)),\n Column(crossAxisAlignment: CrossAxisAlignment.start, children: [\n Text('${temp.toInt()}°', style: TextStyle(fontSize: 60)),\n Text(weather),\n Text('Humidity ${humidity.toInt()}%'),\n ]),\n ]),\n ]);\n }\n\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n body: PageView(\n controller: PageController(viewportFraction: 0.8),\n scrollDirection: Axis.vertical,\n children: [Compass(), Earth()],\n ),\n );\n }\n}\n"
}
}
[Trace - 12:34:47 PM]
Received notification 'textDocument/publishDiagnostics'.
Params:
{
"diagnostics": [
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 16,
"line": 135
},
"start": {
"character": 9,
"line": 135
}
}
},
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 14,
"line": 142
},
"start": {
"character": 9,
"line": 142
}
}
}
],
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
}
[Trace - 12:34:47 PM]
Sending request 'textDocument/codeAction - (27)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 66,
"character": 0
},
"end": {
"line": 66,
"character": 0
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (3)' in 975ms.
Result:
{
"range": {
"end": {
"character": 7,
"line": 47
},
"start": {
"character": 6,
"line": 47
}
},
"contents": {
"value": "```dart\nAnim a\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (4)' in 975ms.
Result:
{
"range": {
"end": {
"character": 11,
"line": 47
},
"start": {
"character": 8,
"line": 47
}
},
"contents": {
"value": "```dart\ndouble pos\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (5)' in 975ms.
Result:
{
"range": {
"end": {
"character": 48,
"line": 47
},
"start": {
"character": 6,
"line": 47
}
},
"contents": {
"value": "",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (6)' in 975ms.
Result:
{
"range": {
"end": {
"character": 15,
"line": 47
},
"start": {
"character": 14,
"line": 47
}
},
"contents": {
"value": "```dart\ndouble e\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (7)' in 975ms.
Result:
{
"range": {
"end": {
"character": 19,
"line": 47
},
"start": {
"character": 14,
"line": 47
}
},
"contents": {
"value": "```dart\n<(num other) → bool\n```\n*dart.core*\n\n---\nRelational less than operator.",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (8)' in 975ms.
Result:
{
"range": {
"end": {
"character": 19,
"line": 47
},
"start": {
"character": 18,
"line": 47
}
},
"contents": {
"value": "```dart\ndouble d\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (9)' in 975ms.
Result:
{
"range": {
"end": {
"character": 24,
"line": 47
},
"start": {
"character": 23,
"line": 47
}
},
"contents": {
"value": "```dart\nAnim a\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (10)' in 975ms.
Result:
{
"range": {
"end": {
"character": 28,
"line": 47
},
"start": {
"character": 25,
"line": 47
}
},
"contents": {
"value": "```dart\ndouble pos\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (11)' in 975ms.
Result:
{
"range": {
"end": {
"character": 36,
"line": 47
},
"start": {
"character": 23,
"line": 47
}
},
"contents": {
"value": "```dart\n+(num other) → double\n```\n*dart.core*\n\n---\nAddition operator.",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (12)' in 975ms.
Result:
{
"range": {
"end": {
"character": 32,
"line": 47
},
"start": {
"character": 31,
"line": 47
}
},
"contents": {
"value": "```dart\ndouble e\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (13)' in 975ms.
Result:
{
"range": {
"end": {
"character": 36,
"line": 47
},
"start": {
"character": 35,
"line": 47
}
},
"contents": {
"value": "```dart\nint m\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (14)' in 975ms.
Result:
{
"range": {
"end": {
"character": 41,
"line": 47
},
"start": {
"character": 40,
"line": 47
}
},
"contents": {
"value": "```dart\nAnim a\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (15)' in 975ms.
Result:
{
"range": {
"end": {
"character": 48,
"line": 47
},
"start": {
"character": 42,
"line": 47
}
},
"contents": {
"value": "```dart\ndouble _value\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/codeAction - (2)' in 26ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " }\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 48
}
}
},
{
"newText": " a.pos = e < d ? (a.pos + e * m) : a._value;\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 47
}
}
},
{
"newText": " {\n",
"range": {
"end": {
"character": 0,
"line": 47
},
"start": {
"character": 0,
"line": 47
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with block"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " if (condition) {\n a.pos = e < d ? (a.pos + e * m) : a._value;\n }\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 47
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'if'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " while (condition) {\n a.pos = e < d ? (a.pos + e * m) : a._value;\n }\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 47
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var item in iterable) {\n a.pos = e < d ? (a.pos + e * m) : a._value;\n }\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 47
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for-in'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var v = init; condition; increment) {\n a.pos = e < d ? (a.pos + e * m) : a._value;\n }\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 47
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " do {\n a.pos = e < d ? (a.pos + e * m) : a._value;\n } while (condition);\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 47
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'do-while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n a.pos = e < d ? (a.pos + e * m) : a._value;\n } on Exception catch (e) {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 47
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-catch'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n a.pos = e < d ? (a.pos + e * m) : a._value;\n } finally {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 48
},
"start": {
"character": 0,
"line": 47
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-finally'"
}
]
[Trace - 12:34:48 PM]
Received response 'textDocument/documentHighlight - (17)' in 185ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (18)' in 908ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/signatureHelp - (19)' in 906ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/documentHighlight - (21)' in 5ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (22)' in 739ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/signatureHelp - (23)' in 737ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (25)' in 914ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/signatureHelp - (26)' in 941ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/codeAction - (16)' in 218ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
}
]
[Trace - 12:34:48 PM]
Received response 'textDocument/codeAction - (20)' in 39ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
}
]
[Trace - 12:34:48 PM]
Received response 'textDocument/codeAction - (24)' in 247ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
}
]
[Trace - 12:34:48 PM]
Received notification 'textDocument/publishDiagnostics'.
Params:
{
"diagnostics": [
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 16,
"line": 135
},
"start": {
"character": 9,
"line": 135
}
}
},
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 14,
"line": 142
},
"start": {
"character": 9,
"line": 142
}
}
}
],
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
}
[Trace - 12:34:48 PM]
Received response 'textDocument/codeAction - (27)' in 897ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
}
]
[Trace - 12:34:48 PM]
Sending request 'textDocument/codeAction - (28)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 91,
"character": 0
},
"end": {
"line": 91,
"character": 30
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:48 PM]
Sending request 'textDocument/hover - (29)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 4
}
}
[Trace - 12:34:48 PM]
Sending request 'textDocument/hover - (30)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 9
}
}
[Trace - 12:34:48 PM]
Sending request 'textDocument/hover - (31)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 11
}
}
[Trace - 12:34:48 PM]
Sending request 'textDocument/hover - (32)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 21
}
}
[Trace - 12:34:48 PM]
Sending request 'textDocument/hover - (33)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 23
}
}
[Trace - 12:34:48 PM]
Sending request 'textDocument/hover - (34)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 27
}
}
[Trace - 12:34:48 PM]
Sending request 'textDocument/documentHighlight - (35)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 0
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (29)' in 94ms.
Result:
{
"range": {
"end": {
"character": 8,
"line": 91
},
"start": {
"character": 4,
"line": 91
}
},
"contents": {
"value": "```dart\ndouble temp\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (30)' in 98ms.
Result:
{
"range": {
"end": {
"character": 29,
"line": 91
},
"start": {
"character": 4,
"line": 91
}
},
"contents": {
"value": "",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (31)' in 99ms.
Result:
{
"range": {
"end": {
"character": 12,
"line": 91
},
"start": {
"character": 11,
"line": 91
}
},
"contents": {
"value": "```dart\ndynamic m\n```",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (32)' in 100ms.
Result:
{
"range": {
"end": {
"character": 29,
"line": 91
},
"start": {
"character": 11,
"line": 91
}
},
"contents": {
"value": "",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (33)' in 100ms.
Result:
{
"range": {
"end": {
"character": 29,
"line": 91
},
"start": {
"character": 23,
"line": 91
}
},
"contents": {
"value": "",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (34)' in 101ms.
Result:
{
"range": {
"end": {
"character": 29,
"line": 91
},
"start": {
"character": 23,
"line": 91
}
},
"contents": {
"value": "",
"kind": "markdown"
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/documentHighlight - (35)' in 101ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/codeAction - (28)' in 169ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " }\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 92
}
}
},
{
"newText": " temp = m['temp'] - 273.15;\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 91
}
}
},
{
"newText": " {\n",
"range": {
"end": {
"character": 0,
"line": 91
},
"start": {
"character": 0,
"line": 91
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with block"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " if (condition) {\n temp = m['temp'] - 273.15;\n }\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 91
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'if'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " while (condition) {\n temp = m['temp'] - 273.15;\n }\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 91
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var item in iterable) {\n temp = m['temp'] - 273.15;\n }\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 91
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for-in'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var v = init; condition; increment) {\n temp = m['temp'] - 273.15;\n }\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 91
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " do {\n temp = m['temp'] - 273.15;\n } while (condition);\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 91
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'do-while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n temp = m['temp'] - 273.15;\n } on Exception catch (e) {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 91
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-catch'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n temp = m['temp'] - 273.15;\n } finally {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 92
},
"start": {
"character": 0,
"line": 91
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-finally'"
}
]
[Trace - 12:34:48 PM]
Sending request 'textDocument/hover - (36)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 0
}
}
[Trace - 12:34:48 PM]
Sending request 'textDocument/signatureHelp - (37)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 91,
"character": 0
}
}
[Trace - 12:34:48 PM]
Received response 'textDocument/hover - (36)' in 50ms.
Result:
null
[Trace - 12:34:48 PM]
Received response 'textDocument/signatureHelp - (37)' in 49ms.
Result:
null
[Trace - 12:34:49 PM]
Received notification '$/analyzerStatus'.
Params:
{
"isAnalyzing": null
}
[Trace - 12:34:51 PM]
Sending request 'textDocument/codeAction - (38)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 83,
"character": 0
},
"end": {
"line": 83,
"character": 92
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:51 PM]
Sending request 'textDocument/hover - (39)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 83,
"character": 4
}
}
[Trace - 12:34:51 PM]
Sending request 'textDocument/hover - (40)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 83,
"character": 8
}
}
[Trace - 12:34:51 PM]
Sending request 'textDocument/hover - (41)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 83,
"character": 12
}
}
[Trace - 12:34:51 PM]
Received response 'textDocument/codeAction - (38)' in 38ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " }\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 84
}
}
},
{
"newText": " var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 83
}
}
},
{
"newText": " {\n",
"range": {
"end": {
"character": 0,
"line": 83
},
"start": {
"character": 0,
"line": 83
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with block"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " if (condition) {\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n }\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 83
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'if'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " while (condition) {\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n }\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 83
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var item in iterable) {\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n }\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 83
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for-in'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var v = init; condition; increment) {\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n }\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 83
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " do {\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n } while (condition);\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 83
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'do-while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n } on Exception catch (e) {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 83
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-catch'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n var url = 'http://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$key';\n } finally {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 84
},
"start": {
"character": 0,
"line": 83
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-finally'"
}
]
[Trace - 12:34:51 PM]
Received response 'textDocument/hover - (39)' in 54ms.
Result:
null
[Trace - 12:34:51 PM]
Received response 'textDocument/hover - (40)' in 53ms.
Result:
{
"range": {
"end": {
"character": 11,
"line": 83
},
"start": {
"character": 8,
"line": 83
}
},
"contents": {
"value": "```dart\nString url\n```",
"kind": "markdown"
}
}
[Trace - 12:34:51 PM]
Received response 'textDocument/hover - (41)' in 54ms.
Result:
null
[Trace - 12:34:52 PM]
Sending request 'textDocument/codeAction - (42)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 89,
"character": 0
},
"end": {
"line": 89,
"character": 21
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:52 PM]
Sending request 'textDocument/hover - (43)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 89,
"character": 4
}
}
[Trace - 12:34:52 PM]
Sending request 'textDocument/hover - (44)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 89,
"character": 9
}
}
[Trace - 12:34:52 PM]
Sending request 'textDocument/hover - (45)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 89,
"character": 11
}
}
[Trace - 12:34:52 PM]
Received response 'textDocument/codeAction - (42)' in 97ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " }\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 90
}
}
},
{
"newText": " icon = m['icon'];\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 89
}
}
},
{
"newText": " {\n",
"range": {
"end": {
"character": 0,
"line": 89
},
"start": {
"character": 0,
"line": 89
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with block"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " if (condition) {\n icon = m['icon'];\n }\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 89
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'if'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " while (condition) {\n icon = m['icon'];\n }\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 89
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var item in iterable) {\n icon = m['icon'];\n }\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 89
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for-in'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var v = init; condition; increment) {\n icon = m['icon'];\n }\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 89
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " do {\n icon = m['icon'];\n } while (condition);\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 89
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'do-while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n icon = m['icon'];\n } on Exception catch (e) {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 89
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-catch'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n icon = m['icon'];\n } finally {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 90
},
"start": {
"character": 0,
"line": 89
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-finally'"
}
]
[Trace - 12:34:52 PM]
Received response 'textDocument/hover - (43)' in 115ms.
Result:
{
"range": {
"end": {
"character": 8,
"line": 89
},
"start": {
"character": 4,
"line": 89
}
},
"contents": {
"value": "```dart\nString icon\n```",
"kind": "markdown"
}
}
[Trace - 12:34:52 PM]
Received response 'textDocument/hover - (44)' in 115ms.
Result:
{
"range": {
"end": {
"character": 20,
"line": 89
},
"start": {
"character": 4,
"line": 89
}
},
"contents": {
"value": "",
"kind": "markdown"
}
}
[Trace - 12:34:52 PM]
Received response 'textDocument/hover - (45)' in 144ms.
Result:
{
"range": {
"end": {
"character": 12,
"line": 89
},
"start": {
"character": 11,
"line": 89
}
},
"contents": {
"value": "```dart\ndynamic m\n```",
"kind": "markdown"
}
}
[Trace - 12:34:52 PM]
Sending request 'textDocument/codeAction - (46)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 99,
"character": 0
},
"end": {
"line": 99,
"character": 30
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:52 PM]
Sending request 'textDocument/hover - (47)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 99,
"character": 4
}
}
[Trace - 12:34:52 PM]
Sending request 'textDocument/hover - (48)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 99,
"character": 8
}
}
[Trace - 12:34:52 PM]
Sending request 'textDocument/hover - (49)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 99,
"character": 17
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/codeAction - (46)' in 39ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " }\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 100
}
}
},
{
"newText": " if (weather) getWeather();\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 99
}
}
},
{
"newText": " {\n",
"range": {
"end": {
"character": 0,
"line": 99
},
"start": {
"character": 0,
"line": 99
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with block"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " if (condition) {\n if (weather) getWeather();\n }\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 99
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'if'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " while (condition) {\n if (weather) getWeather();\n }\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 99
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var item in iterable) {\n if (weather) getWeather();\n }\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 99
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for-in'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " for (var v = init; condition; increment) {\n if (weather) getWeather();\n }\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 99
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'for'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " do {\n if (weather) getWeather();\n } while (condition);\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 99
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'do-while'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n if (weather) getWeather();\n } on Exception catch (e) {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 99
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-catch'"
},
{
"edit": {
"documentChanges": [
{
"edits": [
{
"newText": " try {\n if (weather) getWeather();\n } finally {\n // TODO\n }\n",
"range": {
"end": {
"character": 0,
"line": 100
},
"start": {
"character": 0,
"line": 99
}
}
}
],
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 0
}
}
]
},
"diagnostics": [],
"kind": "refactor",
"title": "Surround with 'try-finally'"
}
]
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (47)' in 58ms.
Result:
null
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (48)' in 56ms.
Result:
{
"range": {
"end": {
"character": 15,
"line": 99
},
"start": {
"character": 8,
"line": 99
}
},
"contents": {
"value": "```dart\n[bool weather = true]\n```",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (49)' in 103ms.
Result:
{
"range": {
"end": {
"character": 27,
"line": 99
},
"start": {
"character": 17,
"line": 99
}
},
"contents": {
"value": "```dart\ngetWeather() → void\n```",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/codeAction - (50)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 96,
"character": 0
},
"end": {
"line": 96,
"character": 69
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (51)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 2
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (52)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 7
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (53)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 19
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (54)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 26
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (55)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 32
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (56)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 39
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (57)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 46
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (58)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 51
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (59)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 59
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (60)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 61
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/codeAction - (50)' in 63ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
}
]
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (51)' in 64ms.
Result:
{
"range": {
"end": {
"character": 6,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
},
"contents": {
"value": "",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (52)' in 64ms.
Result:
{
"range": {
"end": {
"character": 18,
"line": 96
},
"start": {
"character": 7,
"line": 96
}
},
"contents": {
"value": "```dart\nsetLocation(double lati, double long, [bool weather = true]) → void\n```",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (53)' in 66ms.
Result:
{
"range": {
"end": {
"character": 25,
"line": 96
},
"start": {
"character": 19,
"line": 96
}
},
"contents": {
"value": "```dart\nabstract class double extends num\n```\n*dart.core*\n\n---\nA double-precision floating point number.\n\nRepresentation of Dart doubles containing double specific constants\nand operations and specializations of operations inherited from\n[num]. Dart doubles are 64-bit floating-point numbers as specified in the\nIEEE 754 standard.\n\nThe [double] type is contagious. Operations on [double]s return\n[double] results.\n\nIt is a compile-time error for a class to attempt to extend or implement\ndouble.",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (54)' in 69ms.
Result:
{
"range": {
"end": {
"character": 30,
"line": 96
},
"start": {
"character": 26,
"line": 96
}
},
"contents": {
"value": "```dart\ndouble lati\n```",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (55)' in 230ms.
Result:
{
"range": {
"end": {
"character": 38,
"line": 96
},
"start": {
"character": 32,
"line": 96
}
},
"contents": {
"value": "```dart\nabstract class double extends num\n```\n*dart.core*\n\n---\nA double-precision floating point number.\n\nRepresentation of Dart doubles containing double specific constants\nand operations and specializations of operations inherited from\n[num]. Dart doubles are 64-bit floating-point numbers as specified in the\nIEEE 754 standard.\n\nThe [double] type is contagious. Operations on [double]s return\n[double] results.\n\nIt is a compile-time error for a class to attempt to extend or implement\ndouble.",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (56)' in 231ms.
Result:
{
"range": {
"end": {
"character": 43,
"line": 96
},
"start": {
"character": 39,
"line": 96
}
},
"contents": {
"value": "```dart\ndouble long\n```",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (57)' in 232ms.
Result:
{
"range": {
"end": {
"character": 50,
"line": 96
},
"start": {
"character": 46,
"line": 96
}
},
"contents": {
"value": "```dart\nclass bool\n```\n*dart.core*\n\n---\nThe reserved words `true` and `false` denote objects that are the only two\ninstances of this class.\n\nIt is a compile-time error for a class to attempt to extend or implement\nbool.",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (58)' in 233ms.
Result:
{
"range": {
"end": {
"character": 58,
"line": 96
},
"start": {
"character": 51,
"line": 96
}
},
"contents": {
"value": "```dart\n[bool weather = true]\n```",
"kind": "markdown"
}
}
[Trace - 12:34:53 PM]
Received response 'textDocument/hover - (59)' in 233ms.
Result:
null
[Trace - 12:34:53 PM]
Sending request 'textDocument/hover - (61)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 0
}
}
[Trace - 12:34:53 PM]
Sending request 'textDocument/signatureHelp - (62)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 0
}
}
[Trace - 12:34:54 PM]
Received response 'textDocument/hover - (60)' in 337ms.
Result:
{
"range": {
"end": {
"character": 65,
"line": 96
},
"start": {
"character": 61,
"line": 96
}
},
"contents": {
"value": "",
"kind": "markdown"
}
}
[Trace - 12:34:54 PM]
Received response 'textDocument/hover - (61)' in 52ms.
Result:
null
[Trace - 12:34:54 PM]
Received response 'textDocument/signatureHelp - (62)' in 51ms.
Result:
null
[Trace - 12:34:54 PM]
Sending request 'textDocument/codeAction - (63)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 95,
"character": 0
},
"end": {
"line": 95,
"character": 0
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:54 PM]
Received response 'textDocument/codeAction - (63)' in 42ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
}
]
[Trace - 12:34:54 PM]
Sending request 'textDocument/hover - (64)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 95,
"character": 0
}
}
[Trace - 12:34:54 PM]
Sending request 'textDocument/signatureHelp - (65)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 95,
"character": 0
}
}
[Trace - 12:34:54 PM]
Received response 'textDocument/hover - (64)' in 91ms.
Result:
null
[Trace - 12:34:54 PM]
Received response 'textDocument/signatureHelp - (65)' in 89ms.
Result:
null
[Trace - 12:34:54 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 1
},
"contentChanges": [
{
"range": {
"start": {
"line": 94,
"character": 3
},
"end": {
"line": 94,
"character": 3
}
},
"rangeLength": 0,
"text": "\n"
}
]
}
[Trace - 12:34:54 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 2
},
"contentChanges": [
{
"range": {
"start": {
"line": 95,
"character": 0
},
"end": {
"line": 95,
"character": 0
}
},
"rangeLength": 0,
"text": " "
}
]
}
[Trace - 12:34:54 PM]
Received notification '$/analyzerStatus'.
Params:
{
"isAnalyzing": true
}
[Trace - 12:34:55 PM]
Received notification 'textDocument/publishDiagnostics'.
Params:
{
"diagnostics": [
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 14,
"line": 143
},
"start": {
"character": 9,
"line": 143
}
}
},
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 16,
"line": 136
},
"start": {
"character": 9,
"line": 136
}
}
}
],
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
}
[Trace - 12:34:55 PM]
Sending request 'textDocument/codeAction - (66)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 95,
"character": 0
},
"end": {
"line": 95,
"character": 2
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:55 PM]
Received notification '$/analyzerStatus'.
Params:
{
"isAnalyzing": null
}
[Trace - 12:34:55 PM]
Received response 'textDocument/codeAction - (66)' in 54ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
}
]
[Trace - 12:34:55 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 3
},
"contentChanges": [
{
"range": {
"start": {
"line": 95,
"character": 0
},
"end": {
"line": 95,
"character": 2
}
},
"rangeLength": 2,
"text": ""
}
]
}
[Trace - 12:34:55 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 4
},
"contentChanges": [
{
"range": {
"start": {
"line": 95,
"character": 0
},
"end": {
"line": 95,
"character": 0
}
},
"rangeLength": 0,
"text": "\n"
}
]
}
[Trace - 12:34:55 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 5
},
"contentChanges": [
{
"range": {
"start": {
"line": 95,
"character": 0
},
"end": {
"line": 95,
"character": 0
}
},
"rangeLength": 0,
"text": " "
}
]
}
[Trace - 12:34:55 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 6
},
"contentChanges": [
{
"range": {
"start": {
"line": 95,
"character": 0
},
"end": {
"line": 95,
"character": 2
}
},
"rangeLength": 2,
"text": ""
}
]
}
[Trace - 12:34:55 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 7
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 0
},
"end": {
"line": 96,
"character": 0
}
},
"rangeLength": 0,
"text": " "
}
]
}
[Trace - 12:34:55 PM]
Received notification '$/analyzerStatus'.
Params:
{
"isAnalyzing": true
}
[Trace - 12:34:55 PM]
Received notification 'textDocument/publishDiagnostics'.
Params:
{
"diagnostics": [
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 14,
"line": 144
},
"start": {
"character": 9,
"line": 144
}
}
},
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 16,
"line": 137
},
"start": {
"character": 9,
"line": 137
}
}
}
],
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
}
[Trace - 12:34:55 PM]
Received notification '$/analyzerStatus'.
Params:
{
"isAnalyzing": null
}
[Trace - 12:34:55 PM]
Sending request 'textDocument/codeAction - (67)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 96,
"character": 0
},
"end": {
"line": 96,
"character": 2
}
},
"context": {
"diagnostics": []
}
}
[Trace - 12:34:55 PM]
Received response 'textDocument/codeAction - (67)' in 36ms.
Result:
[
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.sortMembers",
"title": "Sort Members"
},
"kind": "source.sortMembers",
"title": "Sort Members"
},
{
"command": {
"arguments": [
"/Users/s04407/OSS/flutter_compass/lib/main.dart"
],
"command": "edit.organizeImports",
"title": "Organize Imports"
},
"kind": "source.organizeImports",
"title": "Organize Imports"
}
]
[Trace - 12:34:55 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 8
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 2
},
"end": {
"line": 96,
"character": 2
}
},
"rangeLength": 0,
"text": "v"
}
]
}
[Trace - 12:34:55 PM]
Received notification '$/analyzerStatus'.
Params:
{
"isAnalyzing": true
}
[Trace - 12:34:55 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 9
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 3
},
"end": {
"line": 96,
"character": 3
}
},
"rangeLength": 0,
"text": "o"
}
]
}
[Trace - 12:34:55 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 10
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 4
},
"end": {
"line": 96,
"character": 4
}
},
"rangeLength": 0,
"text": "i"
}
]
}
[Trace - 12:34:55 PM]
Received notification 'textDocument/publishDiagnostics'.
Params:
{
"diagnostics": [
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 16,
"line": 137
},
"start": {
"character": 9,
"line": 137
}
}
},
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 14,
"line": 144
},
"start": {
"character": 9,
"line": 144
}
}
},
{
"message": "Variables must be declared using the keywords 'const', 'final', 'var' or a type name.",
"source": "dart",
"code": "missing_const_final_var_or_type",
"severity": 1,
"range": {
"end": {
"character": 3,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
{
"message": "Expected to find ';'.",
"source": "dart",
"code": "expected_token",
"severity": 1,
"range": {
"end": {
"character": 3,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
}
],
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
}
[Trace - 12:34:55 PM]
Received notification 'textDocument/publishDiagnostics'.
Params:
{
"diagnostics": [
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 16,
"line": 137
},
"start": {
"character": 9,
"line": 137
}
}
},
{
"message": "Name non-constant identifiers using lowerCamelCase.",
"source": "dart",
"code": "non_constant_identifier_names",
"severity": 3,
"range": {
"end": {
"character": 14,
"line": 144
},
"start": {
"character": 9,
"line": 144
}
}
},
{
"message": "Variables must be declared using the keywords 'const', 'final', 'var' or a type name.",
"source": "dart",
"code": "missing_const_final_var_or_type",
"severity": 1,
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
{
"message": "Expected to find ';'.",
"source": "dart",
"code": "expected_token",
"severity": 1,
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
}
],
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
}
[Trace - 12:34:55 PM]
Received notification '$/analyzerStatus'.
Params:
{
"isAnalyzing": null
}
[Trace - 12:34:56 PM]
Sending request 'textDocument/completion - (68)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 5
},
"context": {
"triggerKind": 1
}
}
[Trace - 12:34:56 PM]
Sending request 'textDocument/codeAction - (69)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"range": {
"start": {
"line": 96,
"character": 0
},
"end": {
"line": 96,
"character": 5
}
},
"context": {
"diagnostics": [
{
"message": "Variables must be declared using the keywords 'const', 'final', 'var' or a type name.",
"source": "dart",
"code": "missing_const_final_var_or_type",
"severity": 1,
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
{
"message": "Expected to find ';'.",
"source": "dart",
"code": "expected_token",
"severity": 1,
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
}
]
}
}
[Trace - 12:34:56 PM]
Sending request 'textDocument/hover - (70)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 2
}
}
[Trace - 12:34:56 PM]
Sending request 'textDocument/documentHighlight - (71)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 5
}
}
[Trace - 12:34:56 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 11
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 5
},
"end": {
"line": 96,
"character": 5
}
},
"rangeLength": 0,
"text": "d"
}
]
}
[Trace - 12:34:56 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 12
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 6
},
"end": {
"line": 96,
"character": 6
}
},
"rangeLength": 0,
"text": " "
}
]
}
[Trace - 12:34:56 PM]
Sending request 'textDocument/documentHighlight - (72)'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"position": {
"line": 96,
"character": 7
}
}
[Trace - 12:34:56 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 13
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 7
},
"end": {
"line": 96,
"character": 7
}
},
"rangeLength": 0,
"text": "c"
}
]
}
[Trace - 12:34:56 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 14
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 8
},
"end": {
"line": 96,
"character": 8
}
},
"rangeLength": 0,
"text": "a"
}
]
}
[Trace - 12:34:56 PM]
Sending notification 'textDocument/didChange'.
Params:
{
"textDocument": {
"uri": "file:///Users/s04407/OSS/flutter_compass/lib/main.dart",
"version": 15
},
"contentChanges": [
{
"range": {
"start": {
"line": 96,
"character": 9
},
"end": {
"line": 96,
"character": 9
}
},
"rangeLength": 0,
"text": "l"
}
]
}
[Trace - 12:34:57 PM]
Received response 'textDocument/completion - (68)' in 759ms.
Result:
[
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "const",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "const"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "covariant",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "covariant"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "dynamic",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "dynamic"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "factory",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "factory"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "final",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "final"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "get",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "get"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "operator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "operator"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "set",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "set"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "static",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "static"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "var",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "var"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "void",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998945",
"preselect": null,
"detail": "",
"kind": 14,
"label": "void"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "http",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999000",
"preselect": null,
"detail": "",
"kind": 9,
"label": "http"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Anim",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999000",
"preselect": null,
"detail": "",
"kind": 7,
"label": "Anim"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AniControler",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999000",
"preselect": null,
"detail": "",
"kind": 7,
"label": "AniControler"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "HomePage",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999000",
"preselect": null,
"detail": "",
"kind": 7,
"label": "HomePage"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "_HomePageState",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999000",
"preselect": null,
"detail": "",
"kind": 7,
"label": "_HomePageState"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n void didUpdateWidget(HomePage oldWidget) {\n // TODO: implement didUpdateWidget\n super.didUpdateWidget(oldWidget);\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "(T oldWidget) → void",
"kind": 2,
"label": "didUpdateWidget(HomePage oldWidget) { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n void reassemble() {\n // TODO: implement reassemble\n super.reassemble();\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "() → void",
"kind": 2,
"label": "reassemble() { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n void setState(fn) {\n // TODO: implement setState\n super.setState(fn);\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "(() → void fn) → void",
"kind": 2,
"label": "setState(fn) { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n void deactivate() {\n // TODO: implement deactivate\n super.deactivate();\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "() → void",
"kind": 2,
"label": "deactivate() { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n void dispose() {\n // TODO: implement dispose\n super.dispose();\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "() → void",
"kind": 2,
"label": "dispose() { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n void didChangeDependencies() {\n // TODO: implement didChangeDependencies\n super.didChangeDependencies();\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "() → void",
"kind": 2,
"label": "didChangeDependencies() { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n // TODO: implement widget\n HomePage get widget => super.widget;",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "T",
"kind": 10,
"label": "widget => …"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n // TODO: implement context\n BuildContext get context => super.context;",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "BuildContext",
"kind": 10,
"label": "context => …"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n // TODO: implement mounted\n bool get mounted => super.mounted;",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "bool",
"kind": 10,
"label": "mounted => …"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n String toStringShort() {\n // TODO: implement toStringShort\n return super.toStringShort();\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "() → String",
"kind": 2,
"label": "toStringShort() { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n String toString({DiagnosticLevel minLevel = DiagnosticLevel.debug}) {\n // TODO: implement toString\n return super.toString(minLevel);\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "({DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String",
"kind": 2,
"label": "toString({DiagnosticLevel minLevel = DiagnosticLevel.debug}) { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n bool operator ==(other) {\n // TODO: implement ==\n return super.==(other);\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "(dynamic other) → bool",
"kind": 2,
"label": "==(other) { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n noSuchMethod(Invocation invocation) {\n // TODO: implement noSuchMethod\n return super.noSuchMethod(invocation);\n }",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "(Invocation invocation) → dynamic",
"kind": 2,
"label": "noSuchMethod(Invocation invocation) { … }"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n // TODO: implement hashCode\n int get hashCode => super.hashCode;",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "int",
"kind": 10,
"label": "hashCode => …"
},
{
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "@override\n // TODO: implement runtimeType\n Type get runtimeType => super.runtimeType;",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "998000",
"preselect": null,
"detail": "Type",
"kind": 10,
"label": "runtimeType => …"
},
{
"data": {
"autoImportDisplayUri": "package:flutter_compass/flutter_compass.dart",
"libraryId": 548,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlutterCompass",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "[FlutterCompass] is a singleton class that provides assess to compass events\nThe heading varies from 0-360, 0 being north.",
"detail": "",
"kind": 7,
"label": "FlutterCompass"
},
{
"data": {
"autoImportDisplayUri": "package:location/location.dart",
"libraryId": 547,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LocationAccuracy",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest\nhttps://developer.apple.com/documentation/corelocation/cllocationaccuracy?language=objc\nPrecision of the Location",
"detail": "",
"kind": 13,
"label": "LocationAccuracy"
},
{
"data": {
"autoImportDisplayUri": "package:location/location.dart",
"libraryId": 547,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LocationData",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A data class that contains various information about the user's location.\n\nspeedAccuracy cannot be provided on iOS and thus is always 0.",
"detail": "",
"kind": 7,
"label": "LocationData"
},
{
"data": {
"autoImportDisplayUri": "package:location/location.dart",
"libraryId": 547,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Location",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"detail": "",
"kind": 7,
"label": "Location"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DecorationPosition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Where to paint a box decoration.",
"detail": "",
"kind": 13,
"label": "DecorationPosition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedTheme",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [Theme] which automatically transitions the colors,\netc, over a given duration whenever the given theme changes.\n\nHere's an illustration of what using this widget looks like, using a [curve]\nof [Curves.elasticInOut].\n\nSee also:\n\n * [Theme], which [AnimatedTheme] uses to actually apply the interpolated\n theme.\n * [ThemeData], which describes the actual configuration of a theme.\n * [MaterialApp], which includes an [AnimatedTheme] widget configured via\n the [MaterialApp.theme] argument.",
"detail": "",
"kind": 7,
"label": "AnimatedTheme"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollContext",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface that [Scrollable] widgets implement in order to use\n[ScrollPosition].\n\nSee also:\n\n * [ScrollableState], which is the most common implementation of this\n interface.\n * [ScrollPosition], which uses this interface to communicate with the\n scrollable widget.",
"detail": "",
"kind": 7,
"label": "ScrollContext"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FractionalTranslation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Applies a translation transformation before painting its child.\n\nThe translation is expressed as a [Offset] scaled to the child's size. For\nexample, an [Offset] with a `dx` of 0.25 will result in a horizontal\ntranslation of one quarter the width of the child.\n\nHit tests will only be detected inside the bounds of the\n[FractionalTranslation], even if the contents are offset such that\nthey overflow.\n\nSee also:\n\n * [Transform], which applies an arbitrary transform to its child widget at\n paint time.\n * [new Transform.translate], which applies an absolute offset translation\n transformation instead of an offset scaled to the child.\n * The [catalog of layout widgets](https://flutter.dev/widgets/layout/).",
"detail": "",
"kind": 7,
"label": "FractionalTranslation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RenderObject",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An object in the render tree.\n\nThe [RenderObject] class hierarchy is the core of the rendering\nlibrary's reason for being.\n\n[RenderObject]s have a [parent], and have a slot called [parentData] in\nwhich the parent [RenderObject] can store child-specific data, for example,\nthe child position. The [RenderObject] class also implements the basic\nlayout and paint protocols.\n\nThe [RenderObject] class, however, does not define a child model (e.g.\nwhether a node has zero, one, or more children). It also doesn't define a\ncoordinate system (e.g. whether children are positioned in Cartesian\ncoordinates, in polar coordinates, etc) or a specific layout protocol (e.g.\nwhether the layout is width-in-height-out, or constraint-in-size-out, or\nwhether the parent sets the size and position of the child before or after\nthe child lays out, etc; or indeed whether the children are allowed to read\ntheir parent's [parentData] slot).\n\nThe [RenderBox] subclass introduces the opinion that the layout\nsystem uses Cartesian coordinates.\n\n## Writing a RenderObject subclass\n\nIn most cases, subclassing [RenderObject] itself is overkill, and\n[RenderBox] would be a better starting point. However, if a render object\ndoesn't want to use a Cartesian coordinate system, then it should indeed\ninherit from [RenderObject] directly. This allows it to define its own\nlayout protocol by using a new subclass of [Constraints] rather than using\n[BoxConstraints], and by potentially using an entirely new set of objects\nand values to represent the result of the output rather than just a [Size].\nThis increased flexibility comes at the cost of not being able to rely on\nthe features of [RenderBox]. For example, [RenderBox] implements an\nintrinsic sizing protocol that allows you to measure a child without fully\nlaying it out, in such a way that if that child changes size, the parent\nwill be laid out again (to take into account the new dimensions of the\nchild). This is a subtle and bug-prone feature to get right.\n\nMost aspects of writing a [RenderBox] apply to writing a [RenderObject] as\nwell, and therefore the discussion at [RenderBox] is recommended background\nreading. The main differences are around layout and hit testing, since those\nare the aspects that [RenderBox] primarily specializes.\n\n### Layout\n\nA layout protocol begins with a subclass of [Constraints]. See the\ndiscussion at [Constraints] for more information on how to write a\n[Constraints] subclass.\n\nThe [performLayout] method should take the [constraints], and apply them.\nThe output of the layout algorithm is fields set on the object that describe\nthe geometry of the object for the purposes of the parent's layout. For\nexample, with [RenderBox] the output is the [RenderBox.size] field. This\noutput should only be read by the parent if the parent specified\n`parentUsesSize` as true when calling [layout] on the child.\n\nAnytime anything changes on a render object that would affect the layout of\nthat object, it should call [markNeedsLayout].\n\n### Hit Testing\n\nHit testing is even more open-ended than layout. There is no method to\noverride, you are expected to provide one.\n\nThe general behavior of your hit-testing method should be similar to the\nbehavior described for [RenderBox]. The main difference is that the input\nneed not be an [Offset]. You are also allowed to use a different subclass of\n[HitTestEntry] when adding entries to the [HitTestResult]. When the\n[handleEvent] method is called, the same object that was added to the\n[HitTestResult] will be passed in, so it can be used to track information\nlike the precise coordinate of the hit, in whatever coordinate system is\nused by the new layout protocol.\n\n### Adapting from one protocol to another\n\nIn general, the root of a Flutter render object tree is a [RenderView]. This\nobject has a single child, which must be a [RenderBox]. Thus, if you want to\nhave a custom [RenderObject] subclass in the render tree, you have two\nchoices: you either need to replace the [RenderView] itself, or you need to\nhave a [RenderBox] that has your class as its child. (The latter is the much\nmore common case.)\n\nThis [RenderBox] subclass converts from the box protocol to the protocol of\nyour class.\n\nIn particular, this means that for hit testing it overrides\n[RenderBox.hitTest], and calls whatever method you have in your class for\nhit testing.\n\nSimilarly, it overrides [performLayout] to create a [Constraints] object\nappropriate for your class and passes that to the child's [layout] method.\n\n### Layout interactions between render objects\n\nIn general, the layout of a render object should only depend on the output of\nits child's layout, and then only if `parentUsesSize` is set to true in the\n[layout] call. Furthermore, if it is set to true, the parent must call the\nchild's [layout] if the child is to be rendered, because otherwise the\nparent will not be notified when the child changes its layout outputs.\n\nIt is possible to set up render object protocols that transfer additional\ninformation. For example, in the [RenderBox] protocol you can query your\nchildren's intrinsic dimensions and baseline geometry. However, if this is\ndone then it is imperative that the child call [markNeedsLayout] on the\nparent any time that additional information changes, if the parent used it\nin the last layout phase. For an example of how to implement this, see the\n[RenderBox.markNeedsLayout] method. It overrides\n[RenderObject.markNeedsLayout] so that if a parent has queried the intrinsic\nor baseline information, it gets marked dirty whenever the child's geometry\nchanges.",
"detail": "",
"kind": 7,
"label": "RenderObject"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AbsorbPointer",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that absorbs pointers during hit testing.\n\nWhen [absorbing] is true, this widget prevents its subtree from receiving\npointer events by terminating hit testing at itself. It still consumes space\nduring layout and paints its child as usual. It just prevents its children\nfrom being the target of located events, because it returns true from\n[RenderBox.hitTest].\n\n\nSee also:\n\n * [IgnorePointer], which also prevents its children from receiving pointer\n events but is itself invisible to hit testing.",
"detail": "",
"kind": 7,
"label": "AbsorbPointer"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollableState",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "State object for a [Scrollable] widget.\n\nTo manipulate a [Scrollable] widget's scroll position, use the object\nobtained from the [position] property.\n\nTo be informed of when a [Scrollable] widget is scrolling, use a\n[NotificationListener] to listen for [ScrollNotification] notifications.\n\nThis class is not intended to be subclassed. To specialize the behavior of a\n[Scrollable], provide it with a [ScrollPhysics].",
"detail": "",
"kind": 7,
"label": "ScrollableState"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Tween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A linear interpolation between a beginning and ending value.\n\n[Tween] is useful if you want to interpolate across a range.\n\nTo use a [Tween] object with an animation, call the [Tween] object's\n[animate] method and pass it the [Animation] object that you want to\nmodify.\n\nYou can chain [Tween] objects together using the [chain] method, so that a\nsingle [Animation] object is configured by multiple [Tween] objects called\nin succession. This is different than calling the [animate] method twice,\nwhich results in two separate [Animation] objects, each configured with a\nsingle [Tween].\n\n\nSuppose `_controller` is an [AnimationController], and we want to create an\n[Animation<Offset>] that is controlled by that controller, and save it in\n`_animation`. Here are two possible ways of expressing this:\n\n```dart\n_animation = _controller.drive(\n Tween<Offset>(\n begin: const Offset(100.0, 50.0),\n end: const Offset(200.0, 300.0),\n ),\n);\n```\n\n```dart\n_animation = Tween<Offset>(\n begin: const Offset(100.0, 50.0),\n end: const Offset(200.0, 300.0),\n).animate(_controller);\n```\n\nIn both cases, the `_animation` variable holds an object that, over the\nlifetime of the `_controller`'s animation, returns a value\n(`_animation.value`) that depicts a point along the line between the two\noffsets above. If we used a [MaterialPointArcTween] instead of a\n[Tween<Offset>] in the code above, the points would follow a pleasing curve\ninstead of a straight line, with no other changes necessary.\n\n## Performance optimizations\n\nTweens are mutable; specifically, their [begin] and [end] values can be\nchanged at runtime. An object created with [Animation.drive] using a [Tween]\nwill immediately honor changes to that underlying [Tween] (though the\nlisteners will only be triggered if the [Animation] is actively animating).\nThis can be used to change an animation on the fly without having to\nrecreate all the objects in the chain from the [AnimationController] to the\nfinal [Tween].\n\nIf a [Tween]'s values are never changed, however, a further optimization can\nbe applied: the object can be stored in a `static final` variable, so that\nthe exact same instance is used whenever the [Tween] is needed. This is\npreferable to creating an identical [Tween] afresh each time a [State.build]\nmethod is called, for example.\n\n## Types with special considerations\n\nClasses with [lerp] static methods typically have corresponding dedicated\n[Tween] subclasses that call that method. For example, [ColorTween] uses\n[Color.lerp] to implement the [ColorTween.lerp] method.\n\nTypes that define `+` and `-` operators to combine values (`T + T → T` and\n`T - T → T`) and an `*` operator to scale by multiplying with a double (`T *\ndouble → T`) can be directly used with `Tween<T>`.\n\nThis does not extend to any type with `+`, `-`, and `*` operators. In\nparticular, [int] does not satisfy this precise contract (`int * double`\nactually returns [num], not [int]). There are therefore two specific classes\nthat can be used to interpolate integers:\n\n * [IntTween], which is an approximation of a linear interpolation (using\n [double.round]).\n * [StepTween], which uses [double.floor] to ensure that the result is\n never greater than it would be using if a `Tween<double>`.\n\nThe relevant operators on [Size] also don't fulfill this contract, so\n[SizeTween] uses [Size.lerp].\n\nIn addition, some of the types that _do_ have suitable `+`, `-`, and `*`\noperators still have dedicated [Tween] subclasses that perform the\ninterpolation in a more specialized manner. One such class is\n[MaterialPointArcTween], which is mentioned above. The [AlignmentTween], and\n[AlignmentGeometryTween], and [FractionalOffsetTween] are another group of\n[Tween]s that use dedicated `lerp` methods instead of merely relying on the\noperators (in particular, this allows them to handle null values in a more\nuseful manner).",
"detail": "",
"kind": 7,
"label": "Tween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RelativePositionedTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [Positioned] which transitions the child's position\nbased on the value of [rect] relative to a bounding box with the\nspecified [size].\n\nOnly works if it's the child of a [Stack].\n\nHere's an illustration of the [RelativePositionedTransition] widget, with it's [rect]\nanimated by a [CurvedAnimation] set to [Curves.elasticInOut]:\n\nSee also:\n\n * [PositionedTransition], a widget that animates its child from a start\n position to an end position over the lifetime of the animation.\n * [AlignTransition], an animated version of an [Align] that animates its\n [Align.alignment] property.\n * [ScaleTransition], a widget that animates the scale of a transformed\n widget.\n * [SizeTransition], a widget that animates its own size and clips and\n aligns its child.\n * [SlideTransition], a widget that animates the position of a widget\n relative to its normal position.",
"detail": "",
"kind": 7,
"label": "RelativePositionedTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GrowthDirection",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The direction in which a sliver's contents are ordered, relative to the\nscroll offset axis.\n\nFor example, a vertical alphabetical list that is going [AxisDirection.down]\nwith a [GrowthDirection.forward] would have the A at the top and the Z at\nthe bottom, with the A adjacent to the origin, as would such a list going\n[AxisDirection.up] with a [GrowthDirection.reverse]. On the other hand, a\nvertical alphabetical list that is going [AxisDirection.down] with a\n[GrowthDirection.reverse] would have the Z at the top (at scroll offset\nzero) and the A below it.",
"detail": "",
"kind": 13,
"label": "GrowthDirection"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ValueWidgetBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Builds a [Widget] when given a concrete value of a [ValueListenable<T>].\n\nIf the `child` parameter provided to the [ValueListenableBuilder] is not\nnull, the same `child` widget is passed back to this [ValueWidgetBuilder]\nand should typically be incorporated in the returned widget tree.\n\nSee also:\n\n * [ValueListenableBuilder], a widget which invokes this builder each time\n a [ValueListenable] changes value.",
"detail": "(BuildContext context, T value, Widget child) → Widget",
"kind": 7,
"label": "ValueWidgetBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Texture",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A rectangle upon which a backend texture is mapped.\n\nBackend textures are images that can be applied (mapped) to an area of the\nFlutter view. They are created, managed, and updated using a\nplatform-specific texture registry. This is typically done by a plugin\nthat integrates with host platform video player, camera, or OpenGL APIs,\nor similar image sources.\n\nA texture widget refers to its backend texture using an integer ID. Texture\nIDs are obtained from the texture registry and are scoped to the Flutter\nview. Texture IDs may be reused after deregistration, at the discretion\nof the registry. The use of texture IDs currently unknown to the registry\nwill silently result in a blank rectangle.\n\nTexture widgets are repainted autonomously as dictated by the backend (e.g.\non arrival of a video frame). Such repainting generally does not involve\nexecuting Dart code.\n\nThe size of the rectangle is determined by its parent widget, and the\ntexture is automatically scaled to fit.\n\nSee also:\n\n * <https://docs.flutter.io/javadoc/io/flutter/view/TextureRegistry.html>\n for how to create and manage backend textures on Android.\n * <https://docs.flutter.io/objcdoc/Protocols/FlutterTextureRegistry.html>\n for how to create and manage backend textures on iOS.",
"detail": "",
"kind": 7,
"label": "Texture"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Brightness",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Describes the contrast of a theme or color palette.",
"detail": "",
"kind": 13,
"label": "Brightness"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RoutePredicate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the [Navigator.popUntil] predicate argument.",
"detail": "(Route<dynamic> route) → bool",
"kind": 7,
"label": "RoutePredicate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ValueNotifier",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [ChangeNotifier] that holds a single value.\n\nWhen [value] is replaced with something that is not equal to the old\nvalue as evaluated by the equality operator ==, this class notifies its\nlisteners.",
"detail": "",
"kind": 7,
"label": "ValueNotifier"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AlignmentDirectional",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An offset that's expressed as a fraction of a [Size], but whose horizontal\ncomponent is dependent on the writing direction.\n\nThis can be used to indicate an offset from the left in [TextDirection.ltr]\ntext and an offset from the right in [TextDirection.rtl] text without having\nto be aware of the current text direction.\n\nSee also:\n\n * [Alignment], a variant that is defined in physical terms (i.e.\n whose horizontal component does not depend on the text direction).",
"detail": "",
"kind": 7,
"label": "AlignmentDirectional"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AlwaysStoppedAnimation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An animation that is always stopped at a given value.\n\nThe [status] is always [AnimationStatus.forward].",
"detail": "",
"kind": 7,
"label": "AlwaysStoppedAnimation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ImageInfo",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [dart:ui.Image] object with its corresponding scale.\n\nImageInfo objects are used by [ImageStream] objects to represent the\nactual data of the image once it has been obtained.",
"detail": "",
"kind": 7,
"label": "ImageInfo"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PrimaryScrollController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Associates a [ScrollController] with a subtree.\n\nWhen a [ScrollView] has [ScrollView.primary] set to true and is not given\nan explicit [ScrollController], the [ScrollView] uses [of] to find the\n[ScrollController] associated with its subtree.\n\nThis mechanism can be used to provide default behavior for scroll views in a\nsubtree. For example, the [Scaffold] uses this mechanism to implement the\nscroll-to-top gesture on iOS.",
"detail": "",
"kind": 7,
"label": "PrimaryScrollController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MetaData",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Holds opaque meta data in the render tree.\n\nUseful for decorating the render tree with information that will be consumed\nlater. For example, you could store information in the render tree that will\nbe used when the user interacts with the render tree but has no visual\nimpact prior to the interaction.",
"detail": "",
"kind": 7,
"label": "MetaData"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "HourFormat",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Describes how hours are formatted.",
"detail": "",
"kind": 13,
"label": "HourFormat"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DefaultMaterialLocalizations",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "US English strings for the material widgets.\n\nSee also:\n\n * [GlobalMaterialLocalizations], which provides material localizations for\n many languages.\n * [MaterialApp.delegates], which automatically includes\n [DefaultMaterialLocalizations.delegate] by default.",
"detail": "",
"kind": 7,
"label": "DefaultMaterialLocalizations"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Element",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An instantiation of a [Widget] at a particular location in the tree.\n\nWidgets describe how to configure a subtree but the same widget can be used\nto configure multiple subtrees simultaneously because widgets are immutable.\nAn [Element] represents the use of a widget to configure a specific location\nin the tree. Over time, the widget associated with a given element can\nchange, for example, if the parent widget rebuilds and creates a new widget\nfor this location.\n\nElements form a tree. Most elements have a unique child, but some widgets\n(e.g., subclasses of [RenderObjectElement]) can have multiple children.\n\nElements have the following lifecycle:\n\n * The framework creates an element by calling [Widget.createElement] on the\n widget that will be used as the element's initial configuration.\n * The framework calls [mount] to add the newly created element to the tree\n at a given slot in a given parent. The [mount] method is responsible for\n inflating any child widgets and calling [attachRenderObject] as\n necessary to attach any associated render objects to the render tree.\n * At this point, the element is considered \"active\" and might appear on\n screen.\n * At some point, the parent might decide to change the widget used to\n configure this element, for example because the parent rebuilt with new\n state. When this happens, the framework will call [update] with the new\n widget. The new widget will always have the same [runtimeType] and key as\n old widget. If the parent wishes to change the [runtimeType] or key of\n the widget at this location in the tree, can do so by unmounting this\n element and inflating the new widget at this location.\n * At some point, an ancestor might decide to remove this element (or an\n intermediate ancestor) from the tree, which the ancestor does by calling\n [deactivateChild] on itself. Deactivating the intermediate ancestor will\n remove that element's render object from the render tree and add this\n element to the [owner]'s list of inactive elements, causing the framework\n to call [deactivate] on this element.\n * At this point, the element is considered \"inactive\" and will not appear\n on screen. An element can remain in the inactive state only until\n the end of the current animation frame. At the end of the animation\n frame, any elements that are still inactive will be unmounted.\n * If the element gets reincorporated into the tree (e.g., because it or one\n of its ancestors has a global key that is reused), the framework will\n remove the element from the [owner]'s list of inactive elements, call\n [activate] on the element, and reattach the element's render object to\n the render tree. (At this point, the element is again considered \"active\"\n and might appear on screen.)\n * If the element does not get reincorporated into the tree by the end of\n the current animation frame, the framework will call [unmount] on the\n element.\n * At this point, the element is considered \"defunct\" and will not be\n incorporated into the tree in the future.",
"detail": "",
"kind": 7,
"label": "Element"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InspectorSelection",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Mutable selection state of the inspector.",
"detail": "",
"kind": 7,
"label": "InspectorSelection"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FormState",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "State associated with a [Form] widget.\n\nA [FormState] object can be used to [save], [reset], and [validate] every\n[FormField] that is a descendant of the associated [Form].\n\nTypically obtained via [Form.of].",
"detail": "",
"kind": 7,
"label": "FormState"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OutlineInputBorder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Draws a rounded rectangle around an [InputDecorator]'s container.\n\nWhen the input decorator's label is floating, for example because its\ninput child has the focus, the label appears in a gap in the border outline.\n\nThe input decorator's \"container\" is the optionally filled area above the\ndecorator's helper, error, and counter.\n\nSee also:\n\n * [UnderlineInputBorder], the default [InputDecorator] border which\n draws a horizontal line at the bottom of the input decorator's container.\n * [InputDecoration], which is used to configure an [InputDecorator].",
"detail": "",
"kind": 7,
"label": "OutlineInputBorder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverPersistentHeaderDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Delegate for configuring a [SliverPersistentHeader].",
"detail": "",
"kind": 7,
"label": "SliverPersistentHeaderDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FocusNode",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A leaf node in the focus tree that can receive focus.\n\nThe focus tree keeps track of which widget is the user's current focus. The\nfocused widget often listens for keyboard events.\n\nTo request focus, find the [FocusScopeNode] for the current [BuildContext]\nand call the [FocusScopeNode.requestFocus] method:\n\n```dart\nFocusScope.of(context).requestFocus(focusNode);\n```\n\nIf your widget requests focus, be sure to call\n`FocusScope.of(context).reparentIfNeeded(focusNode);` in your `build`\nmethod to reparent your [FocusNode] if your widget moves from one\nlocation in the tree to another.\n\n## Lifetime\n\nFocus nodes are long-lived objects. For example, if a stateful widget has a\nfocusable child widget, it should create a [FocusNode] in the\n[State.initState] method, and [dispose] it in the [State.dispose] method,\nproviding the same [FocusNode] to the focusable child each time the\n[State.build] method is run. In particular, creating a [FocusNode] each time\n[State.build] is invoked will cause the focus to be lost each time the\nwidget is built.\n\nSee also:\n\n * [FocusScopeNode], which is an interior node in the focus tree.\n * [FocusScope.of], which provides the [FocusScopeNode] for a given\n [BuildContext].",
"detail": "",
"kind": 7,
"label": "FocusNode"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FilterChip",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design filter chip.\n\nFilter chips use tags or descriptive words as a way to filter content.\n\nFilter chips are a good alternative to [Checkbox] or [Switch] widgets.\nUnlike these alternatives, filter chips allow for clearly delineated and\nexposed options in a compact area.\n\nRequires one of its ancestors to be a [Material] widget.\n\n\n```dart\nclass ActorFilterEntry {\n const ActorFilterEntry(this.name, this.initials);\n final String name;\n final String initials;\n}\n\nclass CastFilter extends StatefulWidget {\n @override\n State createState() => CastFilterState();\n}\n\nclass CastFilterState extends State<CastFilter> {\n final List<ActorFilterEntry> _cast = <ActorFilterEntry>[\n const ActorFilterEntry('Aaron Burr', 'AB'),\n const ActorFilterEntry('Alexander Hamilton', 'AH'),\n const ActorFilterEntry('Eliza Hamilton', 'EH'),\n const ActorFilterEntry('James Madison', 'JM'),\n ];\n List<String> _filters = <String>[];\n\n Iterable<Widget> get actorWidgets sync* {\n for (ActorFilterEntry actor in _cast) {\n yield Padding(\n padding: const EdgeInsets.all(4.0),\n child: FilterChip(\n avatar: CircleAvatar(child: Text(actor.initials)),\n label: Text(actor.name),\n selected: _filters.contains(actor.name),\n onSelected: (bool value) {\n setState(() {\n if (value) {\n _filters.add(actor.name);\n } else {\n _filters.removeWhere((String name) {\n return name == actor.name;\n });\n }\n });\n },\n ),\n );\n }\n }\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: <Widget>[\n Wrap(\n children: actorWidgets.toList(),\n ),\n Text('Look for: ${_filters.join(', ')}'),\n ],\n );\n }\n}\n```\n\nSee also:\n\n * [Chip], a chip that displays information and can be deleted.\n * [InputChip], a chip that represents a complex piece of information, such\n as an entity (person, place, or thing) or conversational text, in a\n compact form.\n * [ChoiceChip], allows a single selection from a set of options. Choice\n chips contain related descriptive text or categories.\n * [ActionChip], represents an action related to primary content.\n * [CircleAvatar], which shows images or initials of people.\n * [Wrap], A widget that displays its children in multiple horizontal or\n vertical runs.\n * <https://material.io/design/components/chips.html>",
"detail": "",
"kind": 7,
"label": "FilterChip"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnnotatedRegion",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Annotates a region of the layer tree with a value.\n\nSee also:\n\n * [Layer.find], for an example of how this value is retrieved.\n * [AnnotatedRegionLayer], the layer pushed into the layer tree.",
"detail": "",
"kind": 7,
"label": "AnnotatedRegion"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScaleTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animates the scale of a transformed widget.\n\nHere's an illustration of the [ScaleTransition] widget, with it's [alignment]\nanimated by a [CurvedAnimation] set to [Curves.fastOutSlowIn]:\n\nSee also:\n\n * [PositionedTransition], a widget that animates its child from a start\n position to an end position over the lifetime of the animation.\n * [RelativePositionedTransition], a widget that transitions its child's\n position based on the value of a rectangle relative to a bounding box.\n * [SizeTransition], a widget that animates its own size and clips and\n aligns its child.",
"detail": "",
"kind": 7,
"label": "ScaleTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationLocalListenersMixin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A mixin that implements the [addListener]/[removeListener] protocol and notifies\nall the registered listeners when [notifyListeners] is called.\n\nThis mixin requires that the mixing class provide methods [didRegisterListener]\nand [didUnregisterListener]. Implementations of these methods can be obtained\nby mixing in another mixin from this library, such as [AnimationLazyListenerMixin].",
"detail": "",
"kind": 7,
"label": "AnimationLocalListenersMixin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MergeableMaterial",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Displays a list of [MergeableMaterialItem] children. The list contains\n[MaterialSlice] items whose boundaries are either \"merged\" with adjacent\nitems or separated by a [MaterialGap]. The [children] are distributed along\nthe given [mainAxis] in the same way as the children of a [ListBody]. When\nthe list of children changes, gaps are automatically animated open or closed\nas needed.\n\nTo enable this widget to correlate its list of children with the previous\none, each child must specify a key.\n\nWhen a new gap is added to the list of children the adjacent items are\nanimated apart. Similarly when a gap is removed the adjacent items are\nbrought back together.\n\nWhen a new slice is added or removed, the app is responsible for animating\nthe transition of the slices, while the gaps will be animated automatically.\n\nSee also:\n\n * [Card], a piece of material that does not support splitting and merging\n but otherwise looks the same.",
"detail": "",
"kind": 7,
"label": "MergeableMaterial"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollPhysics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Determines the physics of a [Scrollable] widget.\n\nFor example, determines how the [Scrollable] will behave when the user\nreaches the maximum scroll extent or when the user stops scrolling.\n\nWhen starting a physics [Simulation], the current scroll position and\nvelocity are used as the initial conditions for the particle in the\nsimulation. The movement of the particle in the simulation is then used to\ndetermine the scroll position for the widget.",
"detail": "",
"kind": 7,
"label": "ScrollPhysics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SizeChangedLayoutNotification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Indicates that the size of one of the descendants of the object receiving\nthis notification has changed, and that therefore any assumptions about that\nlayout are no longer valid.\n\nFor example, sent by the [SizeChangedLayoutNotifier] widget whenever that\nwidget changes size.\n\nThis notification can be used for triggering repaints, but if you use this\nnotification to trigger rebuilds or relayouts, you'll create a backwards\ndependency in the frame pipeline because [SizeChangedLayoutNotification]s\nare generated during layout, which is after the build phase and in the\nmiddle of the layout phase. This backwards dependency can lead to visual\ncorruption or lags.\n\nSee [LayoutChangedNotification] for additional discussion of layout\nnotifications such as this one.\n\nSee also:\n\n * [SizeChangedLayoutNotifier], which sends this notification.\n * [LayoutChangedNotification], of which this is a subclass.",
"detail": "",
"kind": 7,
"label": "SizeChangedLayoutNotification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "State",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The logic and internal state for a [StatefulWidget].\n\nState is information that (1) can be read synchronously when the widget is\nbuilt and (2) might change during the lifetime of the widget. It is the\nresponsibility of the widget implementer to ensure that the [State] is\npromptly notified when such state changes, using [State.setState].\n\n[State] objects are created by the framework by calling the\n[StatefulWidget.createState] method when inflating a [StatefulWidget] to\ninsert it into the tree. Because a given [StatefulWidget] instance can be\ninflated multiple times (e.g., the widget is incorporated into the tree in\nmultiple places at once), there might be more than one [State] object\nassociated with a given [StatefulWidget] instance. Similarly, if a\n[StatefulWidget] is removed from the tree and later inserted in to the tree\nagain, the framework will call [StatefulWidget.createState] again to create\na fresh [State] object, simplifying the lifecycle of [State] objects.\n\n[State] objects have the following lifecycle:\n\n * The framework creates a [State] object by calling\n [StatefulWidget.createState].\n * The newly created [State] object is associated with a [BuildContext].\n This association is permanent: the [State] object will never change its\n [BuildContext]. However, the [BuildContext] itself can be moved around\n the tree along with its subtree. At this point, the [State] object is\n considered [mounted].\n * The framework calls [initState]. Subclasses of [State] should override\n [initState] to perform one-time initialization that depends on the\n [BuildContext] or the widget, which are available as the [context] and\n [widget] properties, respectively, when the [initState] method is\n called.\n * The framework calls [didChangeDependencies]. Subclasses of [State] should\n override [didChangeDependencies] to perform initialization involving\n [InheritedWidget]s. If [BuildContext.inheritFromWidgetOfExactType] is\n called, the [didChangeDependencies] method will be called again if the\n inherited widgets subsequently change or if the widget moves in the tree.\n * At this point, the [State] object is fully initialized and the framework\n might call its [build] method any number of times to obtain a\n description of the user interface for this subtree. [State] objects can\n spontaneously request to rebuild their subtree by callings their\n [setState] method, which indicates that some of their internal state\n has changed in a way that might impact the user interface in this\n subtree.\n * During this time, a parent widget might rebuild and request that this\n location in the tree update to display a new widget with the same\n [runtimeType] and [Widget.key]. When this happens, the framework will\n update the [widget] property to refer to the new widget and then call the\n [didUpdateWidget] method with the previous widget as an argument. [State]\n objects should override [didUpdateWidget] to respond to changes in their\n associated widget (e.g., to start implicit animations). The framework\n always calls [build] after calling [didUpdateWidget], which means any\n calls to [setState] in [didUpdateWidget] are redundant.\n * During development, if a hot reload occurs (whether initiated from the\n command line `flutter` tool by pressing `r`, or from an IDE), the\n [reassemble] method is called. This provides an opportunity to\n reinitialize any data that was prepared in the [initState] method.\n * If the subtree containing the [State] object is removed from the tree\n (e.g., because the parent built a widget with a different [runtimeType]\n or [Widget.key]), the framework calls the [deactivate] method. Subclasses\n should override this method to clean up any links between this object\n and other elements in the tree (e.g. if you have provided an ancestor\n with a pointer to a descendant's [RenderObject]).\n * At this point, the framework might reinsert this subtree into another\n part of the tree. If that happens, the framework will ensure that it\n calls [build] to give the [State] object a chance to adapt to its new\n location in the tree. If the framework does reinsert this subtree, it\n will do so before the end of the animation frame in which the subtree was\n removed from the tree. For this reason, [State] objects can defer\n releasing most resources until the framework calls their [dispose]\n method.\n * If the framework does not reinsert this subtree by the end of the current\n animation frame, the framework will call [dispose], which indicates that\n this [State] object will never build again. Subclasses should override\n this method to release any resources retained by this object (e.g.,\n stop any active animations).\n * After the framework calls [dispose], the [State] object is considered\n unmounted and the [mounted] property is false. It is an error to call\n [setState] at this point. This stage of the lifecycle is terminal: there\n is no way to remount a [State] object that has been disposed.\n\nSee also:\n\n * [StatefulWidget], where the current configuration of a [State] is hosted,\n and whose documentation has sample code for [State].\n * [StatelessWidget], for widgets that always build the same way given a\n particular configuration and ambient state.\n * [InheritedWidget], for widgets that introduce ambient state that can\n be read by descendant widgets.\n * [Widget], for an overview of widgets in general.",
"detail": "",
"kind": 7,
"label": "State"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Controls a scrollable widget.\n\nScroll controllers are typically stored as member variables in [State]\nobjects and are reused in each [State.build]. A single scroll controller can\nbe used to control multiple scrollable widgets, but some operations, such\nas reading the scroll [offset], require the controller to be used with a\nsingle scrollable widget.\n\nA scroll controller creates a [ScrollPosition] to manage the state specific\nto an individual [Scrollable] widget. To use a custom [ScrollPosition],\nsubclass [ScrollController] and override [createScrollPosition].\n\nA [ScrollController] is a [Listenable]. It notifies its listeners whenever\nany of the attached [ScrollPosition]s notify _their_ listeners (i.e.\nwhenever any of them scroll). It does not notify its listeners when the list\nof attached [ScrollPosition]s changes.\n\nTypically used with [ListView], [GridView], [CustomScrollView].\n\nSee also:\n\n * [ListView], [GridView], [CustomScrollView], which can be controlled by a\n [ScrollController].\n * [Scrollable], which is the lower-level widget that creates and associates\n [ScrollPosition] objects with [ScrollController] objects.\n * [PageController], which is an analogous object for controlling a\n [PageView].\n * [ScrollPosition], which manages the scroll offset for an individual\n scrolling widget.\n * [ScrollNotification] and [NotificationListener], which can be used to watch\n the scroll position without using a [ScrollController].",
"detail": "",
"kind": 7,
"label": "ScrollController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AlignmentGeometry",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for [Alignment] that allows for text-direction aware\nresolution.\n\nA property or argument of this type accepts classes created either with [new\nAlignment] and its variants, or [new AlignmentDirectional].\n\nTo convert an [AlignmentGeometry] object of indeterminate type into an\n[Alignment] object, call the [resolve] method.",
"detail": "",
"kind": 7,
"label": "AlignmentGeometry"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BoxShape",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The shape to use when rendering a [Border] or [BoxDecoration].\n\nConsider using [ShapeBorder] subclasses directly (with [ShapeDecoration]),\ninstead of using [BoxShape] and [Border], if the shapes will need to be\ninterpolated or animated. The [Border] class cannot interpolate between\ndifferent shapes.",
"detail": "",
"kind": 13,
"label": "BoxShape"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BoxScrollView",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [ScrollView] that uses a single child layout model.\n\nSee also:\n\n * [ListView], which is a [BoxScrollView] that uses a linear layout model.\n * [GridView], which is a [BoxScrollView] that uses a 2D layout model.\n * [CustomScrollView], which can combine multiple child layout models into a\n single scroll view.",
"detail": "",
"kind": 7,
"label": "BoxScrollView"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialSlice",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A class that can be used as a child to [MergeableMaterial]. It is a slice\nof [Material] that animates merging with other slices.\n\nAll [MaterialSlice] objects need a [LocalKey].",
"detail": "",
"kind": 7,
"label": "MaterialSlice"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Slider",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A Material Design slider.\n\nUsed to select from a range of values.\n\nA slider can be used to select from either a continuous or a discrete set of\nvalues. The default is to use a continuous range of values from [min] to\n[max]. To use discrete values, use a non-null value for [divisions], which\nindicates the number of discrete intervals. For example, if [min] is 0.0 and\n[max] is 50.0 and [divisions] is 5, then the slider can take on the\ndiscrete values 0.0, 10.0, 20.0, 30.0, 40.0, and 50.0.\n\nThe terms for the parts of a slider are:\n\n * The \"thumb\", which is a shape that slides horizontally when the user\n drags it.\n * The \"track\", which is the line that the slider thumb slides along.\n * The \"value indicator\", which is a shape that pops up when the user\n is dragging the thumb to indicate the value being selected.\n * The \"active\" side of the slider is the side between the thumb and the\n minimum value.\n * The \"inactive\" side of the slider is the side between the thumb and the\n maximum value.\n\nThe slider will be disabled if [onChanged] is null or if the range given by\n[min]..[max] is empty (i.e. if [min] is equal to [max]).\n\nThe slider widget itself does not maintain any state. Instead, when the state\nof the slider changes, the widget calls the [onChanged] callback. Most\nwidgets that use a slider will listen for the [onChanged] callback and\nrebuild the slider with a new [value] to update the visual appearance of the\nslider. To know when the value starts to change, or when it is done\nchanging, set the optional callbacks [onChangeStart] and/or [onChangeEnd].\n\nBy default, a slider will be as wide as possible, centered vertically. When\ngiven unbounded constraints, it will attempt to make the track 144 pixels\nwide (with margins on each side) and will shrink-wrap vertically.\n\nRequires one of its ancestors to be a [Material] widget.\n\nRequires one of its ancestors to be a [MediaQuery] widget. Typically, these\nare introduced by the [MaterialApp] or [WidgetsApp] widget at the top of\nyour application widget tree.\n\nTo determine how it should be displayed (e.g. colors, thumb shape, etc.),\na slider uses the [SliderThemeData] available from either a [SliderTheme]\nwidget or the [ThemeData.sliderTheme] a [Theme] widget above it in the\nwidget tree. You can also override some of the colors with the [activeColor]\nand [inactiveColor] properties, although more fine-grained control of the\nlook is achieved using a [SliderThemeData].\n\nSee also:\n\n * [SliderTheme] and [SliderThemeData] for information about controlling\n the visual appearance of the slider.\n * [Radio], for selecting among a set of explicit values.\n * [Checkbox] and [Switch], for toggling a particular value on or off.\n * <https://material.io/design/components/sliders.html>\n * [MediaQuery], from which the text scale factor is obtained.",
"detail": "",
"kind": 7,
"label": "Slider"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ClipContext",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Clip utilities used by [PaintingContext] and [TestRecordingPaintingContext].",
"detail": "",
"kind": 7,
"label": "ClipContext"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DefaultTextStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The text style to apply to descendant [Text] widgets without explicit style.",
"detail": "",
"kind": 7,
"label": "DefaultTextStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SnackBarClosedReason",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Specify how a [SnackBar] was closed.\n\nThe [ScaffoldState.showSnackBar] function returns a\n[ScaffoldFeatureController]. The value of the controller's closed property\nis a Future that resolves to a SnackBarClosedReason. Applications that need\nto know how a snackbar was closed can use this value.\n\nExample:\n\n```dart\nScaffold.of(context).showSnackBar(\n SnackBar( ... )\n).closed.then((SnackBarClosedReason reason) {\n ...\n});\n```",
"detail": "",
"kind": 13,
"label": "SnackBarClosedReason"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RoundSliderOverlayShape",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "This is the default shape of a [Slider]'s thumb overlay.\n\nThe shape of the overlay is a circle with the same center as the thumb, but\nwith a larger radius. It animates to full size when the thumb is pressed,\nand animates back down to size 0 when it is released. It is painted behind\nthe thumb, and is expected to extend beyond the bounds of the thumb so that\nit is visible.\n\nThe overlay color is defined by [SliderThemeData.overlayColor].\n\nSee also:\n\n * [Slider], which includes an overlay defined by this shape.\n * [SliderTheme], which can be used to configure the overlay shape of all\n sliders in a widget subtree.",
"detail": "",
"kind": 7,
"label": "RoundSliderOverlayShape"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ElasticInCurve",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An oscillating curve that grows in magnitude while overshooting its bounds.\n\nAn instance of this class using the default period of 0.4 is available as\n[Curves.elasticIn].\n",
"detail": "",
"kind": 7,
"label": "ElasticInCurve"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A controller for an animation.\n\nThis class lets you perform tasks such as:\n\n* Play an animation [forward] or in [reverse], or [stop] an animation.\n* Set the animation to a specific [value].\n* Define the [upperBound] and [lowerBound] values of an animation.\n* Create a [fling] animation effect using a physics simulation.\n\nBy default, an [AnimationController] linearly produces values that range\nfrom 0.0 to 1.0, during a given duration. The animation controller generates\na new value whenever the device running your app is ready to display a new\nframe (typically, this rate is around 60 values per second).\n\n## Ticker providers\n\nAn [AnimationController] needs a [TickerProvider], which is configured using\nthe `vsync` argument on the constructor.\n\nThe [TickerProvider] interface describes a factory for [Ticker] objects. A\n[Ticker] is an object that knows how to register itself with the\n[SchedulerBinding] and fires a callback every frame. The\n[AnimationController] class uses a [Ticker] to step through the animation\nthat it controls.\n\nIf an [AnimationController] is being created from a [State], then the State\ncan use the [TickerProviderStateMixin] and [SingleTickerProviderStateMixin]\nclasses to implement the [TickerProvider] interface. The\n[TickerProviderStateMixin] class always works for this purpose; the\n[SingleTickerProviderStateMixin] is slightly more efficient in the case of\nthe class only ever needing one [Ticker] (e.g. if the class creates only a\nsingle [AnimationController] during its entire lifetime).\n\nThe widget test framework [WidgetTester] object can be used as a ticker\nprovider in the context of tests. In other contexts, you will have to either\npass a [TickerProvider] from a higher level (e.g. indirectly from a [State]\nthat mixes in [TickerProviderStateMixin]), or create a custom\n[TickerProvider] subclass.\n\n## Life cycle\n\nAn [AnimationController] should be [dispose]d when it is no longer needed.\nThis reduces the likelihood of leaks. When used with a [StatefulWidget], it\nis common for an [AnimationController] to be created in the\n[State.initState] method and then disposed in the [State.dispose] method.\n\n## Using [Future]s with [AnimationController]\n\nThe methods that start animations return a [TickerFuture] object which\ncompletes when the animation completes successfully, and never throws an\nerror; if the animation is canceled, the future never completes. This object\nalso has a [TickerFuture.orCancel] property which returns a future that\ncompletes when the animation completes successfully, and completes with an\nerror when the animation is aborted.\n\nThis can be used to write code such as the `fadeOutAndUpdateState` method\nbelow.\n\n\nHere is a stateful [Foo] widget. Its [State] uses the\n[SingleTickerProviderStateMixin] to implement the necessary\n[TickerProvider], creating its controller in the [initState] method and\ndisposing of it in the [dispose] method. The duration of the controller is\nconfigured from a property in the [Foo] widget; as that changes, the\n[didUpdateWidget] method is used to update the controller.\n\n```dart\nclass Foo extends StatefulWidget {\n Foo({ Key key, this.duration }) : super(key: key);\n\n final Duration duration;\n\n @override\n _FooState createState() => _FooState();\n}\n\nclass _FooState extends State<Foo> with SingleTickerProviderStateMixin {\n AnimationController _controller;\n\n @override\n void initState() {\n super.initState();\n _controller = AnimationController(\n vsync: this, // the SingleTickerProviderStateMixin\n duration: widget.duration,\n );\n }\n\n @override\n void didUpdateWidget(Foo oldWidget) {\n super.didUpdateWidget(oldWidget);\n _controller.duration = widget.duration;\n }\n\n @override\n void dispose() {\n _controller.dispose();\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return Container(); // ...\n }\n}\n```\n\nThe following method (for a [State] subclass) drives two animation\ncontrollers using Dart's asynchronous syntax for awaiting [Future] objects:\n\n```dart\nFuture<void> fadeOutAndUpdateState() async {\n try {\n await fadeAnimationController.forward().orCancel;\n await sizeAnimationController.forward().orCancel;\n setState(() {\n dismissed = true;\n });\n } on TickerCanceled {\n // the animation got canceled, probably because we were disposed\n }\n}\n```\n\nThe assumption in the code above is that the animation controllers are being\ndisposed in the [State] subclass' override of the [State.dispose] method.\nSince disposing the controller cancels the animation (raising a\n[TickerCanceled] exception), the code here can skip verifying whether\n[State.mounted] is still true at each step. (Again, this assumes that the\ncontrollers are created in [State.initState] and disposed in\n[State.dispose], as described in the previous section.)\n\nSee also:\n\n * [Tween], the base class for converting an [AnimationController] to a\n range of values of other types.",
"detail": "",
"kind": 7,
"label": "AnimationController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Size",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Holds a 2D floating-point size.\n\nYou can think of this as an [Offset] from the origin.",
"detail": "",
"kind": 7,
"label": "Size"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PointerDownEvent",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The pointer has made contact with the device.",
"detail": "",
"kind": 7,
"label": "PointerDownEvent"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BannerPainter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Paints a [Banner].",
"detail": "",
"kind": 7,
"label": "BannerPainter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PreferredSize",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget with a preferred size.\n\nThis widget does not impose any constraints on its child, and it doesn't\naffect the child's layout in any way. It just advertises a preferred size\nwhich can be used by the parent.\n\nSee also:\n\n * [AppBar.bottom] and [Scaffold.appBar], which require preferred size widgets.\n * [PreferredSizeWidget], the interface which this widget implements to expose\n its preferred size.\n * [AppBar] and [TabBar], which implement PreferredSizeWidget.",
"detail": "",
"kind": 7,
"label": "PreferredSize"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InheritedModel",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An [InheritedWidget] that's intended to be used as the base class for\nmodels whose dependents may only depend on one part or \"aspect\" of the\noverall model.\n\nAn inherited widget's dependents are unconditionally rebuilt when the\ninherited widget changes per [InheritedWidget.updateShouldNotify].\nThis widget is similar except that dependents aren't rebuilt\nunconditionally.\n\nWidgets that depend on an [InheritedModel] qualify their dependence\nwith a value that indicates what \"aspect\" of the model they depend\non. When the model is rebuilt, dependents will also be rebuilt, but\nonly if there was a change in the model that corresponds to the aspect\nthey provided.\n\nThe type parameter `T` is the type of the model aspect objects.\n\n\nWidgets create a dependency on an [InheritedModel] with a static method:\n[InheritedModel.inheritFrom]. This method's `context` parameter\ndefines the subtree that will be rebuilt when the model changes.\nTypically the `inheritFrom` method is called from a model-specific\nstatic `of` method. For example:\n\n```dart\nclass MyModel extends InheritedModel<String> {\n // ...\n static MyModel of(BuildContext context, String aspect) {\n return InheritedModel.inheritFrom<MyModel>(context, aspect: aspect);\n }\n}\n```\n\nCalling `MyModel.of(context, 'foo')` means that `context` should only\nbe rebuilt when the `foo` aspect of `MyModel` changes. If the aspect\nis null, then the model supports all aspects.\n\nWhen the inherited model is rebuilt the [updateShouldNotify] and\n[updateShouldNotifyDependent] methods are used to decide what\nshould be rebuilt. If [updateShouldNotify] returns true, then the\ninherited model's [updateShouldNotifyDependent] method is tested for\neach dependent and the set of aspect objects it depends on.\nThe [updateShouldNotifyDependent] method must compare the set of aspect\ndependencies with the changes in the model itself.\n\nFor example:\n\n```dart\nclass ABModel extends InheritedModel<String> {\n ABModel({ this.a, this.b, Widget child }) : super(child: child);\n\n final int a;\n final int b;\n\n @override\n bool updateShouldNotify(ABModel old) {\n return a != old.a || b != old.b;\n }\n\n @override\n bool updateShouldNotifyDependent(ABModel old, Set<String> aspects) {\n return (a != old.a && aspects.contains('a'))\n || (b != old.b && aspects.contains('b'))\n }\n\n // ...\n}\n```\n\nIn the previous example the dependencies checked by\n[updateShouldNotifyDependent] are just the aspect strings passed to\n`inheritFromWidgetOfExactType`. They're represented as a [Set] because\none Widget can depend on more than one aspect of the model.\nIf a widget depends on the model but doesn't specify an aspect,\nthen changes in the model will cause the widget to be rebuilt\nunconditionally.\n\nSee also:\n\n * [InheritedWidget], an inherited widget that only notifies dependents\n when its value is different.\n * [InheritedNotifier], an inherited widget whose value can be a\n [Listenable], and which will notify dependents whenever the value\n sends notifications.",
"detail": "",
"kind": 7,
"label": "InheritedModel"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SawTooth",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sawtooth curve that repeats a given number of times over the unit interval.\n\nThe curve rises linearly from 0.0 to 1.0 and then falls discontinuously back\nto 0.0 each iteration.\n",
"detail": "",
"kind": 7,
"label": "SawTooth"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InputDecoration",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The border, labels, icons, and styles used to decorate a Material\nDesign text field.\n\nThe [TextField] and [InputDecorator] classes use [InputDecoration] objects\nto describe their decoration. (In fact, this class is merely the\nconfiguration of an [InputDecorator], which does all the heavy lifting.)\n\nSee also:\n\n * [TextField], which is a text input widget that uses an\n [InputDecoration].\n * [InputDecorator], which is a widget that draws an [InputDecoration]\n around an input child widget.\n * [Decoration] and [DecoratedBox], for drawing borders and backgrounds\n around a child widget.",
"detail": "",
"kind": 7,
"label": "InputDecoration"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LongPressEndDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Details for callbacks that use [GestureLongPressEndCallback].\n\nSee also:\n\n * [LongPressGestureRecognizer.onLongPressEnd], which uses [GestureLongPressEndCallback].\n * [LongPressMoveUpdateDetails], the details for [GestureLongPressMoveUpdateCallback]\n * [LongPressStartDetails], the details for [GestureLongPressStartCallback].",
"detail": "",
"kind": 7,
"label": "LongPressEndDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OverlayRoute",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A route that displays widgets in the [Navigator]'s [Overlay].",
"detail": "",
"kind": 7,
"label": "OverlayRoute"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SweepGradient",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A 2D sweep gradient.\n\nThis class is used by [BoxDecoration] to represent sweep gradients. This\nabstracts out the arguments to the [new ui.Gradient.sweep] constructor from\nthe `dart:ui` library.\n\nA gradient has a [center], a [startAngle], and an [endAngle]. The [startAngle]\ncorresponds to 0.0, and the [endAngle] corresponds to 1.0. These angles are\nexpressed in radians.\n\nThe [colors] are described by a list of [Color] objects. There must be at\nleast two colors. The [stops] list, if specified, must have the same length\nas [colors]. It specifies fractions of the vector from start to end, between\n0.0 and 1.0, for each color. If it is null, a uniform distribution is\nassumed.\n\nThe region of the canvas before [startAngle] and after [endAngle] is colored\naccording to [tileMode].\n\nTypically this class is used with [BoxDecoration], which does the painting.\nTo use a [SweepGradient] to paint on a canvas directly, see [createShader].\n\n\nThis sample draws a different color in each quadrant.\n\n```dart\nContainer(\n decoration: BoxDecoration(\n gradient: SweepGradient(\n center: FractionalOffset.center,\n startAngle: 0.0,\n endAngle: math.pi * 2,\n colors: const <Color>[\n Color(0xFF4285F4), // blue\n Color(0xFF34A853), // green\n Color(0xFFFBBC05), // yellow\n Color(0xFFEA4335), // red\n Color(0xFF4285F4), // blue again to seamlessly transition to the start\n ],\n stops: const <double>[0.0, 0.25, 0.5, 0.75, 1.0],\n ),\n ),\n )\n```\n\nSee also:\n\n * [LinearGradient], which displays a gradient in parallel lines, and has an\n example which shows a different way to use [Gradient] objects.\n * [RadialGradient], which displays a gradient in concentric circles, and\n has an example which shows a different way to use [Gradient] objects.\n * [BoxDecoration], which can take a [SweepGradient] in its\n [BoxDecoration.gradient] property.",
"detail": "",
"kind": 7,
"label": "SweepGradient"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PageStorage",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that establishes a page storage bucket for this widget subtree.",
"detail": "",
"kind": 7,
"label": "PageStorage"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedPadding",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [Padding] which automatically transitions the\nindentation over a given duration whenever the given inset changes.\n\nHere's an illustration of what using this widget looks like, using a [curve]\nof [Curves.fastOutSlowIn].\n\nSee also:\n\n * [AnimatedContainer], which can transition more values at once.\n * [AnimatedAlign], which automatically transitions its child's\n position over a given duration whenever the given [alignment] changes.",
"detail": "",
"kind": 7,
"label": "AnimatedPadding"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "WidgetsLocalizations",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Interface for localized resource values for the lowest levels of the Flutter\nframework.\n\nIn particular, this maps locales to a specific [Directionality] using the\n[textDirection] property.\n\nSee also:\n\n * [DefaultWidgetsLocalizations], which implements this interface and\n supports a variety of locales.",
"detail": "",
"kind": 7,
"label": "WidgetsLocalizations"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ImageConfiguration",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Configuration information passed to the [ImageProvider.resolve] method to\nselect a specific image.\n\nSee also:\n\n * [createLocalImageConfiguration], which creates an [ImageConfiguration]\n based on ambient configuration in a [Widget] environment.\n * [ImageProvider], which uses [ImageConfiguration] objects to determine\n which image to obtain.",
"detail": "",
"kind": 7,
"label": "ImageConfiguration"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Orientation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Whether in portrait or landscape.",
"detail": "",
"kind": 13,
"label": "Orientation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BlendMode",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Algorithms to use when painting on the canvas.\n\nWhen drawing a shape or image onto a canvas, different algorithms can be\nused to blend the pixels. The different values of [BlendMode] specify\ndifferent such algorithms.\n\nEach algorithm has two inputs, the _source_, which is the image being drawn,\nand the _destination_, which is the image into which the source image is\nbeing composited. The destination is often thought of as the _background_.\nThe source and destination both have four color channels, the red, green,\nblue, and alpha channels. These are typically represented as numbers in the\nrange 0.0 to 1.0. The output of the algorithm also has these same four\nchannels, with values computed from the source and destination.\n\nThe documentation of each value below describes how the algorithm works. In\neach case, an image shows the output of blending a source image with a\ndestination image. In the images below, the destination is represented by an\nimage with horizontal lines and an opaque landscape photograph, and the\nsource is represented by an image with vertical lines (the same lines but\nrotated) and a bird clip-art image. The [src] mode shows only the source\nimage, and the [dst] mode shows only the destination image. In the\ndocumentation below, the transparency is illustrated by a checkerboard\npattern. The [clear] mode drops both the source and destination, resulting\nin an output that is entirely transparent (illustrated by a solid\ncheckerboard pattern).\n\nThe horizontal and vertical bars in these images show the red, green, and\nblue channels with varying opacity levels, then all three color channels\ntogether with those same varying opacity levels, then all three color\nchannels set to zero with those varying opacity levels, then two bars showing\na red/green/blue repeating gradient, the first with full opacity and the\nsecond with partial opacity, and finally a bar with the three color channels\nset to zero but the opacity varying in a repeating gradient.\n\n## Application to the [Canvas] API\n\nWhen using [Canvas.saveLayer] and [Canvas.restore], the blend mode of the\n[Paint] given to the [Canvas.saveLayer] will be applied when\n[Canvas.restore] is called. Each call to [Canvas.saveLayer] introduces a new\nlayer onto which shapes and images are painted; when [Canvas.restore] is\ncalled, that layer is then composited onto the parent layer, with the source\nbeing the most-recently-drawn shapes and images, and the destination being\nthe parent layer. (For the first [Canvas.saveLayer] call, the parent layer\nis the canvas itself.)\n\nSee also:\n\n * [Paint.blendMode], which uses [BlendMode] to define the compositing\n strategy.",
"detail": "",
"kind": 13,
"label": "BlendMode"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureRecognizerFactory",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Factory for creating gesture recognizers.\n\n`T` is the type of gesture recognizer this class manages.\n\nUsed by [RawGestureDetector.gestures].",
"detail": "",
"kind": 7,
"label": "GestureRecognizerFactory"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InputBorder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines the appearance of an [InputDecorator]'s border.\n\nAn input decorator's border is specified by [InputDecoration.border].\n\nThe border is drawn relative to the input decorator's \"container\" which\nis the optionally filled area above the decorator's helper, error,\nand counter.\n\nInput border's are decorated with a line whose weight and color are defined\nby [borderSide]. The input decorator's renderer animates the input border's\nappearance in response to state changes, like gaining or losing the focus,\nby creating new copies of its input border with [copyWith].\n\nSee also:\n\n * [UnderlineInputBorder], the default [InputDecorator] border which\n draws a horizontal line at the bottom of the input decorator's container.\n * [OutlineInputBorder], an [InputDecorator] border which draws a\n rounded rectangle around the input decorator's container.\n * [InputDecoration], which is used to configure an [InputDecorator].",
"detail": "",
"kind": 7,
"label": "InputBorder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TableRow",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A horizontal group of cells in a [Table].\n\nEvery row in a table must have the same number of children.\n\nThe alignment of individual cells in a row can be controlled using a\n[TableCell].",
"detail": "",
"kind": 7,
"label": "TableRow"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ShaderWarmUp",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Interface for drawing an image to warm up Skia shader compilations.\n\nWhen Skia first sees a certain type of draw operation on the GPU, it needs\nto compile the corresponding shader. The compilation can be slow (20ms-\n200ms). Having that time as startup latency is often better than having\njank in the middle of an animation.\n\nTherefore, we use this during the [PaintingBinding.initInstances] call to\nmove common shader compilations from animation time to startup time. By\ndefault, a [DefaultShaderWarmUp] is used. If needed, app developers can\ncreate a custom [ShaderWarmUp] subclass and hand it to\n[PaintingBinding.shaderWarmUp] (so it replaces [DefaultShaderWarmUp])\nbefore [PaintingBinding.initInstances] is called. Usually, that can be\ndone before calling [runApp].\n\nTo determine whether a draw operation is useful for warming up shaders,\ncheck whether it improves the slowest GPU frame. Also, tracing with\n`flutter run --profile --trace-skia` may reveal whether there is shader-\ncompilation-related jank. If there is such jank, some long\n`GrGLProgramBuilder::finalize` calls would appear in the middle of an\nanimation. Their parent calls, which look like `XyzOp` (e.g., `FillRecOp`,\n`CircularRRectOp`) would suggest Xyz draw operations are causing the\nshaders to be compiled. A useful shader warm-up draw operation would\neliminate such long compilation calls in the animation. To double-check\nthe warm-up, trace with `flutter run --profile --trace-skia --start-\npaused`. The `GrGLProgramBuilder` with the associated `XyzOp` should\nappear during startup rather than in the middle of a later animation.\n\nThis warm-up needs to be run on each individual device because the shader\ncompilation depends on the specific GPU hardware and driver a device has. It\ncan't be pre-computed during the Flutter engine compilation as the engine is\ndevice-agnostic.\n\nIf no warm-up is desired (e.g., when the startup latency is crucial), set\n[PaintingBinding.shaderWarmUp] either to a custom ShaderWarmUp with an empty\n[warmUpOnCanvas] or null.\n\nSee also:\n\n * [PaintingBinding.shaderWarmUp], the actual instance of [ShaderWarmUp]\n that's used to warm up the shaders.",
"detail": "",
"kind": 7,
"label": "ShaderWarmUp"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollUpdateNotification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A notification that a [Scrollable] widget has changed its scroll position.\n\nSee also:\n\n * [OverscrollNotification], which indicates that a [Scrollable] widget\n has not changed its scroll position because the change would have caused\n its scroll position to go outside its scroll bounds.\n * [ScrollNotification], which describes the notification lifecycle.",
"detail": "",
"kind": 7,
"label": "ScrollUpdateNotification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialType",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The various kinds of material in material design. Used to\nconfigure the default behavior of [Material] widgets.\n\nSee also:\n\n * [Material], in particular [Material.type].\n * [kMaterialEdges]",
"detail": "",
"kind": 13,
"label": "MaterialType"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverGridDelegateWithFixedCrossAxisCount",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Creates grid layouts with a fixed number of tiles in the cross axis.\n\nFor example, if the grid is vertical, this delegate will create a layout\nwith a fixed number of columns. If the grid is horizontal, this delegate\nwill create a layout with a fixed number of rows.\n\nThis delegate creates grids with equally sized and spaced tiles.\n\nSee also:\n\n * [SliverGridDelegateWithMaxCrossAxisExtent], which creates a layout with\n tiles that have a maximum cross-axis extent.\n * [SliverGridDelegate], which creates arbitrary layouts.\n * [GridView], which can use this delegate to control the layout of its\n tiles.\n * [SliverGrid], which can use this delegate to control the layout of its\n tiles.\n * [RenderSliverGrid], which can use this delegate to control the layout of\n its tiles.",
"detail": "",
"kind": 7,
"label": "SliverGridDelegateWithFixedCrossAxisCount"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ErrorWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that renders an exception's message.\n\nThis widget is used when a build method fails, to help with determining\nwhere the problem lies. Exceptions are also logged to the console, which you\ncan read using `flutter logs`. The console will also include additional\ninformation such as the stack trace for the exception.",
"detail": "",
"kind": 7,
"label": "ErrorWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ShaderCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for a function that creates a [Shader] for a given [Rect].\n\nUsed by [RenderShaderMask] and the [ShaderMask] widget.",
"detail": "(Rect bounds) → Shader",
"kind": 7,
"label": "ShaderCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ThemeDataTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two [ThemeData]s.\n\nThis class specializes the interpolation of [Tween<ThemeData>] to call the\n[ThemeData.lerp] method.\n\nSee [Tween] for a discussion on how to use interpolation objects.",
"detail": "",
"kind": 7,
"label": "ThemeDataTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Material",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A piece of material.\n\nThe Material widget is responsible for:\n\n1. Clipping: If [clipBehavior] is not [Clip.none], Material clips its widget\n sub-tree to the shape specified by [shape], [type], and [borderRadius].\n By default, [clipBehavior] is [Clip.none] for performance considerations.\n2. Elevation: Material elevates its widget sub-tree on the Z axis by\n [elevation] pixels, and draws the appropriate shadow.\n3. Ink effects: Material shows ink effects implemented by [InkFeature]s\n like [InkSplash] and [InkHighlight] below its children.\n\n## The Material Metaphor\n\nMaterial is the central metaphor in material design. Each piece of material\nexists at a given elevation, which influences how that piece of material\nvisually relates to other pieces of material and how that material casts\nshadows.\n\nMost user interface elements are either conceptually printed on a piece of\nmaterial or themselves made of material. Material reacts to user input using\n[InkSplash] and [InkHighlight] effects. To trigger a reaction on the\nmaterial, use a [MaterialInkController] obtained via [Material.of].\n\nIn general, the features of a [Material] should not change over time (e.g. a\n[Material] should not change its [color], [shadowColor] or [type]).\nChanges to [elevation] and [shadowColor] are animated for [animationDuration].\nChanges to [shape] are animated if [type] is not [MaterialType.transparency]\nand [ShapeBorder.lerp] between the previous and next [shape] values is\nsupported. Shape changes are also animated for [animationDuration].\n\n\n## Shape\n\nThe shape for material is determined by [shape], [type], and [borderRadius].\n\n - If [shape] is non null, it determines the shape.\n - If [shape] is null and [borderRadius] is non null, the shape is a\n rounded rectangle, with corners specified by [borderRadius].\n - If [shape] and [borderRadius] are null, [type] determines the\n shape as follows:\n - [MaterialType.canvas]: the default material shape is a rectangle.\n - [MaterialType.card]: the default material shape is a rectangle with\n rounded edges. The edge radii is specified by [kMaterialEdges].\n - [MaterialType.circle]: the default material shape is a circle.\n - [MaterialType.button]: the default material shape is a rectangle with\n rounded edges. The edge radii is specified by [kMaterialEdges].\n - [MaterialType.transparency]: the default material shape is a rectangle.\n\n## Border\n\nIf [shape] is not null, then its border will also be painted (if any).\n\n## Layout change notifications\n\nIf the layout changes (e.g. because there's a list on the material, and it's\nbeen scrolled), a [LayoutChangedNotification] must be dispatched at the\nrelevant subtree. This in particular means that transitions (e.g.\n[SlideTransition]) should not be placed inside [Material] widgets so as to\nmove subtrees that contain [InkResponse]s, [InkWell]s, [Ink]s, or other\nwidgets that use the [InkFeature] mechanism. Otherwise, in-progress ink\nfeatures (e.g., ink splashes and ink highlights) won't move to account for\nthe new layout.\n\nSee also:\n\n * [MergeableMaterial], a piece of material that can split and re-merge.\n * [Card], a wrapper for a [Material] of [type] [MaterialType.card].\n * <https://material.io/design/>",
"detail": "",
"kind": 7,
"label": "Material"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RaisedButton",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design \"raised button\".\n\nA raised button is based on a [Material] widget whose [Material.elevation]\nincreases when the button is pressed.\n\nUse raised buttons to add dimension to otherwise mostly flat layouts, e.g.\nin long busy lists of content, or in wide spaces. Avoid using raised buttons\non already-raised content such as dialogs or cards.\n\nIf the [onPressed] callback is null, then the button will be disabled and by\ndefault will resemble a flat button in the [disabledColor]. If you are\ntrying to change the button's [color] and it is not having any effect, check\nthat you are passing a non-null [onPressed] handler.\n\nIf you want an ink-splash effect for taps, but don't want to use a button,\nconsider using [InkWell] directly.\n\nRaised buttons have a minimum size of 88.0 by 36.0 which can be overridden\nwith [ButtonTheme].\n\n\nThis sample shows how to render a disabled RaisedButton, an enabled RaisedButton\nand lastly a RaisedButton with gradient background.\n\n![Three raised buttons, one enabled, another disabled, and the last one\nstyled with a blue gradient background](https://flutter.github.io/assets-for-api-docs/assets/material/raised_button.png)\n\n```dart\nWidget build(BuildContext context) {\n return Center(\n child: Column(\n mainAxisSize: MainAxisSize.min,\n children: <Widget>[\n const RaisedButton(\n onPressed: null,\n child: Text(\n 'Disabled Button',\n style: TextStyle(fontSize: 20)\n ),\n ),\n const SizedBox(height: 30),\n RaisedButton(\n onPressed: () {},\n child: const Text(\n 'Enabled Button',\n style: TextStyle(fontSize: 20)\n ),\n ),\n const SizedBox(height: 30),\n RaisedButton(\n onPressed: () {},\n textColor: Colors.white,\n padding: const EdgeInsets.all(0.0),\n child: Container(\n decoration: const BoxDecoration(\n gradient: LinearGradient(\n colors: <Color>[\n Color(0xFF0D47A1),\n Color(0xFF1976D2),\n Color(0xFF42A5F5),\n ],\n ),\n ),\n padding: const EdgeInsets.all(10.0),\n child: const Text(\n 'Gradient Button',\n style: TextStyle(fontSize: 20)\n ),\n ),\n ),\n ],\n ),\n );\n}\n```\n\nSee also:\n\n * [FlatButton], a material design button without a shadow.\n * [DropdownButton], a button that shows options to select from.\n * [FloatingActionButton], the round button in material applications.\n * [IconButton], to create buttons that just contain icons.\n * [InkWell], which implements the ink splash part of a flat button.\n * [RawMaterialButton], the widget this widget is based on.\n * <https://material.io/design/components/buttons.html>",
"detail": "",
"kind": 7,
"label": "RaisedButton"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Clip",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Different ways to clip a widget's content.",
"detail": "",
"kind": 13,
"label": "Clip"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Flexible",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that controls how a child of a [Row], [Column], or [Flex] flexes.\n\nUsing a [Flexible] widget gives a child of a [Row], [Column], or [Flex]\nthe flexibility to expand to fill the available space in the main axis\n(e.g., horizontally for a [Row] or vertically for a [Column]), but, unlike\n[Expanded], [Flexible] does not require the child to fill the available\nspace.\n\nA [Flexible] widget must be a descendant of a [Row], [Column], or [Flex],\nand the path from the [Flexible] widget to its enclosing [Row], [Column], or\n[Flex] must contain only [StatelessWidget]s or [StatefulWidget]s (not other\nkinds of widgets, like [RenderObjectWidget]s).\n\nSee also:\n\n * [Expanded], which forces the child to expand to fill the available space.\n * [Spacer], a widget that takes up space proportional to it's flex value.\n * The [catalog of layout widgets](https://flutter.dev/widgets/layout/).",
"detail": "",
"kind": 7,
"label": "Flexible"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BorderSide",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A side of a border of a box.\n\nA [Border] consists of four [BorderSide] objects: [Border.top],\n[Border.left], [Border.right], and [Border.bottom].\n\n\nThis sample shows how [BorderSide] objects can be used in a [Container], via\na [BoxDecoration] and a [Border], to decorate some [Text]. In this example,\nthe text has a thick bar above it that is light blue, and a thick bar below\nit that is a darker shade of blue.\n\n```dart\nContainer(\n padding: EdgeInsets.all(8.0),\n decoration: BoxDecoration(\n border: Border(\n top: BorderSide(width: 16.0, color: Colors.lightBlue.shade50),\n bottom: BorderSide(width: 16.0, color: Colors.lightBlue.shade900),\n ),\n ),\n child: Text('Flutter in the sky', textAlign: TextAlign.center),\n)\n```\n\nSee also:\n\n * [Border], which uses [BorderSide] objects to represent its sides.\n * [BoxDecoration], which optionally takes a [Border] object.\n * [TableBorder], which is similar to [Border] but has two more sides\n ([TableBorder.horizontalInside] and [TableBorder.verticalInside]), both\n of which are also [BorderSide] objects.",
"detail": "",
"kind": 7,
"label": "BorderSide"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureLongPressCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Callback signature for [LongPressGestureRecognizer.onLongPress].\n\nCalled when a pointer has remained in contact with the screen at the\nsame location for a long period of time.",
"detail": "() → void",
"kind": 7,
"label": "GestureLongPressCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureTapCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for when a tap has occurred.\n\nSee also:\n\n * [GestureDetector.onTap], which matches this signature.\n * [TapGestureRecognizer], which uses this signature in one of its callbacks.",
"detail": "() → void",
"kind": 7,
"label": "GestureTapCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SingleChildLayoutDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A delegate for computing the layout of a render object with a single child.\n\nUsed by [CustomSingleChildLayout] (in the widgets library) and\n[RenderCustomSingleChildLayoutBox] (in the rendering library).\n\nWhen asked to layout, [CustomSingleChildLayout] first calls [getSize] with\nits incoming constraints to determine its size. It then calls\n[getConstraintsForChild] to determine the constraints to apply to the child.\nAfter the child completes its layout, [RenderCustomSingleChildLayoutBox]\ncalls [getPositionForChild] to determine the child's position.\n\nThe [shouldRelayout] method is called when a new instance of the class\nis provided, to check if the new instance actually represents different\ninformation.\n\nThe most efficient way to trigger a relayout is to supply a relayout\nargument to the constructor of the [SingleChildLayoutDelegate]. The custom\nobject will listen to this value and relayout whenever the animation\nticks, avoiding both the build phase of the pipeline.\n\nSee also:\n\n * [CustomSingleChildLayout], the widget that uses this delegate.\n * [RenderCustomSingleChildLayoutBox], render object that uses this\n delegate.",
"detail": "",
"kind": 7,
"label": "SingleChildLayoutDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AboutListTile",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [ListTile] that shows an about box.\n\nThis widget is often added to an app's [Drawer]. When tapped it shows\nan about box dialog with [showAboutDialog].\n\nThe about box will include a button that shows licenses for software used by\nthe application. The licenses shown are those returned by the\n[LicenseRegistry] API, which can be used to add more licenses to the list.\n\nIf your application does not have a [Drawer], you should provide an\naffordance to call [showAboutDialog] or (at least) [showLicensePage].",
"detail": "",
"kind": 7,
"label": "AboutListTile"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TapUpDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Details for [GestureTapUpCallback], such as position.\n\nSee also:\n\n * [GestureDetector.onTapUp], which receives this information.\n * [TapGestureRecognizer], which passes this information to one of its callbacks.",
"detail": "",
"kind": 7,
"label": "TapUpDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "NestedScrollViewViewport",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The [Viewport] variant used by [NestedScrollView].\n\nThis viewport takes a [SliverOverlapAbsorberHandle] and notifies it any time\nthe viewport needs to recompute its layout (e.g. when it is scrolled).",
"detail": "",
"kind": 7,
"label": "NestedScrollViewViewport"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Row",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that displays its children in a horizontal array.\n\nTo cause a child to expand to fill the available horizontal space, wrap the\nchild in an [Expanded] widget.\n\nThe [Row] widget does not scroll (and in general it is considered an error\nto have more children in a [Row] than will fit in the available room). If\nyou have a line of widgets and want them to be able to scroll if there is\ninsufficient room, consider using a [ListView].\n\nFor a vertical variant, see [Column].\n\nIf you only have one child, then consider using [Align] or [Center] to\nposition the child.\n\n\nThis example divides the available space into three (horizontally), and\nplaces text centered in the first two cells and the Flutter logo centered in\nthe third:\n\n```dart\nRow(\n children: <Widget>[\n Expanded(\n child: Text('Deliver features faster', textAlign: TextAlign.center),\n ),\n Expanded(\n child: Text('Craft beautiful UIs', textAlign: TextAlign.center),\n ),\n Expanded(\n child: FittedBox(\n fit: BoxFit.contain, // otherwise the logo will be tiny\n child: const FlutterLogo(),\n ),\n ),\n ],\n)\n```\n\n## Troubleshooting\n\n### Why does my row have a yellow and black warning stripe?\n\nIf the non-flexible contents of the row (those that are not wrapped in\n[Expanded] or [Flexible] widgets) are together wider than the row itself,\nthen the row is said to have overflowed. When a row overflows, the row does\nnot have any remaining space to share between its [Expanded] and [Flexible]\nchildren. The row reports this by drawing a yellow and black striped\nwarning box on the edge that is overflowing. If there is room on the outside\nof the row, the amount of overflow is printed in red lettering.\n\n\n#### Story time\n\nSuppose, for instance, that you had this code:\n\n```dart\nRow(\n children: <Widget>[\n const FlutterLogo(),\n const Text('Flutter\\'s hot reload helps you quickly and easily experiment, build UIs, add features, and fix bug faster. Experience sub-second reload times, without losing state, on emulators, simulators, and hardware for iOS and Android.'),\n const Icon(Icons.sentiment_very_satisfied),\n ],\n)\n```\n\nThe row first asks its first child, the [FlutterLogo], to lay out, at\nwhatever size the logo would like. The logo is friendly and happily decides\nto be 24 pixels to a side. This leaves lots of room for the next child. The\nrow then asks that next child, the text, to lay out, at whatever size it\nthinks is best.\n\nAt this point, the text, not knowing how wide is too wide, says \"Ok, I will\nbe thiiiiiiiiiiiiiiiiiiiis wide.\", and goes well beyond the space that the\nrow has available, not wrapping. The row responds, \"That's not fair, now I\nhave no more room available for my other children!\", and gets angry and\nsprouts a yellow and black strip.\n\nThe fix is to wrap the second child in an [Expanded] widget, which tells the\nrow that the child should be given the remaining room:\n\n```dart\nRow(\n children: <Widget>[\n const FlutterLogo(),\n const Expanded(\n child: Text('Flutter\\'s hot reload helps you quickly and easily experiment, build UIs, add features, and fix bug faster. Experience sub-second reload times, without losing state, on emulators, simulators, and hardware for iOS and Android.'),\n ),\n const Icon(Icons.sentiment_very_satisfied),\n ],\n)\n```\n\nNow, the row first asks the logo to lay out, and then asks the _icon_ to lay\nout. The [Icon], like the logo, is happy to take on a reasonable size (also\n24 pixels, not coincidentally, since both [FlutterLogo] and [Icon] honor the\nambient [IconTheme]). This leaves some room left over, and now the row tells\nthe text exactly how wide to be: the exact width of the remaining space. The\ntext, now happy to comply to a reasonable request, wraps the text within\nthat width, and you end up with a paragraph split over several lines.\n\n## Layout algorithm\n\n_This section describes how a [Row] is rendered by the framework._\n_See [BoxConstraints] for an introduction to box layout models._\n\nLayout for a [Row] proceeds in six steps:\n\n1. Layout each child a null or zero flex factor (e.g., those that are not\n [Expanded]) with unbounded horizontal constraints and the incoming\n vertical constraints. If the [crossAxisAlignment] is\n [CrossAxisAlignment.stretch], instead use tight vertical constraints that\n match the incoming max height.\n2. Divide the remaining horizontal space among the children with non-zero\n flex factors (e.g., those that are [Expanded]) according to their flex\n factor. For example, a child with a flex factor of 2.0 will receive twice\n the amount of horizontal space as a child with a flex factor of 1.0.\n3. Layout each of the remaining children with the same vertical constraints\n as in step 1, but instead of using unbounded horizontal constraints, use\n horizontal constraints based on the amount of space allocated in step 2.\n Children with [Flexible.fit] properties that are [FlexFit.tight] are\n given tight constraints (i.e., forced to fill the allocated space), and\n children with [Flexible.fit] properties that are [FlexFit.loose] are\n given loose constraints (i.e., not forced to fill the allocated space).\n4. The height of the [Row] is the maximum height of the children (which will\n always satisfy the incoming vertical constraints).\n5. The width of the [Row] is determined by the [mainAxisSize] property. If\n the [mainAxisSize] property is [MainAxisSize.max], then the width of the\n [Row] is the max width of the incoming constraints. If the [mainAxisSize]\n property is [MainAxisSize.min], then the width of the [Row] is the sum\n of widths of the children (subject to the incoming constraints).\n6. Determine the position for each child according to the\n [mainAxisAlignment] and the [crossAxisAlignment]. For example, if the\n [mainAxisAlignment] is [MainAxisAlignment.spaceBetween], any horizontal\n space that has not been allocated to children is divided evenly and\n placed between the children.\n\nSee also:\n\n * [Column], for a vertical equivalent.\n * [Flex], if you don't know in advance if you want a horizontal or vertical\n arrangement.\n * [Expanded], to indicate children that should take all the remaining room.\n * [Flexible], to indicate children that should share the remaining room but\n that may by sized smaller (leaving some remaining room unused).\n * [Spacer], a widget that takes up space proportional to it's flex value.\n * The [catalog of layout widgets](https://flutter.dev/widgets/layout/).",
"detail": "",
"kind": 7,
"label": "Row"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FixedExtentScrollPhysics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A snapping physics that always lands directly on items instead of anywhere\nwithin the scroll extent.\n\nBehaves similarly to a slot machine wheel except the ballistics simulation\nnever overshoots and rolls back within a single item if it's to settle on\nthat item.\n\nMust be used with a scrollable that uses a [FixedExtentScrollController].\n\nDefers back to the parent beyond the scroll extents.",
"detail": "",
"kind": 7,
"label": "FixedExtentScrollPhysics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OutlineButton",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Similar to a [FlatButton] with a thin grey rounded rectangle border.\n\nThe outline button's border shape is defined by [shape]\nand its appearance is defined by [borderSide], [disabledBorderColor],\nand [highlightedBorderColor]. By default the border is a one pixel\nwide grey rounded rectangle that does not change when the button is\npressed or disabled. By default the button's background is transparent.\n\nIf the [onPressed] callback is null, then the button will be disabled and by\ndefault will resemble a flat button in the [disabledColor].\n\nThe button's [highlightElevation], which defines the size of the\ndrop shadow when the button is pressed, is 0.0 (no shadow) by default.\nIf [highlightElevation] is given a value greater than 0.0 then the button\nbecomes a cross between [RaisedButton] and [FlatButton]: a bordered\nbutton whose elevation increases and whose background becomes opaque\nwhen the button is pressed.\n\nIf you want an ink-splash effect for taps, but don't want to use a button,\nconsider using [InkWell] directly.\n\nOutline buttons have a minimum size of 88.0 by 36.0 which can be overridden\nwith [ButtonTheme].\n\nSee also:\n\n * [RaisedButton], a filled material design button with a shadow.\n * [FlatButton], a material design button without a shadow.\n * [DropdownButton], a button that shows options to select from.\n * [FloatingActionButton], the round button in material applications.\n * [IconButton], to create buttons that just contain icons.\n * [InkWell], which implements the ink splash part of a flat button.\n * <https://material.io/design/components/buttons.html>",
"detail": "",
"kind": 7,
"label": "OutlineButton"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DecorationImage",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An image for a box decoration.\n\nThe image is painted using [paintImage], which describes the meanings of the\nvarious fields on this class in more detail.",
"detail": "",
"kind": 7,
"label": "DecorationImage"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedOpacity",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [Opacity] which automatically transitions the child's\nopacity over a given duration whenever the given opacity changes.\n\nAnimating an opacity is relatively expensive because it requires painting\nthe child into an intermediate buffer.\n\nHere's an illustration of what using this widget looks like, using a [curve]\nof [Curves.fastOutSlowIn].\n\n\n```dart\nclass LogoFade extends StatefulWidget {\n @override\n createState() => LogoFadeState();\n}\n\nclass LogoFadeState extends State<LogoFade> {\n double opacityLevel = 1.0;\n\n void _changeOpacity() {\n setState(() => opacityLevel = opacityLevel == 0 ? 1.0 : 0.0);\n }\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: [\n AnimatedOpacity(\n opacity: opacityLevel,\n duration: Duration(seconds: 3),\n child: FlutterLogo(),\n ),\n RaisedButton(\n child: Text('Fade Logo'),\n onPressed: _changeOpacity,\n ),\n ],\n );\n }\n}\n```\n\nSee also:\n\n * [FadeTransition], an explicitly animated version of this widget, where\n an [Animation] is provided by the caller instead of being built in.",
"detail": "",
"kind": 7,
"label": "AnimatedOpacity"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationStatusListener",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for listeners attached using [Animation.addStatusListener].",
"detail": "(AnimationStatus status) → void",
"kind": 7,
"label": "AnimationStatusListener"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FloatingActionButtonThemeData",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines default property values for descendant [FloatingActionButton]\nwidgets.\n\nDescendant widgets obtain the current [FloatingActionButtonThemeData] object\nusing `Theme.of(context).floatingActionButtonTheme`. Instances of\n[FloatingActionButtonThemeData] can be customized with\n[FloatingActionButtonThemeData.copyWith].\n\nTypically a [FloatingActionButtonThemeData] is specified as part of the\noverall [Theme] with [ThemeData.floatingActionButtonTheme].\n\nAll [FloatingActionButtonThemeData] properties are `null` by default.\nWhen null, the [FloatingActionButton] will use the values from [ThemeData]\nif they exist, otherwise it will provide its own defaults.\n\nSee also:\n\n * [ThemeData], which describes the overall theme information for the\n application.",
"detail": "",
"kind": 7,
"label": "FloatingActionButtonThemeData"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RawKeyboardListener",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that calls a callback whenever the user presses or releases a key\non a keyboard.\n\nA [RawKeyboardListener] is useful for listening to raw key events and\nhardware buttons that are represented as keys. Typically used by games and\nother apps that use keyboards for purposes other than text entry.\n\nFor text entry, consider using a [EditableText], which integrates with\non-screen keyboards and input method editors (IMEs).\n\nSee also:\n\n * [EditableText], which should be used instead of this widget for text\n entry.",
"detail": "",
"kind": 7,
"label": "RawKeyboardListener"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlippedCurve",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A curve that is the reversed inversion of its given curve.\n\nThis curve evaluates the given curve in reverse (i.e., from 1.0 to 0.0 as t\nincreases from 0.0 to 1.0) and returns the inverse of the given curve's\nvalue (i.e., 1.0 minus the given curve's value).\n\nThis is the class used to implement the [flipped] getter on curves.\n\nThis is often useful with [CurvedAnimation.reverseCurve].\n\n\nSee also:\n\n * [Curve.flipped], which provides the [FlippedCurve] of a [Curve].\n * [ReverseAnimation], which reverses an [Animation] rather than a [Curve].\n * [CurvedAnimation], which can take a separate curve and reverse curve.",
"detail": "",
"kind": 7,
"label": "FlippedCurve"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DropdownButtonFormField",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A convenience widget that wraps a [DropdownButton] in a [FormField].",
"detail": "",
"kind": 7,
"label": "DropdownButtonFormField"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OverlayEntry",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A place in an [Overlay] that can contain a widget.\n\nOverlay entries are inserted into an [Overlay] using the\n[OverlayState.insert] or [OverlayState.insertAll] functions. To find the\nclosest enclosing overlay for a given [BuildContext], use the [Overlay.of]\nfunction.\n\nAn overlay entry can be in at most one overlay at a time. To remove an entry\nfrom its overlay, call the [remove] function on the overlay entry.\n\nBecause an [Overlay] uses a [Stack] layout, overlay entries can use\n[Positioned] and [AnimatedPositioned] to position themselves within the\noverlay.\n\nFor example, [Draggable] uses an [OverlayEntry] to show the drag avatar that\nfollows the user's finger across the screen after the drag begins. Using the\noverlay to display the drag avatar lets the avatar float over the other\nwidgets in the app. As the user's finger moves, draggable calls\n[markNeedsBuild] on the overlay entry to cause it to rebuild. It its build,\nthe entry includes a [Positioned] with its top and left property set to\nposition the drag avatar near the user's finger. When the drag is over,\n[Draggable] removes the entry from the overlay to remove the drag avatar\nfrom view.\n\nBy default, if there is an entirely [opaque] entry over this one, then this\none will not be included in the widget tree (in particular, stateful widgets\nwithin the overlay entry will not be instantiated). To ensure that your\noverlay entry is still built even if it is not visible, set [maintainState]\nto true. This is more expensive, so should be done with care. In particular,\nif widgets in an overlay entry with [maintainState] set to true repeatedly\ncall [State.setState], the user's battery will be drained unnecessarily.\n\nSee also:\n\n * [Overlay]\n * [OverlayState]\n * [WidgetsApp]\n * [MaterialApp]",
"detail": "",
"kind": 7,
"label": "OverlayEntry"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "HoldScrollActivity",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A scroll activity that does nothing but can be released to resume\nnormal idle behavior.\n\nThis is used while the user is touching the [Scrollable] but before the\ntouch has become a [Drag].\n\nFor the purposes of [ScrollNotification]s, this activity does not constitute\nscrolling, and does not prevent the user from interacting with the contents\nof the [Scrollable] (unlike when a drag has begun or there is a scroll\nanimation underway).",
"detail": "",
"kind": 7,
"label": "HoldScrollActivity"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ExpansionPanelList",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material expansion panel list that lays out its children and animates\nexpansions.\n\n\nHere is a simple example of how to implement ExpansionPanelList.\n\n```dart\n// stores ExpansionPanel state information\nclass Item {\n Item({\n this.expandedValue,\n this.headerValue,\n this.isExpanded = false,\n });\n\n String expandedValue;\n String headerValue;\n bool isExpanded;\n}\n\nList<Item> generateItems(int numberOfItems) {\n return List.generate(numberOfItems, (int index) {\n return Item(\n headerValue: 'Panel $index',\n expandedValue: 'This is item number $index',\n );\n });\n}\n```\n\n```dart\nList<Item> _data = generateItems(8);\n\n@override\nWidget build(BuildContext context) {\n return SingleChildScrollView(\n child: Container(\n child: _buildPanel(),\n ),\n );\n}\n\nWidget _buildPanel() {\n return ExpansionPanelList(\n expansionCallback: (int index, bool isExpanded) {\n setState(() {\n _data[index].isExpanded = !isExpanded;\n });\n },\n children: _data.map<ExpansionPanel>((Item item) {\n return ExpansionPanel(\n headerBuilder: (BuildContext context, bool isExpanded) {\n return ListTile(\n title: Text(item.headerValue),\n );\n },\n body: ListTile(\n title: Text(item.expandedValue),\n subtitle: Text('To delete this panel, tap the trash can icon'),\n trailing: Icon(Icons.delete),\n onTap: () {\n setState(() {\n _data.removeWhere((currentItem) => item == currentItem);\n });\n }\n ),\n isExpanded: item.isExpanded,\n );\n }).toList(),\n );\n}\n```\n\nSee also:\n\n * [ExpansionPanel]\n * [ExpansionPanelList.radio]\n * <https://material.io/design/components/lists.html#types>",
"detail": "",
"kind": 7,
"label": "ExpansionPanelList"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ImageShader",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A shader (as used by [Paint.shader]) that tiles an image.",
"detail": "",
"kind": 7,
"label": "ImageShader"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliderTheme",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Applies a slider theme to descendant [Slider] widgets.\n\nA slider theme describes the colors and shape choices of the slider\ncomponents.\n\nDescendant widgets obtain the current theme's [SliderThemeData] object using\n[SliderTheme.of]. When a widget uses [SliderTheme.of], it is automatically\nrebuilt if the theme later changes.\n\nThe slider is as big as the largest of\nthe [SliderComponentShape.getPreferredSize] of the thumb shape,\nthe [SliderComponentShape.getPreferredSize] of the overlay shape,\nand the [SliderTickMarkShape.getPreferredSize] of the tick mark shape\n\nSee also:\n\n * [SliderThemeData], which describes the actual configuration of a slider\n theme.\n * [SliderComponentShape], which can be used to create custom shapes for\n the slider thumb, overlay, and value indicator.\n * [SliderTrackShape], which can be used to create custom shapes for the\n slider track.\n * [SliderTickMarkShape], which can be used to create custom shapes for the\n slider tick marks.",
"detail": "",
"kind": 7,
"label": "SliderTheme"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ValueListenableBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget whose content stays synced with a [ValueListenable].\n\nGiven a [ValueListenable<T>] and a [builder] which builds widgets from\nconcrete values of `T`, this class will automatically register itself as a\nlistener of the [ValueListenable] and call the [builder] with updated values\nwhen the value changes.\n\n## Performance optimizations\n\nIf your [builder] function contains a subtree that does not depend on the\nvalue of the [ValueListenable], it's more efficient to build that subtree\nonce instead of rebuilding it on every animation tick.\n\nIf you pass the pre-built subtree as the [child] parameter, the\n[ValueListenableBuilder] will pass it back to your [builder] function so\nthat you can incorporate it into your build.\n\nUsing this pre-built child is entirely optional, but can improve\nperformance significantly in some cases and is therefore a good practice.\n\n\nThis sample shows how you could use a [ValueListenableBuilder] instead of\nsetting state on the whole [Scaffold] in the default `flutter create` app.\n\n```dart\nclass MyHomePage extends StatefulWidget {\n MyHomePage({Key key, this.title}) : super(key: key);\n final String title;\n\n @override\n _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n final ValueNotifier<int> _counter = ValueNotifier<int>(0);\n final Widget goodJob = const Text('Good job!');\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text(widget.title)\n ),\n body: Center(\n child: Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: <Widget>[\n Text('You have pushed the button this many times:'),\n ValueListenableBuilder(\n builder: (BuildContext context, int value, Widget child) {\n // This builder will only get called when the _counter\n // is updated.\n return Row(\n mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n children: <Widget>[\n Text('$value'),\n child,\n ],\n );\n },\n valueListenable: _counter,\n // The child parameter is most helpful if the child is\n // expensive to build and does not depend on the value from\n // the notifier.\n child: goodJob,\n )\n ],\n ),\n ),\n floatingActionButton: FloatingActionButton(\n child: Icon(Icons.plus_one),\n onPressed: () => _counter.value += 1,\n ),\n );\n }\n}\n```\n\nSee also:\n\n * [AnimatedBuilder], which also triggers rebuilds from a [Listenable]\n without passing back a specific value from a [ValueListenable].\n * [NotificationListener], which lets you rebuild based on [Notification]\n coming from its descendant widgets rather than a [ValueListenable] that\n you have a direct reference to.\n * [StreamBuilder], where a builder can depend on a [Stream] rather than\n a [ValueListenable] for more advanced use cases.",
"detail": "",
"kind": 7,
"label": "ValueListenableBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TransitionRoute",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A route with entrance and exit transitions.",
"detail": "",
"kind": 7,
"label": "TransitionRoute"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RoutePageBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the function that builds a route's primary contents.\nUsed in [PageRouteBuilder] and [showGeneralDialog].\n\nSee [ModalRoute.buildPage] for complete definition of the parameters.",
"detail": "(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) → Widget",
"kind": 7,
"label": "RoutePageBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollableWidgetBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The signature of a method that provides a [BuildContext] and\n[ScrollController] for building a widget that may overflow the draggable\n[Axis] of the containing [DraggableScrollSheet].\n\nUsers should apply the [scrollController] to a [ScrollView] subclass, such\nas a [SingleChildScrollView], [ListView] or [GridView], to have the whole\nsheet be draggable.",
"detail": "(BuildContext context, ScrollController scrollController) → Widget",
"kind": 7,
"label": "ScrollableWidgetBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TableColumnWidth",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class to describe how wide a column in a [RenderTable] should be.\n\nTo size a column to a specific number of pixels, use a [FixedColumnWidth].\nThis is the cheapest way to size a column.\n\nOther algorithms that are relatively cheap include [FlexColumnWidth], which\ndistributes the space equally among the flexible columns,\n[FractionColumnWidth], which sizes a column based on the size of the\ntable's container.",
"detail": "",
"kind": 7,
"label": "TableColumnWidth"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OrientationWidgetBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for a function that builds a widget given an [Orientation].\n\nUsed by [OrientationBuilder.builder].",
"detail": "(BuildContext context, Orientation orientation) → Widget",
"kind": 7,
"label": "OrientationWidgetBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureForcePressEndCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for when the pointer that previously triggered a\n[ForcePressGestureRecognizer.onStart] callback is no longer in contact\nwith the screen.",
"detail": "(ForcePressDetails details) → void",
"kind": 7,
"label": "GestureForcePressEndCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ErrorWidgetBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the constructor that is called when an error occurs while\nbuilding a widget.\n\nThe argument provides information regarding the cause of the error.\n\nSee also:\n\n * [ErrorWidget.builder], which can be set to override the default\n [ErrorWidget] builder.\n * [FlutterError.reportError], which is typically called with the same\n [FlutterErrorDetails] object immediately prior to [ErrorWidget.builder]\n being called.",
"detail": "(FlutterErrorDetails details) → Widget",
"kind": 7,
"label": "ErrorWidgetBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollBehavior",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Describes how [Scrollable] widgets should behave.\n\nUsed by [ScrollConfiguration] to configure the [Scrollable] widgets in a\nsubtree.",
"detail": "",
"kind": 7,
"label": "ScrollBehavior"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DragTargetAccept",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for causing a [DragTarget] to accept the given data.\n\nUsed by [DragTarget.onAccept].",
"detail": "(T data) → void",
"kind": 7,
"label": "DragTargetAccept"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PopupMenuItemSelected",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the callback invoked when a menu item is selected. The\nargument is the value of the [PopupMenuItem] that caused its menu to be\ndismissed.\n\nUsed by [PopupMenuButton.onSelected].",
"detail": "(T value) → void",
"kind": 7,
"label": "PopupMenuItemSelected"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ProxyWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that has a child widget provided to it, instead of building a new\nwidget.\n\nUseful as a base class for other widgets, such as [InheritedWidget] and\n[ParentDataWidget].\n\nSee also:\n\n * [InheritedWidget], for widgets that introduce ambient state that can\n be read by descendant widgets.\n * [ParentDataWidget], for widgets that populate the\n [RenderObject.parentData] slot of their child's [RenderObject] to\n configure the parent widget's layout.\n * [StatefulWidget] and [State], for widgets that can build differently\n several times over their lifetime.\n * [StatelessWidget], for widgets that always build the same way given a\n particular configuration and ambient state.\n * [Widget], for an overview of widgets in general.",
"detail": "",
"kind": 7,
"label": "ProxyWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SingleTickerProviderStateMixin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Provides a single [Ticker] that is configured to only tick while the current\ntree is enabled, as defined by [TickerMode].\n\nTo create the [AnimationController] in a [State] that only uses a single\n[AnimationController], mix in this class, then pass `vsync: this`\nto the animation controller constructor.\n\nThis mixin only supports vending a single ticker. If you might have multiple\n[AnimationController] objects over the lifetime of the [State], use a full\n[TickerProviderStateMixin] instead.",
"detail": "",
"kind": 7,
"label": "SingleTickerProviderStateMixin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ExpandIcon",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget representing a rotating expand/collapse button. The icon rotates\n180 degrees when pressed, then reverts the animation on a second press.\nThe underlying icon is [Icons.expand_more].\n\nThe expand icon does not include a semantic label for accessibility. In\norder to be accessible it should be combined with a label using\n[MergeSemantics]. This is done automatically by the [ExpansionPanel] widget.\n\nSee [IconButton] for a more general implementation of a pressable button\nwith an icon.",
"detail": "",
"kind": 7,
"label": "ExpandIcon"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "NeverScrollableScrollPhysics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Scroll physics that does not allow the user to scroll.\n\nSee also:\n\n * [ScrollPhysics], which can be used instead of this class when the default\n behavior is desired instead.\n * [BouncingScrollPhysics], which provides the bouncing overscroll behavior\n found on iOS.\n * [ClampingScrollPhysics], which provides the clamping overscroll behavior\n found on Android.",
"detail": "",
"kind": 7,
"label": "NeverScrollableScrollPhysics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InspectorSelectionChangedCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the selection change callback used by\n[WidgetInspectorService.selectionChangedCallback].",
"detail": "() → void",
"kind": 7,
"label": "InspectorSelectionChangedCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An immutable style in which paint text.\n\n### Bold\n\nHere, a single line of text in a [Text] widget is given a specific style\noverride. The style is mixed with the ambient [DefaultTextStyle] by the\n[Text] widget.\n\n```dart\nText(\n 'No, we need bold strokes. We need this plan.',\n style: TextStyle(fontWeight: FontWeight.bold),\n)\n```\n\n### Italics\n\nAs in the previous example, the [Text] widget is given a specific style\noverride which is implicitly mixed with the ambient [DefaultTextStyle].\n\n```dart\nText(\n 'Welcome to the present, we\\'re running a real nation.',\n style: TextStyle(fontStyle: FontStyle.italic),\n)\n```\n\n### Opacity and Color\n\nEach line here is progressively more opaque. The base color is\n[material.Colors.black], and [Color.withOpacity] is used to create a\nderivative color with the desired opacity. The root [TextSpan] for this\n[RichText] widget is explicitly given the ambient [DefaultTextStyle], since\n[RichText] does not do that automatically. The inner [TextStyle] objects are\nimplicitly mixed with the parent [TextSpan]'s [TextSpan.style].\n\nIf [color] is specified, [foreground] must be null and vice versa. [color] is\ntreated as a shorthand for `Paint()..color = color`.\n\nIf [backgroundColor] is specified, [background] must be null and vice versa.\nThe [backgroundColor] is treated as a shorthand for\n`background: Paint()..color = backgroundColor`.\n\n```dart\nRichText(\n text: TextSpan(\n style: DefaultTextStyle.of(context).style,\n children: <TextSpan>[\n TextSpan(\n text: 'You don\\'t have the votes.\\n',\n style: TextStyle(color: Colors.black.withOpacity(0.6)),\n ),\n TextSpan(\n text: 'You don\\'t have the votes!\\n',\n style: TextStyle(color: Colors.black.withOpacity(0.8)),\n ),\n TextSpan(\n text: 'You\\'re gonna need congressional approval and you don\\'t have the votes!\\n',\n style: TextStyle(color: Colors.black.withOpacity(1.0)),\n ),\n ],\n ),\n)\n```\n\n### Size\n\nIn this example, the ambient [DefaultTextStyle] is explicitly manipulated to\nobtain a [TextStyle] that doubles the default font size.\n\n```dart\nText(\n 'These are wise words, enterprising men quote \\'em.',\n style: DefaultTextStyle.of(context).style.apply(fontSizeFactor: 2.0),\n)\n```\n\n### Line height\n\nThe [height] property can be used to change the line height. Here, the line\nheight is set to 5 times the font size, so that the text is very spaced out.\n\n```dart\nText(\n 'Don\\'t act surprised, you guys, cuz I wrote \\'em!',\n style: TextStyle(height: 5.0),\n)\n```\n\n### Wavy red underline with black text\n\nStyles can be combined. In this example, the misspelt word is drawn in black\ntext and underlined with a wavy red line to indicate a spelling error. (The\nremainder is styled according to the Flutter default text styles, not the\nambient [DefaultTextStyle], since no explicit style is given and [RichText]\ndoes not automatically use the ambient [DefaultTextStyle].)\n\n```dart\nRichText(\n text: TextSpan(\n text: 'Don\\'t tax the South ',\n children: <TextSpan>[\n TextSpan(\n text: 'cuz',\n style: TextStyle(\n color: Colors.black,\n decoration: TextDecoration.underline,\n decorationColor: Colors.red,\n decorationStyle: TextDecorationStyle.wavy,\n ),\n ),\n TextSpan(\n text: ' we got it made in the shade',\n ),\n ],\n ),\n)\n```\n\n### Custom Fonts\n\nCustom fonts can be declared in the `pubspec.yaml` file as shown below:\n\n```yaml\nflutter:\n fonts:\n - family: Raleway\n fonts:\n - asset: fonts/Raleway-Regular.ttf\n - asset: fonts/Raleway-Medium.ttf\n weight: 500\n - asset: assets/fonts/Raleway-SemiBold.ttf\n weight: 600\n - family: Schyler\n fonts:\n - asset: fonts/Schyler-Regular.ttf\n - asset: fonts/Schyler-Italic.ttf\n style: italic\n```\n\nThe `family` property determines the name of the font, which you can use in\nthe [fontFamily] argument. The `asset` property is a path to the font file,\nrelative to the `pubspec.yaml` file. The `weight` property specifies the\nweight of the glyph outlines in the file as an integer multiple of 100\nbetween 100 and 900. This corresponds to the [FontWeight] class and can be\nused in the [fontWeight] argument. The `style` property specifies whether the\noutlines in the file are `italic` or `normal`. These values correspond to\nthe [FontStyle] class and can be used in the [fontStyle] argument.\n\nTo select a custom font, create [TextStyle] using the [fontFamily]\nargument as shown in the example below:\n\n```dart\nconst TextStyle(fontFamily: 'Raleway')\n```\n\nTo use a font family defined in a package, the [package] argument must be\nprovided. For instance, suppose the font declaration above is in the\n`pubspec.yaml` of a package named `my_package` which the app depends on.\nThen creating the TextStyle is done as follows:\n\n```dart\nconst TextStyle(fontFamily: 'Raleway', package: 'my_package')\n```\n\nIf the package internally uses the font it defines, it should still specify\nthe `package` argument when creating the text style as in the example above.\n\nA package can also provide font files without declaring a font in its\n`pubspec.yaml`. These files should then be in the `lib/` folder of the\npackage. The font files will not automatically be bundled in the app, instead\nthe app can use these selectively when declaring a font. Suppose a package\nnamed `my_package` has:\n\n```\nlib/fonts/Raleway-Medium.ttf\n```\n\nThen the app can declare a font like in the example below:\n\n```yaml\nflutter:\n fonts:\n - family: Raleway\n fonts:\n - asset: assets/fonts/Raleway-Regular.ttf\n - asset: packages/my_package/fonts/Raleway-Medium.ttf\n weight: 500\n```\n\nThe `lib/` is implied, so it should not be included in the asset path.\n\nIn this case, since the app locally defines the font, the TextStyle is\ncreated without the `package` argument:\n\n```dart\nconst TextStyle(fontFamily: 'Raleway')\n```\n\n### Custom Font Fallback\n\nA custom [fontFamilyFallback] list can be provided. The list should be an\nordered list of strings of font family names in the order they will be attempted.\n\nThe fonts in [fontFamilyFallback] will be used only if the requested glyph is\nnot present in the [fontFamily].\n\nThe fallback order is:\n\n * [fontFamily]\n * [fontFamilyFallback] in order of first to last.\n\nThe glyph used will always be the first matching version in fallback order.\n\nThe [fontFamilyFallback] property is commonly used to specify different font\nfamilies for multilingual text spans as well as separate fonts for glyphs such\nas emojis.\n\nIn the following example, any glyphs not present in the font `Raleway` will be attempted\nto be resolved with `Noto Sans CJK SC`, and then with `Noto Color Emoji`:\n\n```dart\nconst TextStyle(\n fontFamily: 'Raleway',\n fontFamilyFallback: <String>[\n 'Noto Sans CJK SC',\n 'Noto Color Emoji',\n ],\n)\n```\n\nIf all custom fallback font families are exhausted and no match was found\nor no custom fallback was provided, the platform font fallback will be used.\n\n### Inconsistent platform fonts\n\nSince Flutter's font discovery for default fonts depends on the fonts present\non the device, it is not safe to assume all default fonts will be available or\nconsistent across devices.\n\nA known example of this is that Samsung devices ship with a CJK font that has\nsmaller line spacing than the Android default. This results in Samsung devices\ndisplaying more tightly spaced text than on other Android devices when no\ncustom font is specified.\n\nTo avoid this, a custom font should be specified if absolute font consistency\nis required for your application.\n\nSee also:\n\n * [Text], the widget for showing text in a single style.\n * [DefaultTextStyle], the widget that specifies the default text styles for\n [Text] widgets, configured using a [TextStyle].\n * [RichText], the widget for showing a paragraph of mix-style text.\n * [TextSpan], the class that wraps a [TextStyle] for the purposes of\n passing it to a [RichText].\n * [TextStyle](https://api.flutter.dev/flutter/dart-ui/TextStyle-class.html), the class in the [dart:ui] library.\n",
"detail": "",
"kind": 7,
"label": "TextStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RectCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the callback used by ink effects to obtain the rectangle for the effect.\n\nUsed by [InkHighlight] and [InkSplash], for example.",
"detail": "() → Rect",
"kind": 7,
"label": "RectCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LinearProgressIndicator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design linear progress indicator, also known as a progress bar.\n\nA widget that shows progress along a line. There are two kinds of linear\nprogress indicators:\n\n * _Determinate_. Determinate progress indicators have a specific value at\n each point in time, and the value should increase monotonically from 0.0\n to 1.0, at which time the indicator is complete. To create a determinate\n progress indicator, use a non-null [value] between 0.0 and 1.0.\n * _Indeterminate_. Indeterminate progress indicators do not have a specific\n value at each point in time and instead indicate that progress is being\n made without indicating how much progress remains. To create an\n indeterminate progress indicator, use a null [value].\n\nThe indicator line is displayed with [valueColor], an animated value. To\nspecify a constant color value use: `AlwaysStoppedAnimation<Color>(color)`.\n\nSee also:\n\n * [CircularProgressIndicator], which shows progress along a circular arc.\n * [RefreshIndicator], which automatically displays a [CircularProgressIndicator]\n when the underlying vertical scrollable is overscrolled.\n * <https://material.io/design/components/progress-indicators.html#linear-progress-indicators>",
"detail": "",
"kind": 7,
"label": "LinearProgressIndicator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedSwitcher",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that by default does a [FadeTransition] between a new widget and\nthe widget previously set on the [AnimatedSwitcher] as a child.\n\nIf they are swapped fast enough (i.e. before [duration] elapses), more than\none previous child can exist and be transitioning out while the newest one\nis transitioning in.\n\nIf the \"new\" child is the same widget type and key as the \"old\" child, but\nwith different parameters, then [AnimatedSwitcher] will *not* do a\ntransition between them, since as far as the framework is concerned, they\nare the same widget and the existing widget can be updated with the new\nparameters. To force the transition to occur, set a [Key] on each child\nwidget that you wish to be considered unique (typically a [ValueKey] on the\nwidget data that distinguishes this child from the others).\n\nThe same key can be used for a new child as was used for an already-outgoing\nchild; the two will not be considered related. (For example, if a progress\nindicator with key A is first shown, then an image with key B, then another\nprogress indicator with key A again, all in rapid succession, then the old\nprogress indicator and the image will be fading out while a new progress\nindicator is fading in.)\n\n\n```dart\nclass ClickCounter extends StatefulWidget {\n const ClickCounter({Key key}) : super(key: key);\n\n @override\n _ClickCounterState createState() => _ClickCounterState();\n}\n\nclass _ClickCounterState extends State<ClickCounter> {\n int _count = 0;\n\n @override\n Widget build(BuildContext context) {\n return MaterialApp(\n home: Material(\n child: Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: <Widget>[\n AnimatedSwitcher(\n duration: const Duration(milliseconds: 500),\n transitionBuilder: (Widget child, Animation<double> animation) {\n return ScaleTransition(child: child, scale: animation);\n },\n child: Text(\n '$_count',\n // This key causes the AnimatedSwitcher to interpret this as a \"new\"\n // child each time the count changes, so that it will begin its animation\n // when the count changes.\n key: ValueKey<int>(_count),\n style: Theme.of(context).textTheme.display1,\n ),\n ),\n RaisedButton(\n child: const Text('Increment'),\n onPressed: () {\n setState(() {\n _count += 1;\n });\n },\n ),\n ],\n ),\n ),\n );\n }\n}\n```\n\nSee also:\n\n * [AnimatedCrossFade], which only fades between two children, but also\n interpolates their sizes, and is reversible.\n * [FadeTransition] which [AnimatedSwitcher] uses to perform the transition.",
"detail": "",
"kind": 7,
"label": "AnimatedSwitcher"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BoxConstraints",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Immutable layout constraints for [RenderBox] layout.\n\nA [Size] respects a [BoxConstraints] if, and only if, all of the following\nrelations hold:\n\n* [minWidth] <= [Size.width] <= [maxWidth]\n* [minHeight] <= [Size.height] <= [maxHeight]\n\nThe constraints themselves must satisfy these relations:\n\n* 0.0 <= [minWidth] <= [maxWidth] <= [double.infinity]\n* 0.0 <= [minHeight] <= [maxHeight] <= [double.infinity]\n\n[double.infinity] is a legal value for each constraint.\n\n## The box layout model\n\nRender objects in the Flutter framework are laid out by a one-pass layout\nmodel which walks down the render tree passing constraints, then walks back\nup the render tree passing concrete geometry.\n\nFor boxes, the constraints are [BoxConstraints], which, as described herein,\nconsist of four numbers: a minimum width [minWidth], a maximum width\n[maxWidth], a minimum height [minHeight], and a maximum height [maxHeight].\n\nThe geometry for boxes consists of a [Size], which must satisfy the\nconstraints described above.\n\nEach [RenderBox] (the objects that provide the layout models for box\nwidgets) receives [BoxConstraints] from its parent, then lays out each of\nits children, then picks a [Size] that satisfies the [BoxConstraints].\n\nRender objects position their children independently of laying them out.\nFrequently, the parent will use the children's sizes to determine their\nposition. A child does not know its position and will not necessarily be\nlaid out again, or repainted, if its position changes.\n\n## Terminology\n\nWhen the minimum constraints and the maximum constraint in an axis are the\nsame, that axis is _tightly_ constrained. See: [new\nBoxConstraints.tightFor], [new BoxConstraints.tightForFinite], [tighten],\n[hasTightWidth], [hasTightHeight], [isTight].\n\nAn axis with a minimum constraint of 0.0 is _loose_ (regardless of the\nmaximum constraint; if it is also 0.0, then the axis is simultaneously tight\nand loose!). See: [new BoxConstraints.loose], [loosen].\n\nAn axis whose maximum constraint is not infinite is _bounded_. See:\n[hasBoundedWidth], [hasBoundedHeight].\n\nAn axis whose maximum constraint is infinite is _unbounded_. An axis is\n_expanding_ if it is tightly infinite (its minimum and maximum constraints\nare both infinite). See: [new BoxConstraints.expand].\n\nAn axis whose _minimum_ constraint is infinite is just said to be _infinite_\n(since by definition the maximum constraint must also be infinite in that\ncase). See: [hasInfiniteWidth], [hasInfiniteHeight].\n\nA size is _constrained_ when it satisfies a [BoxConstraints] description.\nSee: [constrain], [constrainWidth], [constrainHeight],\n[constrainDimensions], [constrainSizeAndAttemptToPreserveAspectRatio],\n[isSatisfiedBy].",
"detail": "",
"kind": 7,
"label": "BoxConstraints"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TweenSequenceItem",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A simple holder for one element of a [TweenSequence].",
"detail": "",
"kind": 7,
"label": "TweenSequenceItem"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AlignmentTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two alignments.\n\nThis class specializes the interpolation of [Tween<Alignment>] to be\nappropriate for alignments.\n\nSee [Tween] for a discussion on how to use interpolation objects.\n\nSee also:\n\n * [AlignmentGeometryTween], which interpolates between two\n [AlignmentGeometry] objects.",
"detail": "",
"kind": 7,
"label": "AlignmentTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverPrototypeExtentList",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sliver that places its box children in a linear array and constrains them\nto have the same extent as a prototype item along the main axis.\n\n[SliverPrototypeExtentList] arranges its children in a line along\nthe main axis starting at offset zero and without gaps. Each child is\nconstrained to the same extent as the [prototypeItem] along the main axis\nand the [SliverConstraints.crossAxisExtent] along the cross axis.\n\n[SliverPrototypeExtentList] is more efficient than [SliverList] because\n[SliverPrototypeExtentList] does not need to lay out its children to obtain\ntheir extent along the main axis. It's a little more flexible than\n[SliverFixedExtentList] because there's no need to determine the appropriate\nitem extent in pixels.\n\nSee also:\n\n * [SliverFixedExtentList], whose itemExtent is a pixel value.\n * [SliverList], which does not require its children to have the same\n extent in the main axis.\n * [SliverFillViewport], which sizes its children based on the\n size of the viewport, regardless of what else is in the scroll view.\n * [SliverList], which shows a list of variable-sized children in a\n viewport.",
"detail": "",
"kind": 7,
"label": "SliverPrototypeExtentList"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ValueGetter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for callbacks that are to report a value on demand.\n\nSee also:\n\n * [ValueSetter], the setter equivalent of this signature.\n * [AsyncValueGetter], an asynchronous version of this signature.",
"detail": "() → T",
"kind": 7,
"label": "ValueGetter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BorderRadiusDirectional",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An immutable set of radii for each corner of a rectangle, but with the\ncorners specified in a manner dependent on the writing direction.\n\nThis can be used to specify a corner radius on the leading or trailing edge\nof a box, so that it flips to the other side when the text alignment flips\n(e.g. being on the top right in English text but the top left in Arabic\ntext).\n\nSee also:\n\n * [BorderRadius], a variant that uses physical labels (`topLeft` and\n `topRight` instead of `topStart` and `topEnd`).",
"detail": "",
"kind": 7,
"label": "BorderRadiusDirectional"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedIcons",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Identifier for the supported material design animated icons.\n\nUse with [AnimatedIcon] class to show specific animated icons.",
"detail": "",
"kind": 7,
"label": "AnimatedIcons"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollActivityDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A backend for a [ScrollActivity].\n\nUsed by subclasses of [ScrollActivity] to manipulate the scroll view that\nthey are acting upon.\n\nSee also:\n\n * [ScrollActivity], which uses this class as its delegate.\n * [ScrollPositionWithSingleContext], the main implementation of this interface.",
"detail": "",
"kind": 7,
"label": "ScrollActivityDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InkRipple",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A visual reaction on a piece of [Material] to user input.\n\nA circular ink feature whose origin starts at the input touch point and\nwhose radius expands from 60% of the final radius. The splash origin\nanimates to the center of its [referenceBox].\n\nThis object is rarely created directly. Instead of creating an ink ripple,\nconsider using an [InkResponse] or [InkWell] widget, which uses\ngestures (such as tap and long-press) to trigger ink splashes. This class\nis used when the [Theme]'s [ThemeData.splashFactory] is [InkRipple.splashFactory].\n\nSee also:\n\n * [InkSplash], which is an ink splash feature that expands less\n aggressively than the ripple.\n * [InkResponse], which uses gestures to trigger ink highlights and ink\n splashes in the parent [Material].\n * [InkWell], which is a rectangular [InkResponse] (the most common type of\n ink response).\n * [Material], which is the widget on which the ink splash is painted.\n * [InkHighlight], which is an ink feature that emphasizes a part of a\n [Material].",
"detail": "",
"kind": 7,
"label": "InkRipple"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ClipRect",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that clips its child using a rectangle.\n\nBy default, [ClipRect] prevents its child from painting outside its\nbounds, but the size and location of the clip rect can be customized using a\ncustom [clipper].\n\n[ClipRect] is commonly used with these widgets, which commonly paint outside\ntheir bounds:\n\n * [CustomPaint]\n * [CustomSingleChildLayout]\n * [CustomMultiChildLayout]\n * [Align] and [Center] (e.g., if [Align.widthFactor] or\n [Align.heightFactor] is less than 1.0).\n * [OverflowBox]\n * [SizedOverflowBox]\n\n\nFor example, by combining a [ClipRect] with an [Align], one can show just\nthe top half of an [Image]:\n\n```dart\nClipRect(\n child: Align(\n alignment: Alignment.topCenter,\n heightFactor: 0.5,\n child: Image.network(userAvatarUrl),\n ),\n)\n```\n\nSee also:\n\n * [CustomClipper], for information about creating custom clips.\n * [ClipRRect], for a clip with rounded corners.\n * [ClipOval], for an elliptical clip.\n * [ClipPath], for an arbitrarily shaped clip.",
"detail": "",
"kind": 7,
"label": "ClipRect"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PointerUpEvent",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The pointer has stopped making contact with the device.",
"detail": "",
"kind": 7,
"label": "PointerUpEvent"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LayoutId",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Metadata for identifying children in a [CustomMultiChildLayout].\n\nThe [MultiChildLayoutDelegate.hasChild],\n[MultiChildLayoutDelegate.layoutChild], and\n[MultiChildLayoutDelegate.positionChild] methods use these identifiers.",
"detail": "",
"kind": 7,
"label": "LayoutId"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Placeholder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that draws a box that represents where other widgets will one day\nbe added.\n\nThis widget is useful during development to indicate that the interface is\nnot yet complete.\n\nBy default, the placeholder is sized to fit its container. If the\nplaceholder is in an unbounded space, it will size itself according to the\ngiven [fallbackWidth] and [fallbackHeight].",
"detail": "",
"kind": 7,
"label": "Placeholder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Curves",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A collection of common animation curves.\n\n\nSee also:\n\n * [Curve], the interface implemented by the constants available from the\n [Curves] class.",
"detail": "",
"kind": 7,
"label": "Curves"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RebuildDirtyWidgetCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for [debugOnRebuildDirtyWidget] implementations.",
"detail": "(Element e, bool builtOnce) → void",
"kind": 7,
"label": "RebuildDirtyWidgetCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ConfirmDismissCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature used by [Dismissible] to give the application an opportunity to\nconfirm or veto a dismiss gesture.\n\nUsed by [Dismissible.confirmDismiss].",
"detail": "(DismissDirection direction) → Future<bool>",
"kind": 7,
"label": "ConfirmDismissCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverFillViewport",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sliver that contains a multiple box children that each fill the viewport.\n\n[SliverFillViewport] places its children in a linear array along the main\naxis. Each child is sized to fill the viewport, both in the main and cross\naxis.\n\nSee also:\n\n * [SliverFixedExtentList], which has a configurable\n [SliverFixedExtentList.itemExtent].\n * [SliverPrototypeExtentList], which is similar to [SliverFixedExtentList]\n except that it uses a prototype list item instead of a pixel value to define\n the main axis extent of each item.\n * [SliverList], which does not require its children to have the same\n extent in the main axis.",
"detail": "",
"kind": 7,
"label": "SliverFillViewport"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Step",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material step used in [Stepper]. The step can have a title and subtitle,\nan icon within its circle, some content and a state that governs its\nstyling.\n\nSee also:\n\n * [Stepper]\n * <https://material.io/archive/guidelines/components/steppers.html>",
"detail": "",
"kind": 7,
"label": "Step"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationMean",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An animation of [double]s that tracks the mean of two other animations.\n\nThe [status] of this animation is the status of the `right` animation if it is\nmoving, and the `left` animation otherwise.\n\nThe [value] of this animation is the [double] that represents the mean value\nof the values of the `left` and `right` animations.",
"detail": "",
"kind": 7,
"label": "AnimationMean"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextField",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design text field.\n\nA text field lets the user enter text, either with hardware keyboard or with\nan onscreen keyboard.\n\nThe text field calls the [onChanged] callback whenever the user changes the\ntext in the field. If the user indicates that they are done typing in the\nfield (e.g., by pressing a button on the soft keyboard), the text field\ncalls the [onSubmitted] callback.\n\nTo control the text that is displayed in the text field, use the\n[controller]. For example, to set the initial value of the text field, use\na [controller] that already contains some text. The [controller] can also\ncontrol the selection and composing region (and to observe changes to the\ntext, selection, and composing region).\n\nBy default, a text field has a [decoration] that draws a divider below the\ntext field. You can use the [decoration] property to control the decoration,\nfor example by adding a label or an icon. If you set the [decoration]\nproperty to null, the decoration will be removed entirely, including the\nextra padding introduced by the decoration to save space for the labels.\n\nIf [decoration] is non-null (which is the default), the text field requires\none of its ancestors to be a [Material] widget. When the [TextField] is\ntapped an ink splash that paints on the material is triggered, see\n[ThemeData.splashFactory].\n\nTo integrate the [TextField] into a [Form] with other [FormField] widgets,\nconsider using [TextFormField].\n\nThis example shows how to create a [TextField] that will obscure input. The\n[InputDecoration] surrounds the field in a border using [OutlineInputBorder]\nand adds a label.\n\n```dart\nTextField(\n obscureText: true,\n decoration: InputDecoration(\n border: OutlineInputBorder(),\n labelText: 'Password',\n ),\n)\n```\n\nSee also:\n\n * <https://material.io/design/components/text-fields.html>\n * [TextFormField], which integrates with the [Form] widget.\n * [InputDecorator], which shows the labels and other visual elements that\n surround the actual text editing widget.\n * [EditableText], which is the raw text editing control at the heart of a\n [TextField]. The [EditableText] widget is rarely used directly unless\n you are implementing an entirely different design language, such as\n Cupertino.",
"detail": "",
"kind": 7,
"label": "TextField"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ChipAttributes",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface defining the base attributes for a material design chip.\n\nChips are compact elements that represent an attribute, text, entity, or\naction.\n\nThe defaults mentioned in the documentation for each attribute are what\nthe implementing classes typically use for defaults (but this class doesn't\nprovide or enforce them).\n\nSee also:\n\n * [Chip], a chip that displays information and can be deleted.\n * [InputChip], a chip that represents a complex piece of information, such\n as an entity (person, place, or thing) or conversational text, in a\n compact form.\n * [ChoiceChip], allows a single selection from a set of options. Choice\n chips contain related descriptive text or categories.\n * [FilterChip], uses tags or descriptive words as a way to filter content.\n * [ActionChip], represents an action related to primary content.\n * <https://material.io/design/components/chips.html>",
"detail": "",
"kind": 7,
"label": "ChipAttributes"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BottomNavigationBar",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material widget that's displayed at the bottom of an app for selecting\namong a small number of views, typically between three and five.\n\nThe bottom navigation bar consists of multiple items in the form of\ntext labels, icons, or both, laid out on top of a piece of material. It\nprovides quick navigation between the top-level views of an app. For larger\nscreens, side navigation may be a better fit.\n\nA bottom navigation bar is usually used in conjunction with a [Scaffold],\nwhere it is provided as the [Scaffold.bottomNavigationBar] argument.\n\nThe bottom navigation bar's [type] changes how its [items] are displayed.\nIf not specified, then it's automatically set to\n[BottomNavigationBarType.fixed] when there are less than four items, and\n[BottomNavigationBarType.shifting] otherwise.\n\n * [BottomNavigationBarType.fixed], the default when there are less than\n four [items]. The selected item is rendered with the\n [selectedItemColor] if it's non-null, otherwise the theme's\n [ThemeData.primaryColor] is used. If [backgroundColor] is null, The\n navigation bar's background color defaults to the [Material] background\n color, [ThemeData.canvasColor] (essentially opaque white).\n * [BottomNavigationBarType.shifting], the default when there are four\n or more [items]. If [selectedItemColor] is null, all items are rendered\n in white. The navigation bar's background color is the same as the\n [BottomNavigationBarItem.backgroundColor] of the selected item. In this\n case it's assumed that each item will have a different background color\n and that background color will contrast well with white.\n\nThis example shows a [BottomNavigationBar] as it is used within a [Scaffold]\nwidget. The [BottomNavigationBar] has three [BottomNavigationBarItem]\nwidgets and the [currentIndex] is set to index 0. The selected item is\namber. The `_onItemTapped` function changes the selected item's index\nand displays a corresponding message in the center of the [Scaffold].\n\n![A scaffold with a bottom navigation bar containing three bottom navigation\nbar items. The first one is selected.](https://flutter.github.io/assets-for-api-docs/assets/material/bottom_navigation_bar.png)\n\n```dart\nint _selectedIndex = 0;\nstatic const TextStyle optionStyle = TextStyle(fontSize: 30, fontWeight: FontWeight.bold);\nstatic const List<Widget> _widgetOptions = <Widget>[\n Text(\n 'Index 0: Home',\n style: optionStyle,\n ),\n Text(\n 'Index 1: Business',\n style: optionStyle,\n ),\n Text(\n 'Index 2: School',\n style: optionStyle,\n ),\n];\n\nvoid _onItemTapped(int index) {\n setState(() {\n _selectedIndex = index;\n });\n}\n\n@override\nWidget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: const Text('BottomNavigationBar Sample'),\n ),\n body: Center(\n child: _widgetOptions.elementAt(_selectedIndex),\n ),\n bottomNavigationBar: BottomNavigationBar(\n items: const <BottomNavigationBarItem>[\n BottomNavigationBarItem(\n icon: Icon(Icons.home),\n title: Text('Home'),\n ),\n BottomNavigationBarItem(\n icon: Icon(Icons.business),\n title: Text('Business'),\n ),\n BottomNavigationBarItem(\n icon: Icon(Icons.school),\n title: Text('School'),\n ),\n ],\n currentIndex: _selectedIndex,\n selectedItemColor: Colors.amber[800],\n onTap: _onItemTapped,\n ),\n );\n}\n```\n\nSee also:\n\n * [BottomNavigationBarItem]\n * [Scaffold]\n * <https://material.io/design/components/bottom-navigation.html>",
"detail": "",
"kind": 7,
"label": "BottomNavigationBar"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PointerUpEventListener",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for listening to [PointerUpEvent] events.\n\nUsed by [Listener] and [RenderPointerListener].",
"detail": "(PointerUpEvent event) → void",
"kind": 7,
"label": "PointerUpEventListener"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PerformanceOverlay",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Displays performance statistics.\n\nThe overlay show two time series. The first shows how much time was required\non this thread to produce each frame. The second shows how much time was\nrequired on the GPU thread to produce each frame. Ideally, both these values\nwould be less than the total frame budget for the hardware on which the app\nis running. For example, if the hardware has a screen that updates at 60 Hz,\neach thread should ideally spend less than 16ms producing each frame. This\nideal condition is indicated by a green vertical line for each thread.\nOtherwise, the performance overlay shows a red vertical line.\n\nThe simplest way to show the performance overlay is to set\n[MaterialApp.showPerformanceOverlay] or [WidgetsApp.showPerformanceOverlay]\nto true.",
"detail": "",
"kind": 7,
"label": "PerformanceOverlay"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverChildListDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A delegate that supplies children for slivers using an explicit list.\n\nMany slivers lazily construct their box children to avoid creating more\nchildren than are visible through the [Viewport]. This delegate provides\nchildren using an explicit list, which is convenient but reduces the benefit\nof building children lazily.\n\nIn general building all the widgets in advance is not efficient. It is\nbetter to create a delegate that builds them on demand using\n[SliverChildBuilderDelegate] or by subclassing [SliverChildDelegate]\ndirectly.\n\nThis class is provided for the cases where either the list of children is\nknown well in advance (ideally the children are themselves compile-time\nconstants, for example), and therefore will not be built each time the\ndelegate itself is created, or the list is small, such that it's likely\nalways visible (and thus there is nothing to be gained by building it on\ndemand). For example, the body of a dialog box might fit both of these\nconditions.\n\nThe widgets in the given [children] list are automatically wrapped in\n[AutomaticKeepAlive] widgets if [addAutomaticKeepAlives] is true (the\ndefault) and in [RepaintBoundary] widgets if [addRepaintBoundaries] is true\n(also the default).\n\n## Accessibility\n\nThe [CustomScrollView] requires that its semantic children are annotated\nusing [IndexedSemantics]. This is done by default in the delegate with\nthe `addSemanticIndexes` parameter set to true.\n\nIf multiple delegates are used in a single scroll view, then the indexes\nwill not be correct by default. The `semanticIndexOffset` can be used to\noffset the semantic indexes of each delegate so that the indexes are\nmonotonically increasing. For example, if a scroll view contains two\ndelegates where the first has 10 children contributing semantics, then the\nsecond delegate should offset its children by 10.\n\nIn certain cases, only a subset of child widgets should be annotated\nwith a semantic index. For example, in [new ListView.separated()] the\nseparators do not have an index associated with them. This is done by\nproviding a `semanticIndexCallback` which returns null for separators\nindexes and rounds the non-separator indexes down by half.\n\nSee [SliverChildBuilderDelegate] for sample code using\n`semanticIndexOffset` and `semanticIndexCallback`.\n\nSee also:\n\n * [SliverChildBuilderDelegate], which is a delegate that uses a builder\n callback to construct the children.",
"detail": "",
"kind": 7,
"label": "SliverChildListDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "YearPicker",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A scrollable list of years to allow picking a year.\n\nThe year picker widget is rarely used directly. Instead, consider using\n[showDatePicker], which creates a date picker dialog.\n\nRequires one of its ancestors to be a [Material] widget.\n\nSee also:\n\n * [showDatePicker], which shows a dialog that contains a material design\n date picker.\n * [showTimePicker], which shows a dialog that contains a material design\n time picker.",
"detail": "",
"kind": 7,
"label": "YearPicker"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InkSplash",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A visual reaction on a piece of [Material] to user input.\n\nA circular ink feature whose origin starts at the input touch point\nand whose radius expands from zero.\n\nThis object is rarely created directly. Instead of creating an ink splash\ndirectly, consider using an [InkResponse] or [InkWell] widget, which uses\ngestures (such as tap and long-press) to trigger ink splashes.\n\nSee also:\n\n * [InkRipple], which is an ink splash feature that expands more\n aggressively than this class does.\n * [InkResponse], which uses gestures to trigger ink highlights and ink\n splashes in the parent [Material].\n * [InkWell], which is a rectangular [InkResponse] (the most common type of\n ink response).\n * [Material], which is the widget on which the ink splash is painted.\n * [InkHighlight], which is an ink feature that emphasizes a part of a\n [Material].",
"detail": "",
"kind": 7,
"label": "InkSplash"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "NestedScrollView",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A scrolling view inside of which can be nested other scrolling views, with\ntheir scroll positions being intrinsically linked.\n\nThe most common use case for this widget is a scrollable view with a\nflexible [SliverAppBar] containing a [TabBar] in the header (build by\n[headerSliverBuilder], and with a [TabBarView] in the [body], such that the\nscrollable view's contents vary based on which tab is visible.\n\n## Motivation\n\nIn a normal [ScrollView], there is one set of slivers (the components of the\nscrolling view). If one of those slivers hosted a [TabBarView] which scrolls\nin the opposite direction (e.g. allowing the user to swipe horizontally\nbetween the pages represented by the tabs, while the list scrolls\nvertically), then any list inside that [TabBarView] would not interact with\nthe outer [ScrollView]. For example, flinging the inner list to scroll to\nthe top would not cause a collapsed [SliverAppBar] in the outer [ScrollView]\nto expand.\n\n[NestedScrollView] solves this problem by providing custom\n[ScrollController]s for the outer [ScrollView] and the inner [ScrollView]s\n(those inside the [TabBarView], hooking them together so that they appear,\nto the user, as one coherent scroll view.\n\n\nThis example shows a [NestedScrollView] whose header is the combination of a\n[TabBar] in a [SliverAppBar] and whose body is a [TabBarView]. It uses a\n[SliverOverlapAbsorber]/[SliverOverlapInjector] pair to make the inner lists\nalign correctly, and it uses [SafeArea] to avoid any horizontal disturbances\n(e.g. the \"notch\" on iOS when the phone is horizontal). In addition,\n[PageStorageKey]s are used to remember the scroll position of each tab's\nlist.\n\nIn the example below, `_tabs` is a list of strings, one for each tab, giving\nthe tab labels. In a real application, it would be replaced by the actual\ndata model being represented.\n\n```dart\nDefaultTabController(\n length: _tabs.length, // This is the number of tabs.\n child: NestedScrollView(\n headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {\n // These are the slivers that show up in the \"outer\" scroll view.\n return <Widget>[\n SliverOverlapAbsorber(\n // This widget takes the overlapping behavior of the SliverAppBar,\n // and redirects it to the SliverOverlapInjector below. If it is\n // missing, then it is possible for the nested \"inner\" scroll view\n // below to end up under the SliverAppBar even when the inner\n // scroll view thinks it has not been scrolled.\n // This is not necessary if the \"headerSliverBuilder\" only builds\n // widgets that do not overlap the next sliver.\n handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),\n child: SliverAppBar(\n title: const Text('Books'), // This is the title in the app bar.\n pinned: true,\n expandedHeight: 150.0,\n // The \"forceElevated\" property causes the SliverAppBar to show\n // a shadow. The \"innerBoxIsScrolled\" parameter is true when the\n // inner scroll view is scrolled beyond its \"zero\" point, i.e.\n // when it appears to be scrolled below the SliverAppBar.\n // Without this, there are cases where the shadow would appear\n // or not appear inappropriately, because the SliverAppBar is\n // not actually aware of the precise position of the inner\n // scroll views.\n forceElevated: innerBoxIsScrolled,\n bottom: TabBar(\n // These are the widgets to put in each tab in the tab bar.\n tabs: _tabs.map((String name) => Tab(text: name)).toList(),\n ),\n ),\n ),\n ];\n },\n body: TabBarView(\n // These are the contents of the tab views, below the tabs.\n children: _tabs.map((String name) {\n return SafeArea(\n top: false,\n bottom: false,\n child: Builder(\n // This Builder is needed to provide a BuildContext that is \"inside\"\n // the NestedScrollView, so that sliverOverlapAbsorberHandleFor() can\n // find the NestedScrollView.\n builder: (BuildContext context) {\n return CustomScrollView(\n // The \"controller\" and \"primary\" members should be left\n // unset, so that the NestedScrollView can control this\n // inner scroll view.\n // If the \"controller\" property is set, then this scroll\n // view will not be associated with the NestedScrollView.\n // The PageStorageKey should be unique to this ScrollView;\n // it allows the list to remember its scroll position when\n // the tab view is not on the screen.\n key: PageStorageKey<String>(name),\n slivers: <Widget>[\n SliverOverlapInjector(\n // This is the flip side of the SliverOverlapAbsorber above.\n handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),\n ),\n SliverPadding(\n padding: const EdgeInsets.all(8.0),\n // In this example, the inner scroll view has\n // fixed-height list items, hence the use of\n // SliverFixedExtentList. However, one could use any\n // sliver widget here, e.g. SliverList or SliverGrid.\n sliver: SliverFixedExtentList(\n // The items in this example are fixed to 48 pixels\n // high. This matches the Material Design spec for\n // ListTile widgets.\n itemExtent: 48.0,\n delegate: SliverChildBuilderDelegate(\n (BuildContext context, int index) {\n // This builder is called for each child.\n // In this example, we just number each list item.\n return ListTile(\n title: Text('Item $index'),\n );\n },\n // The childCount of the SliverChildBuilderDelegate\n // specifies how many children this inner list\n // has. In this example, each tab has a list of\n // exactly 30 items, but this is arbitrary.\n childCount: 30,\n ),\n ),\n ),\n ],\n );\n },\n ),\n );\n }).toList(),\n ),\n ),\n)\n```",
"detail": "",
"kind": 7,
"label": "NestedScrollView"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SearchDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Delegate for [showSearch] to define the content of the search page.\n\nThe search page always shows an [AppBar] at the top where users can\nenter their search queries. The buttons shown before and after the search\nquery text field can be customized via [SearchDelegate.leading] and\n[SearchDelegate.actions].\n\nThe body below the [AppBar] can either show suggested queries (returned by\n[SearchDelegate.buildSuggestions]) or - once the user submits a search - the\nresults of the search as returned by [SearchDelegate.buildResults].\n\n[SearchDelegate.query] always contains the current query entered by the user\nand should be used to build the suggestions and results.\n\nThe results can be brought on screen by calling [SearchDelegate.showResults]\nand you can go back to showing the suggestions by calling\n[SearchDelegate.showSuggestions].\n\nOnce the user has selected a search result, [SearchDelegate.close] should be\ncalled to remove the search page from the top of the navigation stack and\nto notify the caller of [showSearch] about the selected search result.\n\nA given [SearchDelegate] can only be associated with one active [showSearch]\ncall. Call [SearchDelegate.close] before re-using the same delegate instance\nfor another [showSearch] call.",
"detail": "",
"kind": 7,
"label": "SearchDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PageView",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A scrollable list that works page by page.\n\nEach child of a page view is forced to be the same size as the viewport.\n\nYou can use a [PageController] to control which page is visible in the view.\nIn addition to being able to control the pixel offset of the content inside\nthe [PageView], a [PageController] also lets you control the offset in terms\nof pages, which are increments of the viewport size.\n\nThe [PageController] can also be used to control the\n[PageController.initialPage], which determines which page is shown when the\n[PageView] is first constructed, and the [PageController.viewportFraction],\nwhich determines the size of the pages as a fraction of the viewport size.\n\n\nSee also:\n\n * [PageController], which controls which page is visible in the view.\n * [SingleChildScrollView], when you need to make a single child scrollable.\n * [ListView], for a scrollable list of boxes.\n * [GridView], for a scrollable grid of boxes.\n * [ScrollNotification] and [NotificationListener], which can be used to watch\n the scroll position without using a [ScrollController].",
"detail": "",
"kind": 7,
"label": "PageView"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureLongPressMoveUpdateCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Callback signature for [LongPressGestureRecognizer.onLongPressMoveUpdate].\n\nCalled when a pointer is moving after being held in contact at the same\nlocation for a long period of time. Reports the new position and its offset\nfrom the original down position.",
"detail": "(LongPressMoveUpdateDetails details) → void",
"kind": 7,
"label": "GestureLongPressMoveUpdateCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DecoratedBoxTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of a [DecoratedBox] that animates the different properties\nof its [Decoration].\n\nHere's an illustration of the [DecoratedBoxTransition] widget, with it's\n[decoration] animated by a [CurvedAnimation] set to [Curves.decelerate]:\n\nSee also:\n\n * [DecoratedBox], which also draws a [Decoration] but is not animated.\n * [AnimatedContainer], a more full-featured container that also animates on\n decoration using an internal animation.",
"detail": "",
"kind": 7,
"label": "DecoratedBoxTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationMax",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An animation that tracks the maximum of two other animations.\n\nThe [value] of this animation is the maximum of the values of\n[first] and [next].",
"detail": "",
"kind": 7,
"label": "AnimationMax"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BoxFit",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "How a box should be inscribed into another box.\n\nSee also [applyBoxFit], which applies the sizing semantics of these values\n(though not the alignment semantics).",
"detail": "",
"kind": 13,
"label": "BoxFit"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PopupMenuDivider",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A horizontal divider in a material design popup menu.\n\nThis widget adapts the [Divider] for use in popup menus.\n\nSee also:\n\n * [PopupMenuItem], for the kinds of items that this widget divides.\n * [showMenu], a method to dynamically show a popup menu at a given location.\n * [PopupMenuButton], an [IconButton] that automatically shows a menu when\n it is tapped.",
"detail": "",
"kind": 7,
"label": "PopupMenuDivider"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DecorationTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two [Decoration]s.\n\nThis class specializes the interpolation of [Tween<BoxConstraints>] to use\n[Decoration.lerp].\n\nFor [ShapeDecoration]s which know how to [ShapeDecoration.lerpTo] or\n[ShapeDecoration.lerpFrom] each other, this will produce a smooth\ninterpolation between decorations.\n\nSee also:\n\n * [Tween] for a discussion on how to use interpolation objects.\n * [ShapeDecoration], [RoundedRectangleBorder], [CircleBorder], and\n [StadiumBorder] for examples of shape borders that can be smoothly\n interpolated.\n * [BoxBorder] for a border that can only be smoothly interpolated between other\n [BoxBorder]s.",
"detail": "",
"kind": 7,
"label": "DecorationTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RenderObjectElement",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An [Element] that uses a [RenderObjectWidget] as its configuration.\n\n[RenderObjectElement] objects have an associated [RenderObject] widget in\nthe render tree, which handles concrete operations like laying out,\npainting, and hit testing.\n\nContrast with [ComponentElement].\n\nFor details on the lifecycle of an element, see the discussion at [Element].\n\n## Writing a RenderObjectElement subclass\n\nThere are three common child models used by most [RenderObject]s:\n\n* Leaf render objects, with no children: The [LeafRenderObjectElement] class\n handles this case.\n\n* A single child: The [SingleChildRenderObjectElement] class handles this\n case.\n\n* A linked list of children: The [MultiChildRenderObjectElement] class\n handles this case.\n\nSometimes, however, a render object's child model is more complicated. Maybe\nit has a two-dimensional array of children. Maybe it constructs children on\ndemand. Maybe it features multiple lists. In such situations, the\ncorresponding [Element] for the [Widget] that configures that [RenderObject]\nwill be a new subclass of [RenderObjectElement].\n\nSuch a subclass is responsible for managing children, specifically the\n[Element] children of this object, and the [RenderObject] children of its\ncorresponding [RenderObject].\n\n### Specializing the getters\n\n[RenderObjectElement] objects spend much of their time acting as\nintermediaries between their [widget] and their [renderObject]. To make this\nmore tractable, most [RenderObjectElement] subclasses override these getters\nso that they return the specific type that the element expects, e.g.:\n\n```dart\nclass FooElement extends RenderObjectElement {\n\n @override\n Foo get widget => super.widget;\n\n @override\n RenderFoo get renderObject => super.renderObject;\n\n // ...\n}\n```\n\n### Slots\n\nEach child [Element] corresponds to a [RenderObject] which should be\nattached to this element's render object as a child.\n\nHowever, the immediate children of the element may not be the ones that\neventually produce the actual [RenderObject] that they correspond to. For\nexample a [StatelessElement] (the element of a [StatelessWidget]) simply\ncorresponds to whatever [RenderObject] its child (the element returned by\nits [StatelessWidget.build] method) corresponds to.\n\nEach child is therefore assigned a _slot_ token. This is an identifier whose\nmeaning is private to this [RenderObjectElement] node. When the descendant\nthat finally produces the [RenderObject] is ready to attach it to this\nnode's render object, it passes that slot token back to this node, and that\nallows this node to cheaply identify where to put the child render object\nrelative to the others in the parent render object.\n\n### Updating children\n\nEarly in the lifecycle of an element, the framework calls the [mount]\nmethod. This method should call [updateChild] for each child, passing in\nthe widget for that child, and the slot for that child, thus obtaining a\nlist of child [Element]s.\n\nSubsequently, the framework will call the [update] method. In this method,\nthe [RenderObjectElement] should call [updateChild] for each child, passing\nin the [Element] that was obtained during [mount] or the last time [update]\nwas run (whichever happened most recently), the new [Widget], and the slot.\nThis provides the object with a new list of [Element] objects.\n\nWhere possible, the [update] method should attempt to map the elements from\nthe last pass to the widgets in the new pass. For example, if one of the\nelements from the last pass was configured with a particular [Key], and one\nof the widgets in this new pass has that same key, they should be paired up,\nand the old element should be updated with the widget (and the slot\ncorresponding to the new widget's new position, also). The [updateChildren]\nmethod may be useful in this regard.\n\n[updateChild] should be called for children in their logical order. The\norder can matter; for example, if two of the children use [PageStorage]'s\n`writeState` feature in their build method (and neither has a [Widget.key]),\nthen the state written by the first will be overwritten by the second.\n\n#### Dynamically determining the children during the build phase\n\nThe child widgets need not necessarily come from this element's widget\nverbatim. They could be generated dynamically from a callback, or generated\nin other more creative ways.\n\n#### Dynamically determining the children during layout\n\nIf the widgets are to be generated at layout time, then generating them when\nthe [update] method won't work: layout of this element's render object\nhasn't started yet at that point. Instead, the [update] method can mark the\nrender object as needing layout (see [RenderObject.markNeedsLayout]), and\nthen the render object's [RenderObject.performLayout] method can call back\nto the element to have it generate the widgets and call [updateChild]\naccordingly.\n\nFor a render object to call an element during layout, it must use\n[RenderObject.invokeLayoutCallback]. For an element to call [updateChild]\noutside of its [update] method, it must use [BuildOwner.buildScope].\n\nThe framework provides many more checks in normal operation than it does\nwhen doing a build during layout. For this reason, creating widgets with\nlayout-time build semantics should be done with great care.\n\n#### Handling errors when building\n\nIf an element calls a builder function to obtain widgets for its children,\nit may find that the build throws an exception. Such exceptions should be\ncaught and reported using [FlutterError.reportError]. If a child is needed\nbut a builder has failed in this way, an instance of [ErrorWidget] can be\nused instead.\n\n### Detaching children\n\nIt is possible, when using [GlobalKey]s, for a child to be proactively\nremoved by another element before this element has been updated.\n(Specifically, this happens when the subtree rooted at a widget with a\nparticular [GlobalKey] is being moved from this element to an element\nprocessed earlier in the build phase.) When this happens, this element's\n[forgetChild] method will be called with a reference to the affected child\nelement.\n\nThe [forgetChild] method of a [RenderObjectElement] subclass must remove the\nchild element from its child list, so that when it next [update]s its\nchildren, the removed child is not considered.\n\nFor performance reasons, if there are many elements, it may be quicker to\ntrack which elements were forgotten by storing them in a [Set], rather than\nproactively mutating the local record of the child list and the identities\nof all the slots. For example, see the implementation of\n[MultiChildRenderObjectElement].\n\n### Maintaining the render object tree\n\nOnce a descendant produces a render object, it will call\n[insertChildRenderObject]. If the descendant's slot changes identity, it\nwill call [moveChildRenderObject]. If a descendant goes away, it will call\n[removeChildRenderObject].\n\nThese three methods should update the render tree accordingly, attaching,\nmoving, and detaching the given child render object from this element's own\nrender object respectively.\n\n### Walking the children\n\nIf a [RenderObjectElement] object has any children [Element]s, it must\nexpose them in its implementation of the [visitChildren] method. This method\nis used by many of the framework's internal mechanisms, and so should be\nfast. It is also used by the test framework and [debugDumpApp].",
"detail": "",
"kind": 7,
"label": "RenderObjectElement"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaskFilter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A mask filter to apply to shapes as they are painted. A mask filter is a\nfunction that takes a bitmap of color pixels, and returns another bitmap of\ncolor pixels.\n\nInstances of this class are used with [Paint.maskFilter] on [Paint] objects.",
"detail": "",
"kind": 7,
"label": "MaskFilter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TickerCanceled",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Exception thrown by [Ticker] objects on the [TickerFuture.orCancel] future\nwhen the ticker is canceled.",
"detail": "",
"kind": 7,
"label": "TickerCanceled"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScaffoldFeatureController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface for controlling a feature of a [Scaffold].\n\nCommonly obtained from [ScaffoldState.showSnackBar] or [ScaffoldState.showBottomSheet].",
"detail": "",
"kind": 7,
"label": "ScaffoldFeatureController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PositionedTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [Positioned] which takes a specific\n[Animation<RelativeRect>] to transition the child's position from a start\nposition to an end position over the lifetime of the animation.\n\nOnly works if it's the child of a [Stack].\n\nHere's an illustration of the [PositionedTransition] widget, with it's [rect]\nanimated by a [CurvedAnimation] set to [Curves.elasticInOut]:\n\nSee also:\n\n * [RelativePositionedTransition], a widget that transitions its child's\n position based on the value of a rectangle relative to a bounding box.\n * [SlideTransition], a widget that animates the position of a widget\n relative to its normal position.\n * [AlignTransition], an animated version of an [Align] that animates its\n [Align.alignment] property.\n * [ScaleTransition], a widget that animates the scale of a transformed\n widget.\n * [SizeTransition], a widget that animates its own size and clips and\n aligns its child.",
"detail": "",
"kind": 7,
"label": "PositionedTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ImageProvider",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Identifies an image without committing to the precise final asset. This\nallows a set of images to be identified and for the precise image to later\nbe resolved based on the environment, e.g. the device pixel ratio.\n\nTo obtain an [ImageStream] from an [ImageProvider], call [resolve],\npassing it an [ImageConfiguration] object.\n\n[ImageProvider] uses the global [imageCache] to cache images.\n\nThe type argument `T` is the type of the object used to represent a resolved\nconfiguration. This is also the type used for the key in the image cache. It\nshould be immutable and implement the [==] operator and the [hashCode]\ngetter. Subclasses should subclass a variant of [ImageProvider] with an\nexplicit `T` type argument.\n\nThe type argument does not have to be specified when using the type as an\nargument (where any image provider is acceptable).\n\nThe following image formats are supported: {@macro flutter.dart:ui.imageFormats}\n\n\nThe following shows the code required to write a widget that fully conforms\nto the [ImageProvider] and [Widget] protocols. (It is essentially a\nbare-bones version of the [widgets.Image] widget.)\n\n```dart\nclass MyImage extends StatefulWidget {\n const MyImage({\n Key key,\n @required this.imageProvider,\n }) : assert(imageProvider != null),\n super(key: key);\n\n final ImageProvider imageProvider;\n\n @override\n _MyImageState createState() => _MyImageState();\n}\n\nclass _MyImageState extends State<MyImage> {\n ImageStream _imageStream;\n ImageInfo _imageInfo;\n\n @override\n void didChangeDependencies() {\n super.didChangeDependencies();\n // We call _getImage here because createLocalImageConfiguration() needs to\n // be called again if the dependencies changed, in case the changes relate\n // to the DefaultAssetBundle, MediaQuery, etc, which that method uses.\n _getImage();\n }\n\n @override\n void didUpdateWidget(MyImage oldWidget) {\n super.didUpdateWidget(oldWidget);\n if (widget.imageProvider != oldWidget.imageProvider)\n _getImage();\n }\n\n void _getImage() {\n final ImageStream oldImageStream = _imageStream;\n _imageStream = widget.imageProvider.resolve(createLocalImageConfiguration(context));\n if (_imageStream.key != oldImageStream?.key) {\n // If the keys are the same, then we got the same image back, and so we don't\n // need to update the listeners. If the key changed, though, we must make sure\n // to switch our listeners to the new image stream.\n oldImageStream?.removeListener(_updateImage);\n _imageStream.addListener(_updateImage);\n }\n }\n\n void _updateImage(ImageInfo imageInfo, bool synchronousCall) {\n setState(() {\n // Trigger a build whenever the image changes.\n _imageInfo = imageInfo;\n });\n }\n\n @override\n void dispose() {\n _imageStream.removeListener(_updateImage);\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return RawImage(\n image: _imageInfo?.image, // this is a dart:ui Image object\n scale: _imageInfo?.scale ?? 1.0,\n );\n }\n}\n```",
"detail": "",
"kind": 7,
"label": "ImageProvider"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BlockSemantics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that drops the semantics of all widget that were painted before it\nin the same semantic container.\n\nThis is useful to hide widgets from accessibility tools that are painted\nbehind a certain widget, e.g. an alert should usually disallow interaction\nwith any widget located \"behind\" the alert (even when they are still\npartially visible). Similarly, an open [Drawer] blocks interactions with\nany widget outside the drawer.\n\nSee also:\n\n * [ExcludeSemantics] which drops all semantics of its descendants.",
"detail": "",
"kind": 7,
"label": "BlockSemantics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverList",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sliver that places multiple box children in a linear array along the main\naxis.\n\nEach child is forced to have the [SliverConstraints.crossAxisExtent] in the\ncross axis but determines its own main axis extent.\n\n[SliverList] determines its scroll offset by \"dead reckoning\" because\nchildren outside the visible part of the sliver are not materialized, which\nmeans [SliverList] cannot learn their main axis extent. Instead, newly\nmaterialized children are placed adjacent to existing children.\n\n\nIf the children have a fixed extent in the main axis, consider using\n[SliverFixedExtentList] rather than [SliverList] because\n[SliverFixedExtentList] does not need to perform layout on its children to\nobtain their extent in the main axis and is therefore more efficient.\n\n\nSee also:\n\n * [SliverFixedExtentList], which is more efficient for children with\n the same extent in the main axis.\n * [SliverPrototypeExtentList], which is similar to [SliverFixedExtentList]\n except that it uses a prototype list item instead of a pixel value to define\n the main axis extent of each item.\n * [SliverGrid], which places its children in arbitrary positions.",
"detail": "",
"kind": 7,
"label": "SliverList"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureDetector",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that detects gestures.\n\nAttempts to recognize gestures that correspond to its non-null callbacks.\n\nIf this widget has a child, it defers to that child for its sizing behavior.\nIf it does not have a child, it grows to fit the parent instead.\n\nBy default a GestureDetector with an invisible child ignores touches;\nthis behavior can be controlled with [behavior].\n\nGestureDetector also listens for accessibility events and maps\nthem to the callbacks. To ignore accessibility events, set\n[excludeFromSemantics] to true.\n\nSee <http://flutter.dev/gestures/> for additional information.\n\nMaterial design applications typically react to touches with ink splash\neffects. The [InkWell] class implements this effect and can be used in place\nof a [GestureDetector] for handling taps.\n\n\nThis example makes a rectangle react to being tapped by setting the\n`_lights` field:\n\n```dart\nGestureDetector(\n onTap: () {\n setState(() { _lights = true; });\n },\n child: Container(\n color: Colors.yellow,\n child: Text('TURN LIGHTS ON'),\n ),\n)\n```\n\n## Debugging\n\nTo see how large the hit test box of a [GestureDetector] is for debugging\npurposes, set [debugPaintPointersEnabled] to true.",
"detail": "",
"kind": 7,
"label": "GestureDetector"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "WrapCrossAlignment",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Who [Wrap] should align children within a run in the cross axis.",
"detail": "",
"kind": 13,
"label": "WrapCrossAlignment"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LocalizationsDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A factory for a set of localized resources of type `T`, to be loaded by a\n[Localizations] widget.\n\nTypical applications have one [Localizations] widget which is created by the\n[WidgetsApp] and configured with the app's `localizationsDelegates`\nparameter (a list of delegates). The delegate's [type] is used to identify\nthe object created by an individual delegate's [load] method.",
"detail": "",
"kind": 7,
"label": "LocalizationsDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RefreshCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The signature for a function that's called when the user has dragged a\n[RefreshIndicator] far enough to demonstrate that they want the app to\nrefresh. The returned [Future] must complete when the refresh operation is\nfinished.\n\nUsed by [RefreshIndicator.onRefresh].",
"detail": "() → Future<void>",
"kind": 7,
"label": "RefreshCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TickerProviderStateMixin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Provides [Ticker] objects that are configured to only tick while the current\ntree is enabled, as defined by [TickerMode].\n\nTo create an [AnimationController] in a class that uses this mixin, pass\n`vsync: this` to the animation controller constructor whenever you\ncreate a new animation controller.\n\nIf you only have a single [Ticker] (for example only a single\n[AnimationController]) for the lifetime of your [State], then using a\n[SingleTickerProviderStateMixin] is more efficient. This is the common case.",
"detail": "",
"kind": 7,
"label": "TickerProviderStateMixin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ParentDataWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for widgets that hook [ParentData] information to children of\n[RenderObjectWidget]s.\n\nThis can be used to provide per-child configuration for\n[RenderObjectWidget]s with more than one child. For example, [Stack] uses\nthe [Positioned] parent data widget to position each child.\n\nA [ParentDataWidget] is specific to a particular kind of [RenderObject], and\nthus also to a particular [RenderObjectWidget] class. That class is `T`, the\n[ParentDataWidget] type argument.\n\n\nThis example shows how you would build a [ParentDataWidget] to configure a\n`FrogJar` widget's children by specifying a [Size] for each one.\n\n```dart\nclass FrogSize extends ParentDataWidget<FrogJar> {\n FrogSize({\n Key key,\n @required this.size,\n @required Widget child,\n }) : assert(child != null),\n assert(size != null),\n super(key: key, child: child);\n\n final Size size;\n\n @override\n void applyParentData(RenderObject renderObject) {\n final FrogJarParentData parentData = renderObject.parentData;\n if (parentData.size != size) {\n parentData.size = size;\n final RenderFrogJar targetParent = renderObject.parent;\n targetParent.markNeedsLayout();\n }\n }\n}\n```\n\nSee also:\n\n * [RenderObject], the superclass for layout algorithms.\n * [RenderObject.parentData], the slot that this class configures.\n * [ParentData], the superclass of the data that will be placed in\n [RenderObject.parentData] slots.\n * [RenderObjectWidget], the class for widgets that wrap [RenderObject]s.\n The `T` type parameter for [ParentDataWidget] is a [RenderObjectWidget].\n * [StatefulWidget] and [State], for widgets that can build differently\n several times over their lifetime.",
"detail": "",
"kind": 7,
"label": "ParentDataWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "WidgetToRenderBoxAdapter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An adapter for placing a specific [RenderBox] in the widget tree.\n\nA given render object can be placed at most once in the widget tree. This\nwidget enforces that restriction by keying itself using a [GlobalObjectKey]\nfor the given render object.",
"detail": "",
"kind": 7,
"label": "WidgetToRenderBoxAdapter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PageStorageKey",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [ValueKey] that defines where [PageStorage] values will be saved.\n\n[Scrollable]s ([ScrollPosition]s really) use [PageStorage] to save their\nscroll offset. Each time a scroll completes, the scrollable's page\nstorage is updated.\n\n[PageStorage] is used to save and restore values that can outlive the widget.\nThe values are stored in a per-route [Map] whose keys are defined by the\n[PageStorageKey]s for the widget and its ancestors. To make it possible\nfor a saved value to be found when a widget is recreated, the key's values\nmust not be objects whose identity will change each time the widget is created.\n\nFor example, to ensure that the scroll offsets for the scrollable within\neach `MyScrollableTabView` below are restored when the [TabBarView]\nis recreated, we've specified [PageStorageKey]s whose values are the\ntabs' string labels.\n\n```dart\nTabBarView(\n children: myTabs.map((Tab tab) {\n MyScrollableTabView(\n key: PageStorageKey<String>(tab.text), // like 'Tab 1'\n tab: tab,\n ),\n }),\n)\n```",
"detail": "",
"kind": 7,
"label": "PageStorageKey"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ThemeData",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Holds the color and typography values for a material design theme.\n\nUse this class to configure a [Theme] widget.\n\nTo obtain the current theme, use [Theme.of].",
"detail": "",
"kind": 7,
"label": "ThemeData"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextAffinity",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A way to disambiguate a [TextPosition] when its offset could match two\ndifferent locations in the rendered string.\n\nFor example, at an offset where the rendered text wraps, there are two\nvisual positions that the offset could represent: one prior to the line\nbreak (at the end of the first line) and one after the line break (at the\nstart of the second line). A text affinity disambiguates between these two\ncases.\n\nThis affects only line breaks caused by wrapping, not explicit newline\ncharacters. For newline characters, the position is fully specified by the\noffset alone, and there is no ambiguity.\n\n[TextAffinity] also affects bidirectional text at the interface between LTR\nand RTL text. Consider the following string, where the lowercase letters\nwill be displayed as LTR and the uppercase letters RTL: \"helloHELLO\". When\nrendered, the string would appear visually as \"helloOLLEH\". An offset of 5\nwould be ambiguous without a corresponding [TextAffinity]. Looking at the\nstring in code, the offset represents the position just after the \"o\" and\njust before the \"H\". When rendered, this offset could be either in the\nmiddle of the string to the right of the \"o\" or at the end of the string to\nthe right of the \"H\".",
"detail": "",
"kind": 13,
"label": "TextAffinity"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SimpleDialogOption",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An option used in a [SimpleDialog].\n\nA simple dialog offers the user a choice between several options. This\nwidget is commonly used to represent each of the options. If the user\nselects this option, the widget will call the [onPressed] callback, which\ntypically uses [Navigator.pop] to close the dialog.\n\nThe padding on a [SimpleDialogOption] is configured to combine with the\ndefault [SimpleDialog.contentPadding] so that each option ends up 8 pixels\nfrom the other vertically, with 20 pixels of spacing between the dialog's\ntitle and the first option, and 24 pixels of spacing between the last option\nand the bottom of the dialog.\n\n\n```dart\nSimpleDialogOption(\n onPressed: () { Navigator.pop(context, Department.treasury); },\n child: const Text('Treasury department'),\n)\n```\n\nSee also:\n\n * [SimpleDialog], for a dialog in which to use this widget.\n * [showDialog], which actually displays the dialog and returns its result.\n * [FlatButton], which are commonly used as actions in other kinds of\n dialogs, such as [AlertDialog]s.\n * <https://material.io/design/components/dialogs.html#simple-dialog>",
"detail": "",
"kind": 7,
"label": "SimpleDialogOption"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ExpansionPanelHeaderBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the callback that's called when the header of the\n[ExpansionPanel] needs to rebuild.",
"detail": "(BuildContext context, bool isExpanded) → Widget",
"kind": 7,
"label": "ExpansionPanelHeaderBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Radius",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A radius for either circular or elliptical shapes.",
"detail": "",
"kind": 7,
"label": "Radius"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DatePickerMode",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Initial display mode of the date picker dialog.\n\nDate picker UI mode for either showing a list of available years or a\nmonthly calendar initially in the dialog shown by calling [showDatePicker].\n\nSee also:\n\n * [showDatePicker], which shows a dialog that contains a material design\n date picker.",
"detail": "",
"kind": 13,
"label": "DatePickerMode"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StatelessElement",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An [Element] that uses a [StatelessWidget] as its configuration.",
"detail": "",
"kind": 7,
"label": "StatelessElement"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MergeableMaterialItem",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The base type for [MaterialSlice] and [MaterialGap].\n\nAll [MergeableMaterialItem] objects need a [LocalKey].",
"detail": "",
"kind": 7,
"label": "MergeableMaterialItem"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationWithParentMixin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Implements most of the [Animation] interface by deferring its behavior to a\ngiven [parent] Animation.\n\nTo implement an [Animation] that is driven by a parent, it is only necessary\nto mix in this class, implement [parent], and implement `T get value`.\n\nTo define a mapping from values in the range 0..1, consider subclassing\n[Tween] instead.",
"detail": "",
"kind": 7,
"label": "AnimationWithParentMixin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TweenConstructor",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for a [Tween] factory.\n\nThis is the type of one of the arguments of [TweenVisitor], the signature\nused by [AnimatedWidgetBaseState.forEachTween].",
"detail": "(T targetValue) → Tween<T>",
"kind": 7,
"label": "TweenConstructor"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "NavigationToolbar",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "[NavigationToolbar] is a layout helper to position 3 widgets or groups of\nwidgets along a horizontal axis that's sensible for an application's\nnavigation bar such as in Material Design and in iOS.\n\nThe [leading] and [trailing] widgets occupy the edges of the widget with\nreasonable size constraints while the [middle] widget occupies the remaining\nspace in either a center aligned or start aligned fashion.\n\nEither directly use the themed app bars such as the Material [AppBar] or\nthe iOS [CupertinoNavigationBar] or wrap this widget with more theming\nspecifications for your own custom app bar.",
"detail": "",
"kind": 7,
"label": "NavigationToolbar"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollPosition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Determines which portion of the content is visible in a scroll view.\n\nThe [pixels] value determines the scroll offset that the scroll view uses to\nselect which part of its content to display. As the user scrolls the\nviewport, this value changes, which changes the content that is displayed.\n\nThe [ScrollPosition] applies [physics] to scrolling, and stores the\n[minScrollExtent] and [maxScrollExtent].\n\nScrolling is controlled by the current [activity], which is set by\n[beginActivity]. [ScrollPosition] itself does not start any activities.\nInstead, concrete subclasses, such as [ScrollPositionWithSingleContext],\ntypically start activities in response to user input or instructions from a\n[ScrollController].\n\nThis object is a [Listenable] that notifies its listeners when [pixels]\nchanges.\n\n## Subclassing ScrollPosition\n\nOver time, a [Scrollable] might have many different [ScrollPosition]\nobjects. For example, if [Scrollable.physics] changes type, [Scrollable]\ncreates a new [ScrollPosition] with the new physics. To transfer state from\nthe old instance to the new instance, subclasses implement [absorb]. See\n[absorb] for more details.\n\nSubclasses also need to call [didUpdateScrollDirection] whenever\n[userScrollDirection] changes values.\n\nSee also:\n\n * [Scrollable], which uses a [ScrollPosition] to determine which portion of\n its content to display.\n * [ScrollController], which can be used with [ListView], [GridView] and\n other scrollable widgets to control a [ScrollPosition].\n * [ScrollPositionWithSingleContext], which is the most commonly used\n concrete subclass of [ScrollPosition].\n * [ScrollNotification] and [NotificationListener], which can be used to watch\n the scroll position without using a [ScrollController].",
"detail": "",
"kind": 7,
"label": "ScrollPosition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TypeMatcher",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "This class is a work-around for the \"is\" operator not accepting a variable value as its right operand",
"detail": "",
"kind": 7,
"label": "TypeMatcher"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that rebuilds when the given [Listenable] changes value.\n\n[AnimatedWidget] is most commonly used with [Animation] objects, which are\n[Listenable], but it can be used with any [Listenable], including\n[ChangeNotifier] and [ValueNotifier].\n\n[AnimatedWidget] is most useful for widgets that are otherwise stateless. To\nuse [AnimatedWidget], simply subclass it and implement the build function.\n\n\nThis code defines a widget called `Spinner` that spins a green square\ncontinually. It is built with an [AnimatedWidget].\n\n```dart\nclass Spinner extends StatefulWidget {\n @override\n _SpinnerState createState() => _SpinnerState();\n}\n\nclass _SpinnerState extends State<Spinner> with TickerProviderStateMixin {\n AnimationController _controller;\n\n @override\n void initState() {\n super.initState();\n _controller = AnimationController(\n duration: const Duration(seconds: 10),\n vsync: this,\n )..repeat();\n }\n\n @override\n void dispose() {\n _controller.dispose();\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return SpinningContainer(controller: _controller);\n }\n}\n\nclass SpinningContainer extends AnimatedWidget {\n const SpinningContainer({Key key, AnimationController controller})\n : super(key: key, listenable: controller);\n\n Animation<double> get _progress => listenable;\n\n @override\n Widget build(BuildContext context) {\n return Transform.rotate(\n angle: _progress.value * 2.0 * math.pi,\n child: Container(width: 200.0, height: 200.0, color: Colors.green),\n );\n }\n}\n```\n\nFor more complex case involving additional state, consider using\n[AnimatedBuilder].\n\nSee also:\n\n * [AnimatedBuilder], which is useful for more complex use cases.\n * [Animation], which is a [Listenable] object that can be used for\n [listenable].\n * [ChangeNotifier], which is another [Listenable] object that can be used\n for [listenable].",
"detail": "",
"kind": 7,
"label": "AnimatedWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CompositedTransformTarget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that can be targeted by a [CompositedTransformFollower].\n\nWhen this widget is composited during the compositing phase (which comes\nafter the paint phase, as described in [WidgetsBinding.drawFrame]), it\nupdates the [link] object so that any [CompositedTransformFollower] widgets\nthat are subsequently composited in the same frame and were given the same\n[LayerLink] can position themselves at the same screen location.\n\nA single [CompositedTransformTarget] can be followed by multiple\n[CompositedTransformFollower] widgets.\n\nThe [CompositedTransformTarget] must come earlier in the paint order than\nany linked [CompositedTransformFollower]s.\n\nSee also:\n\n * [CompositedTransformFollower], the widget that can target this one.\n * [LeaderLayer], the layer that implements this widget's logic.",
"detail": "",
"kind": 7,
"label": "CompositedTransformTarget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FormFieldSetter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for being notified when a form field changes value.\n\nUsed by [FormField.onSaved].",
"detail": "(T newValue) → void",
"kind": 7,
"label": "FormFieldSetter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DataCell",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The data for a cell of a [DataTable].\n\nOne list of [DataCell] objects must be provided for each [DataRow]\nin the [DataTable], in the [new DataRow] constructor's `cells`\nargument.",
"detail": "",
"kind": 7,
"label": "DataCell"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BorderDirectional",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A border of a box, comprised of four sides, the lateral sides of which\nflip over based on the reading direction.\n\nThe lateral sides are called [start] and [end]. When painted in\nleft-to-right environments, the [start] side will be painted on the left and\nthe [end] side on the right; in right-to-left environments, it is the\nreverse. The other two sides are [top] and [bottom].\n\nThe sides are represented by [BorderSide] objects.\n\nIf the [start] and [end] sides are the same, then it is slightly more\nefficient to use a [Border] object rather than a [BorderDirectional] object.\n\nSee also:\n\n * [BoxDecoration], which uses this class to describe its edge decoration.\n * [BorderSide], which is used to describe each side of the box.\n * [Theme], from the material layer, which can be queried to obtain appropriate colors\n to use for borders in a material app, as shown in the \"divider\" sample above.",
"detail": "",
"kind": 7,
"label": "BorderDirectional"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DrawerController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Provides interactive behavior for [Drawer] widgets.\n\nRarely used directly. Drawer controllers are typically created automatically\nby [Scaffold] widgets.\n\nThe draw controller provides the ability to open and close a drawer, either\nvia an animation or via user interaction. When closed, the drawer collapses\nto a translucent gesture detector that can be used to listen for edge\nswipes.\n\nSee also:\n\n * [Drawer], a container with the default width of a drawer.\n * [Scaffold.drawer], the [Scaffold] slot for showing a drawer.",
"detail": "",
"kind": 7,
"label": "DrawerController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PageRouteFactory",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The signature of [WidgetsApp.pageRouteBuilder].\n\nCreates a [PageRoute] using the given [RouteSettings] and [WidgetBuilder].",
"detail": "(RouteSettings settings, WidgetBuilder builder) → PageRoute<T>",
"kind": 7,
"label": "PageRouteFactory"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliderComponentShape",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for slider thumb, thumb overlay, and value indicator shapes.\n\nCreate a subclass of this if you would like a custom shape.\n\nAll shapes are painted to the same canvas and ordering is important.\nThe overlay is painted first, then the value indicator, then the thumb.\n\nThe thumb painting can be skipped by specifying [noThumb] for\n[SliderThemeData.thumbShape].\n\nThe overlay painting can be skipped by specifying [noOverlay] for\n[SliderThemeData.overlayShape].\n\nSee also:\n\n * [RoundSliderThumbShape], which is the the default thumb shape.\n * [RoundSliderOverlayShape], which is the the default overlay shape.\n * [PaddleSliderValueIndicatorShape], which is the the default value\n indicator shape.",
"detail": "",
"kind": 7,
"label": "SliderComponentShape"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Axis",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The two cardinal directions in two dimensions.\n\nThe axis is always relative to the current coordinate space. This means, for\nexample, that a [horizontal] axis might actually be diagonally from top\nright to bottom left, due to some local [Transform] applied to the scene.\n\nSee also:\n\n * [AxisDirection], which is a directional version of this enum (with values\n light left and right, rather than just horizontal).\n * [TextDirection], which disambiguates between left-to-right horizontal\n content and right-to-left horizontal content.",
"detail": "",
"kind": 13,
"label": "Axis"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverToBoxAdapter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sliver that contains a single box widget.\n\nSlivers are special-purpose widgets that can be combined using a\n[CustomScrollView] to create custom scroll effects. A [SliverToBoxAdapter]\nis a basic sliver that creates a bridge back to one of the usual box-based\nwidgets.\n\nRather than using multiple [SliverToBoxAdapter] widgets to display multiple\nbox widgets in a [CustomScrollView], consider using [SliverList],\n[SliverFixedExtentList], [SliverPrototypeExtentList], or [SliverGrid],\nwhich are more efficient because they instantiate only those children that\nare actually visible through the scroll view's viewport.\n\nSee also:\n\n * [CustomScrollView], which displays a scrollable list of slivers.\n * [SliverList], which displays multiple box widgets in a linear array.\n * [SliverFixedExtentList], which displays multiple box widgets with the\n same main-axis extent in a linear array.\n * [SliverPrototypeExtentList], which displays multiple box widgets with the\n same main-axis extent as a prototype item, in a linear array.\n * [SliverGrid], which displays multiple box widgets in arbitrary positions.",
"detail": "",
"kind": 7,
"label": "SliverToBoxAdapter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CurvedAnimation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An animation that applies a curve to another animation.\n\n[CurvedAnimation] is useful when you want to apply a non-linear [Curve] to\nan animation object, especially if you want different curves when the\nanimation is going forward vs when it is going backward.\n\nDepending on the given curve, the output of the [CurvedAnimation] could have\na wider range than its input. For example, elastic curves such as\n[Curves.elasticIn] will significantly overshoot or undershoot the default\nrange of 0.0 to 1.0.\n\nIf you want to apply a [Curve] to a [Tween], consider using [CurveTween].\n\n\nThe following code snippet shows how you can apply a curve to a linear\nanimation produced by an [AnimationController] `controller`.\n\n```dart\nfinal Animation<double> animation = CurvedAnimation(\n parent: controller,\n curve: Curves.ease,\n);\n```\n\nThis second code snippet shows how to apply a different curve in the forward\ndirection than in the reverse direction. This can't be done using a\n[CurveTween] (since [Tween]s are not aware of the animation direction when\nthey are applied).\n\n```dart\nfinal Animation<double> animation = CurvedAnimation(\n parent: controller,\n curve: Curves.easeIn,\n reverseCurve: Curves.easeOut,\n);\n```\n\nBy default, the [reverseCurve] matches the forward [curve].\n\nSee also:\n\n * [CurveTween], for an alternative way of expressing the first sample\n above.\n * [AnimationController], for examples of creating and disposing of an\n [AnimationController].\n * [Curve.flipped] and [FlippedCurve], which provide the reverse of a\n [Curve].",
"detail": "",
"kind": 7,
"label": "CurvedAnimation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GenerateAppTitle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The signature of [WidgetsApp.onGenerateTitle].\n\nUsed to generate a value for the app's [Title.title], which the device uses\nto identify the app for the user. The `context` includes the [WidgetsApp]'s\n[Localizations] widget so that this method can be used to produce a\nlocalized title.\n\nThis function must not return null.",
"detail": "(BuildContext context) → String",
"kind": 7,
"label": "GenerateAppTitle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ButtonBar",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An end-aligned row of buttons.\n\nPlaces the buttons horizontally according to the padding in the current\n[ButtonTheme]. The children are laid out in a [Row] with\n[MainAxisAlignment.end]. When the [Directionality] is [TextDirection.ltr],\nthe button bar's children are right justified and the last child becomes\nthe rightmost child. When the [Directionality] [TextDirection.rtl] the\nchildren are left justified and the last child becomes the leftmost child.\n\nUsed by [Dialog] to arrange the actions at the bottom of the dialog.\n\nSee also:\n\n * [RaisedButton], a kind of button.\n * [FlatButton], another kind of button.\n * [Card], at the bottom of which it is common to place a [ButtonBar].\n * [Dialog], which uses a [ButtonBar] for its actions.\n * [ButtonTheme], which configures the [ButtonBar].",
"detail": "",
"kind": 7,
"label": "ButtonBar"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ChipThemeData",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Holds the color, shape, and text styles for a material design chip theme.\n\nUse this class to configure a [ChipTheme] widget, or to set the\n[ThemeData.chipTheme] for a [Theme] widget.\n\nTo obtain the current ambient chip theme, use [ChipTheme.of].\n\nThe parts of a chip are:\n\n * The \"avatar\", which is a widget that appears at the beginning of the\n chip. This is typically a [CircleAvatar] widget.\n * The \"label\", which is the widget displayed in the center of the chip.\n Typically this is a [Text] widget.\n * The \"delete icon\", which is a widget that appears at the end of the chip.\n * The chip is disabled when it is not accepting user input. Only some chips\n have a disabled state: [InputChip], [ChoiceChip], and [FilterChip].\n\nThe simplest way to create a ChipThemeData is to use [copyWith] on the one\nyou get from [ChipTheme.of], or create an entirely new one with\n[ChipThemeData..fromDefaults].\n\n\n```dart\nclass CarColor extends StatefulWidget {\n @override\n State createState() => _CarColorState();\n}\n\nclass _CarColorState extends State<CarColor> {\n Color _color = Colors.red;\n\n @override\n Widget build(BuildContext context) {\n return ChipTheme(\n data: ChipTheme.of(context).copyWith(backgroundColor: Colors.lightBlue),\n child: ChoiceChip(\n label: Text('Light Blue'),\n onSelected: (bool value) {\n setState(() {\n _color = value ? Colors.lightBlue : Colors.red;\n });\n },\n selected: _color == Colors.lightBlue,\n ),\n );\n }\n}\n```\n\nSee also:\n\n * [Chip], a chip that displays information and can be deleted.\n * [InputChip], a chip that represents a complex piece of information, such\n as an entity (person, place, or thing) or conversational text, in a\n compact form.\n * [ChoiceChip], allows a single selection from a set of options. Choice\n chips contain related descriptive text or categories.\n * [FilterChip], uses tags or descriptive words as a way to filter content.\n * [ActionChip], represents an action related to primary content.\n * [CircleAvatar], which shows images or initials of entities.\n * [Wrap], A widget that displays its children in multiple horizontal or\n vertical runs.\n * [ChipTheme] widget, which can override the chip theme of its\n children.\n * [Theme] widget, which performs a similar function to [ChipTheme],\n but for overall themes.\n * [ThemeData], which has a default [ChipThemeData].",
"detail": "",
"kind": 7,
"label": "ChipThemeData"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DecorationImagePainter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The painter for a [DecorationImage].\n\nTo obtain a painter, call [DecorationImage.createPainter].\n\nTo paint, call [paint]. The `onChanged` callback passed to\n[DecorationImage.createPainter] will be called if the image needs to paint\nagain (e.g. because it is animated or because it had not yet loaded the\nfirst time the [paint] method was called).\n\nThis object should be disposed using the [dispose] method when it is no\nlonger needed.",
"detail": "",
"kind": 7,
"label": "DecorationImagePainter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationEagerListenerMixin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A mixin that replaces the [didRegisterListener]/[didUnregisterListener] contract\nwith a dispose contract.\n\nThis mixin provides implementations of [didRegisterListener] and [didUnregisterListener],\nand therefore can be used in conjunction with mixins that require these methods,\n[AnimationLocalListenersMixin] and [AnimationLocalStatusListenersMixin].",
"detail": "",
"kind": 7,
"label": "AnimationEagerListenerMixin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TapDownDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Details for [GestureTapDownCallback], such as position.\n\nSee also:\n\n * [GestureDetector.onTapDown], which receives this information.\n * [TapGestureRecognizer], which passes this information to one of its callbacks.",
"detail": "",
"kind": 7,
"label": "TapDownDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextCapitalization",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Configures how the platform keyboard will select an uppercase or\nlowercase keyboard.\n\nOnly supports text keyboards, other keyboard types will ignore this\nconfiguration. Capitalization is locale-aware.",
"detail": "",
"kind": 13,
"label": "TextCapitalization"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextSelectionOverlayChanged",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for reporting changes to the selection component of a\n[TextEditingValue] for the purposes of a [TextSelectionOverlay]. The\n[caretRect] argument gives the location of the caret in the coordinate space\nof the [RenderBox] given by the [TextSelectionOverlay.renderObject].\n\nUsed by [TextSelectionOverlay.onSelectionOverlayChanged].",
"detail": "(TextEditingValue value, Rect caretRect) → void",
"kind": 7,
"label": "TextSelectionOverlayChanged"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LayoutWidgetBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The signature of the [LayoutBuilder] builder function.",
"detail": "(BuildContext context, BoxConstraints constraints) → Widget",
"kind": 7,
"label": "LayoutWidgetBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FadeInImagePhase",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The phases a [FadeInImage] goes through.",
"detail": "",
"kind": 13,
"label": "FadeInImagePhase"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CustomPainterSemantics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Contains properties describing information drawn in a rectangle contained by\nthe [Canvas] used by a [CustomPaint].\n\nThis information is used, for example, by assistive technologies to improve\nthe accessibility of applications.\n\nImplement [CustomPainter.semanticsBuilder] to build the semantic\ndescription of the whole picture drawn by a [CustomPaint], rather that one\nparticular rectangle.\n\nSee also:\n\n * [SemanticsNode], which is created using the properties of this class.\n * [CustomPainter], which creates instances of this class.",
"detail": "",
"kind": 7,
"label": "CustomPainterSemantics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationLocalStatusListenersMixin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A mixin that implements the addStatusListener/removeStatusListener protocol\nand notifies all the registered listeners when notifyStatusListeners is\ncalled.\n\nThis mixin requires that the mixing class provide methods [didRegisterListener]\nand [didUnregisterListener]. Implementations of these methods can be obtained\nby mixing in another mixin from this library, such as [AnimationLazyListenerMixin].",
"detail": "",
"kind": 7,
"label": "AnimationLocalStatusListenersMixin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SlideTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animates the position of a widget relative to its normal position.\n\nThe translation is expressed as a [Offset] scaled to the child's size. For\nexample, an [Offset] with a `dx` of 0.25 will result in a horizontal\ntranslation of one quarter the width of the child.\n\nBy default, the offsets are applied in the coordinate system of the canvas\n(so positive x offsets move the child towards the right). If a\n[textDirection] is provided, then the offsets are applied in the reading\ndirection, so in right-to-left text, positive x offsets move towards the\nleft, and in left-to-right text, positive x offsets move towards the right.\n\nHere's an illustration of the [SlideTransition] widget, with it's [position]\nanimated by a [CurvedAnimation] set to [Curves.elasticIn]:\n\nSee also:\n\n * [AlignTransition], an animated version of an [Align] that animates its\n [Align.alignment] property.\n * [PositionedTransition], a widget that animates its child from a start\n position to an end position over the lifetime of the animation.\n * [RelativePositionedTransition], a widget that transitions its child's\n position based on the value of a rectangle relative to a bounding box.",
"detail": "",
"kind": 7,
"label": "SlideTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextStyleTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two [TextStyle]s.\n\nThis class specializes the interpolation of [Tween<TextStyle>] to use\n[TextStyle.lerp].\n\nThis will not work well if the styles don't set the same fields.\n\nSee [Tween] for a discussion on how to use interpolation objects.",
"detail": "",
"kind": 7,
"label": "TextStyleTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Scrollbar",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design scrollbar.\n\nA scrollbar indicates which portion of a [Scrollable] widget is actually\nvisible.\n\nDynamically changes to an iOS style scrollbar that looks like\n[CupertinoScrollbar] on the iOS platform.\n\nTo add a scrollbar to a [ScrollView], simply wrap the scroll view widget in\na [Scrollbar] widget.\n\nSee also:\n\n * [ListView], which display a linear, scrollable list of children.\n * [GridView], which display a 2 dimensional, scrollable array of children.",
"detail": "",
"kind": 7,
"label": "Scrollbar"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DefaultTabController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The [TabController] for descendant widgets that don't specify one\nexplicitly.\n\n[DefaultTabController] is an inherited widget that is used to share a\n[TabController] with a [TabBar] or a [TabBarView]. It's used when sharing an\nexplicitly created [TabController] isn't convenient because the tab bar\nwidgets are created by a stateless parent widget or by different parent\nwidgets.\n\n```dart\nclass MyDemo extends StatelessWidget {\n final List<Tab> myTabs = <Tab>[\n Tab(text: 'LEFT'),\n Tab(text: 'RIGHT'),\n ];\n\n @override\n Widget build(BuildContext context) {\n return DefaultTabController(\n length: myTabs.length,\n child: Scaffold(\n appBar: AppBar(\n bottom: TabBar(\n tabs: myTabs,\n ),\n ),\n body: TabBarView(\n children: myTabs.map((Tab tab) {\n return Center(child: Text(tab.text));\n }).toList(),\n ),\n ),\n );\n }\n}\n```",
"detail": "",
"kind": 7,
"label": "DefaultTabController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ListWheelChildLoopingListDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A delegate that supplies infinite children for [ListWheelScrollView] by\nlooping an explicit list.\n\n[ListWheelScrollView] lazily constructs its children to avoid creating more\nchildren than are visible through the [Viewport]. This delegate provides\nchildren using an explicit list, which is convenient but reduces the benefit\nof building children lazily.\n\nIn general building all the widgets in advance is not efficient. It is\nbetter to create a delegate that builds them on demand using\n[ListWheelChildBuilderDelegate] or by subclassing [ListWheelChildDelegate]\ndirectly.\n\nThis class is provided for the cases where either the list of children is\nknown well in advance (ideally the children are themselves compile-time\nconstants, for example), and therefore will not be built each time the\ndelegate itself is created, or the list is small, such that it's likely\nalways visible (and thus there is nothing to be gained by building it on\ndemand). For example, the body of a dialog box might fit both of these\nconditions.",
"detail": "",
"kind": 7,
"label": "ListWheelChildLoopingListDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SizeTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animates its own size and clips and aligns its child.\n\n[SizeTransition] acts as a [ClipRect] that animates either its width or its\nheight, depending upon the value of [axis]. The alignment of the child along\nthe [axis] is specified by the [axisAlignment].\n\nLike most widgets, [SizeTransition] will conform to the constraints it is\ngiven, so be sure to put it in a context where it can change size. For\ninstance, if you place it into a [Container] with a fixed size, then the\n[SizeTransition] will not be able to change size, and will appear to do\nnothing.\n\nHere's an illustration of the [SizeTransition] widget, with it's [sizeFactor]\nanimated by a [CurvedAnimation] set to [Curves.fastOutSlowIn]:\n\nSee also:\n\n * [AnimatedCrossFade], for a widget that automatically animates between\n the sizes of two children, fading between them.\n * [ScaleTransition], a widget that scales the size of the child instead of\n clipping it.\n * [PositionedTransition], a widget that animates its child from a start\n position to an end position over the lifetime of the animation.\n * [RelativePositionedTransition], a widget that transitions its child's\n position based on the value of a rectangle relative to a bounding box.",
"detail": "",
"kind": 7,
"label": "SizeTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlutterLogoStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Possible ways to draw Flutter's logo.",
"detail": "",
"kind": 13,
"label": "FlutterLogoStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BlurStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Styles to use for blurs in [MaskFilter] objects.",
"detail": "",
"kind": 13,
"label": "BlurStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "IdleScrollActivity",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A scroll activity that does nothing.\n\nWhen a scroll view is not scrolling, it is performing the idle activity.\n\nIf the [Scrollable] changes dimensions, this activity triggers a ballistic\nactivity to restore the view.",
"detail": "",
"kind": 7,
"label": "IdleScrollActivity"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Velocity",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A velocity in two dimensions.",
"detail": "",
"kind": 7,
"label": "Velocity"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DragTargetBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for building children of a [DragTarget].\n\nThe `candidateData` argument contains the list of drag data that is hovering\nover this [DragTarget] and that has passed [DragTarget.onWillAccept]. The\n`rejectedData` argument contains the list of drag data that is hovering over\nthis [DragTarget] and that will not be accepted by the [DragTarget].\n\nUsed by [DragTarget.builder].",
"detail": "(BuildContext context, List<T> candidateData, List<dynamic> rejectedData) → Widget",
"kind": 7,
"label": "DragTargetBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SemanticIndexCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A callback which produces a semantic index given a widget and the local index.\n\nReturn a null value to prevent a widget from receiving an index.\n\nA semantic index is used to tag child semantic nodes for accessibility\nannouncements in scroll view.\n\nSee also:\n\n * [CustomScrollView], for an explanation of scroll semantics.\n * [SliverChildBuilderDelegate], for an explanation of how this is used to\n generate indexes.",
"detail": "(Widget widget, int localIndex) → int",
"kind": 7,
"label": "SemanticIndexCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextBox",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A rectangle enclosing a run of text.\n\nThis is similar to [Rect] but includes an inherent [TextDirection].",
"detail": "",
"kind": 7,
"label": "TextBox"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollNotificationPredicate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A predicate for [ScrollNotification], used to customize widgets that\nlisten to notifications from their children.",
"detail": "(ScrollNotification notification) → bool",
"kind": 7,
"label": "ScrollNotificationPredicate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedSize",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated widget that automatically transitions its size over a given\nduration whenever the given child's size changes.",
"detail": "",
"kind": 7,
"label": "AnimatedSize"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ProxyAnimation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An animation that is a proxy for another animation.\n\nA proxy animation is useful because the parent animation can be mutated. For\nexample, one object can create a proxy animation, hand the proxy to another\nobject, and then later change the animation from which the proxy receives\nits value.",
"detail": "",
"kind": 7,
"label": "ProxyAnimation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Tab",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design [TabBar] tab. If both [icon] and [text] are\nprovided, the text is displayed below the icon.\n\nSee also:\n\n * [TabBar], which displays a row of tabs.\n * [TabBarView], which displays a widget for the currently selected tab.\n * [TabController], which coordinates tab selection between a [TabBar] and a [TabBarView].\n * <https://material.io/design/components/tabs.html>",
"detail": "",
"kind": 7,
"label": "Tab"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DataRow",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Row configuration and cell data for a [DataTable].\n\nOne row configuration must be provided for each row to\ndisplay in the table. The list of [DataRow] objects is passed\nas the `rows` argument to the [new DataTable] constructor.\n\nThe data for this row of the table is provided in the [cells]\nproperty of the [DataRow] object.",
"detail": "",
"kind": 7,
"label": "DataRow"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Interval",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A curve that is 0.0 until [begin], then curved (according to [curve]) from\n0.0 at [begin] to 1.0 at [end], then remains 1.0 past [end].\n\nAn [Interval] can be used to delay an animation. For example, a six second\nanimation that uses an [Interval] with its [begin] set to 0.5 and its [end]\nset to 1.0 will essentially become a three-second animation that starts\nthree seconds later.\n",
"detail": "",
"kind": 7,
"label": "Interval"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "IgnorePointer",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that is invisible during hit testing.\n\nWhen [ignoring] is true, this widget (and its subtree) is invisible\nto hit testing. It still consumes space during layout and paints its child\nas usual. It just cannot be the target of located events, because it returns\nfalse from [RenderBox.hitTest].\n\nWhen [ignoringSemantics] is true, the subtree will be invisible to\nthe semantics layer (and thus e.g. accessibility tools). If\n[ignoringSemantics] is null, it uses the value of [ignoring].\n\nSee also:\n\n * [AbsorbPointer], which also prevents its children from receiving pointer\n events but is itself visible to hit testing.",
"detail": "",
"kind": 7,
"label": "IgnorePointer"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ChoiceChip",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design choice chip.\n\n[ChoiceChip]s represent a single choice from a set. Choice chips contain\nrelated descriptive text or categories.\n\nRequires one of its ancestors to be a [Material] widget. The [selected] and\n[label] arguments must not be null.\n\n\n```dart\nclass MyThreeOptions extends StatefulWidget {\n @override\n _MyThreeOptionsState createState() => _MyThreeOptionsState();\n}\n\nclass _MyThreeOptionsState extends State<MyThreeOptions> {\n int _value = 1;\n\n @override\n Widget build(BuildContext context) {\n return Wrap(\n children: List<Widget>.generate(\n 3,\n (int index) {\n return ChoiceChip(\n label: Text('Item $index'),\n selected: _value == index,\n onSelected: (bool selected) {\n setState(() {\n _value = selected ? index : null;\n });\n },\n );\n },\n ).toList(),\n );\n }\n}\n```\n\nSee also:\n\n * [Chip], a chip that displays information and can be deleted.\n * [InputChip], a chip that represents a complex piece of information, such\n as an entity (person, place, or thing) or conversational text, in a\n compact form.\n * [FilterChip], uses tags or descriptive words as a way to filter content.\n * [ActionChip], represents an action related to primary content.\n * [CircleAvatar], which shows images or initials of people.\n * [Wrap], A widget that displays its children in multiple horizontal or\n vertical runs.\n * <https://material.io/design/components/chips.html>",
"detail": "",
"kind": 7,
"label": "ChoiceChip"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RouteObserver",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [Navigator] observer that notifies [RouteAware]s of changes to the\nstate of their [Route].\n\n[RouteObserver] informs subscribers whenever a route of type `R` is pushed\non top of their own route of type `R` or popped from it. This is for example\nuseful to keep track of page transitions, e.g. a `RouteObserver<PageRoute>`\nwill inform subscribed [RouteAware]s whenever the user navigates away from\nthe current page route to another page route.\n\nTo be informed about route changes of any type, consider instantiating a\n`RouteObserver<Route>`.\n\n## Type arguments\n\nWhen using more aggressive\n[lints](http://dart-lang.github.io/linter/lints/), in particular lints such\nas `always_specify_types`, the Dart analyzer will require that certain types\nbe given with their type arguments. Since the [Route] class and its\nsubclasses have a type argument, this includes the arguments passed to this\nclass. Consider using `dynamic` to specify the entire class of routes rather\nthan only specific subtypes. For example, to watch for all [PageRoute]\nvariants, the `RouteObserver<PageRoute<dynamic>>` type may be used.\n\n\nTo make a [StatefulWidget] aware of its current [Route] state, implement\n[RouteAware] in its [State] and subscribe it to a [RouteObserver]:\n\n```dart\n// Register the RouteObserver as a navigation observer.\nfinal RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();\nvoid main() {\n runApp(MaterialApp(\n home: Container(),\n navigatorObservers: [routeObserver],\n ));\n}\n\nclass RouteAwareWidget extends StatefulWidget {\n State<RouteAwareWidget> createState() => RouteAwareWidgetState();\n}\n\n// Implement RouteAware in a widget's state and subscribe it to the RouteObserver.\nclass RouteAwareWidgetState extends State<RouteAwareWidget> with RouteAware {\n\n @override\n void didChangeDependencies() {\n super.didChangeDependencies();\n routeObserver.subscribe(this, ModalRoute.of(context));\n }\n\n @override\n void dispose() {\n routeObserver.unsubscribe(this);\n super.dispose();\n }\n\n @override\n void didPush() {\n // Route was pushed onto navigator and is now topmost route.\n }\n\n @override\n void didPopNext() {\n // Covering route was popped off the navigator.\n }\n\n @override\n Widget build(BuildContext context) => Container();\n\n}\n```",
"detail": "",
"kind": 7,
"label": "RouteObserver"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FutureBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Widget that builds itself based on the latest snapshot of interaction with\na [Future].\n\nThe [future] must have been obtained earlier, e.g. during [State.initState],\n[State.didUpdateConfig], or [State.didChangeDependencies]. It must not be\ncreated during the [State.build] or [StatelessWidget.build] method call when\nconstructing the [FutureBuilder]. If the [future] is created at the same\ntime as the [FutureBuilder], then every time the [FutureBuilder]'s parent is\nrebuilt, the asynchronous task will be restarted.\n\nA general guideline is to assume that every `build` method could get called\nevery frame, and to treat omitted calls as an optimization.\n\n\n## Timing\n\nWidget rebuilding is scheduled by the completion of the future, using\n[State.setState], but is otherwise decoupled from the timing of the future.\nThe [builder] callback is called at the discretion of the Flutter pipeline, and\nwill thus receive a timing-dependent sub-sequence of the snapshots that\nrepresent the interaction with the future.\n\nA side-effect of this is that providing a new but already-completed future\nto a [FutureBuilder] will result in a single frame in the\n[ConnectionState.waiting] state. This is because there is no way to\nsynchronously determine that a [Future] has already completed.\n\n## Builder contract\n\nFor a future that completes successfully with data, assuming [initialData]\nis null, the [builder] will be called with either both or only the latter of\nthe following snapshots:\n\n* `new AsyncSnapshot<String>.withData(ConnectionState.waiting, null)`\n* `new AsyncSnapshot<String>.withData(ConnectionState.done, 'some data')`\n\nIf that same future instead completed with an error, the [builder] would be\ncalled with either both or only the latter of:\n\n* `new AsyncSnapshot<String>.withData(ConnectionState.waiting, null)`\n* `new AsyncSnapshot<String>.withError(ConnectionState.done, 'some error')`\n\nThe initial snapshot data can be controlled by specifying [initialData]. You\nwould use this facility to ensure that if the [builder] is invoked before\nthe future completes, the snapshot carries data of your choice rather than\nthe default null value.\n\nThe data and error fields of the snapshot change only as the connection\nstate field transitions from `waiting` to `done`, and they will be retained\nwhen changing the [FutureBuilder] configuration to another future. If the\nold future has already completed successfully with data as above, changing\nconfiguration to a new future results in snapshot pairs of the form:\n\n* `new AsyncSnapshot<String>.withData(ConnectionState.none, 'data of first future')`\n* `new AsyncSnapshot<String>.withData(ConnectionState.waiting, 'data of second future')`\n\nIn general, the latter will be produced only when the new future is\nnon-null, and the former only when the old future is non-null.\n\nA [FutureBuilder] behaves identically to a [StreamBuilder] configured with\n`future?.asStream()`, except that snapshots with `ConnectionState.active`\nmay appear for the latter, depending on how the stream is implemented.\n\n\nThis sample shows a [FutureBuilder] configuring a text label to show the\nstate of an asynchronous calculation returning a string. Assume the\n`_calculation` field is set by pressing a button elsewhere in the UI.\n\n```dart\nFutureBuilder<String>(\n future: _calculation, // a previously-obtained Future<String> or null\n builder: (BuildContext context, AsyncSnapshot<String> snapshot) {\n switch (snapshot.connectionState) {\n case ConnectionState.none:\n return Text('Press button to start.');\n case ConnectionState.active:\n case ConnectionState.waiting:\n return Text('Awaiting result...');\n case ConnectionState.done:\n if (snapshot.hasError)\n return Text('Error: ${snapshot.error}');\n return Text('Result: ${snapshot.data}');\n }\n return null; // unreachable\n },\n)\n```",
"detail": "",
"kind": 7,
"label": "FutureBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "IconButton",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design icon button.\n\nAn icon button is a picture printed on a [Material] widget that reacts to\ntouches by filling with color (ink).\n\nIcon buttons are commonly used in the [AppBar.actions] field, but they can\nbe used in many other places as well.\n\nIf the [onPressed] callback is null, then the button will be disabled and\nwill not react to touch.\n\nRequires one of its ancestors to be a [Material] widget.\n\nThe hit region of an icon button will, if possible, be at least 48.0 pixels\nin size, regardless of the actual [iconSize], to satisfy the [touch target\nsize](https://material.io/guidelines/layout/metrics-keylines.html#metrics-keylines-touch-target-size)\nrequirements in the Material Design specification. The [alignment] controls\nhow the icon itself is positioned within the hit region.\n\n\nThis sample shows an `IconButton` that uses the Material icon \"volume_up\" to\nincrease the volume.\n\n```dart\ndouble _volume = 0.0;\n```\n\n```dart\nWidget build(BuildContext context) {\n return Scaffold(\n body: Center(\n child: Column(\n mainAxisSize: MainAxisSize.min,\n children: <Widget>[\n IconButton(\n icon: Icon(Icons.volume_up),\n tooltip: 'Increase volume by 10',\n onPressed: () {\n setState(() {\n _volume += 10;\n });\n },\n ),\n Text('Volume : $_volume')\n ],\n ),\n ),\n );\n}\n```\n\n### Adding a filled background\n\nIcon buttons don't support specifying a background color or other\nbackground decoration because typically the icon is just displayed\non top of the parent widget's background. Icon buttons that appear\nin [AppBar.actions] are an example of this.\n\nIt's easy enough to create an icon button with a filled background\nusing the [Ink] widget. The [Ink] widget renders a decoration on\nthe underlying [Material] along with the splash and highlight\n[InkResponse] contributed by descendant widgets.\n\n\nIn this sample the icon button's background color is defined with an [Ink]\nwidget whose child is an [IconButton]. The icon button's filled background\nis a light shade of blue, it's a filled circle, and it's as big as the\nbutton is.\n\n```dart\nWidget build(BuildContext context) {\n return Center(\n child: Container(\n child: Ink(\n decoration: ShapeDecoration(\n color: Colors.lightBlue,\n shape: CircleBorder(),\n ),\n child: IconButton(\n icon: Icon(Icons.android),\n color: Colors.white,\n onPressed: () {\n print(\"filled background\");\n },\n ),\n ),\n ),\n );\n}\n```\n\nSee also:\n\n * [Icons], a library of predefined icons.\n * [BackButton], an icon button for a \"back\" affordance which adapts to the\n current platform's conventions.\n * [CloseButton], an icon button for closing pages.\n * [AppBar], to show a toolbar at the top of an application.\n * [RaisedButton] and [FlatButton], for buttons with text in them.\n * [InkResponse] and [InkWell], for the ink splash effect itself.",
"detail": "",
"kind": 7,
"label": "IconButton"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TileMode",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines what happens at the edge of the gradient.\n\nA gradient is defined along a finite inner area. In the case of a linear\ngradient, it's between the parallel lines that are orthogonal to the line\ndrawn between two points. In the case of radial gradients, it's the disc\nthat covers the circle centered on a particular point up to a given radius.\n\nThis enum is used to define how the gradient should paint the regions\noutside that defined inner area.\n\nSee also:\n\n * [painting.Gradient], the superclass for [LinearGradient] and\n [RadialGradient], as used by [BoxDecoration] et al, which works in\n relative coordinates and can create a [Shader] representing the gradient\n for a particular [Rect] on demand.\n * [dart:ui.Gradient], the low-level class used when dealing with the\n [Paint.shader] property directly, with its [new Gradient.linear] and [new\n Gradient.radial] constructors.",
"detail": "",
"kind": 13,
"label": "TileMode"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MainAxisSize",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "How much space should be occupied in the main axis.\n\nDuring a flex layout, available space along the main axis is allocated to\nchildren. After allocating space, there might be some remaining free space.\nThis value controls whether to maximize or minimize the amount of free\nspace, subject to the incoming layout constraints.\n\nSee also:\n\n * [Column], [Row], and [Flex], the flex widgets.\n * [Expanded] and [Flexible], the widgets that controls a flex widgets'\n children's flex.\n * [RenderFlex], the flex render object.\n * [MainAxisAlignment], which controls how the free space is distributed.",
"detail": "",
"kind": 13,
"label": "MainAxisSize"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TimeOfDayFormat",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Determines how the time picker invoked using [showTimePicker] formats and\nlays out the time controls.\n\nThe time picker provides layout configurations optimized for each of the\nenum values.",
"detail": "",
"kind": 13,
"label": "TimeOfDayFormat"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AlignTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of an [Align] that animates its [Align.alignment] property.\n\nHere's an illustration of the [DecoratedBoxTransition] widget, with it's\n[decoration] animated by a [CurvedAnimation] set to [Curves.decelerate]:\n\nSee also:\n\n * [PositionedTransition], a widget that animates its child from a start\n position to an end position over the lifetime of the animation.\n * [RelativePositionedTransition], a widget that transitions its child's\n position based on the value of a rectangle relative to a bounding box.\n * [SizeTransition], a widget that animates its own size and clips and\n aligns its child.\n * [SlideTransition], a widget that animates the position of a widget\n relative to its normal position.",
"detail": "",
"kind": 7,
"label": "AlignTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedSwitcherLayoutBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for builders used to generate custom layouts for\n[AnimatedSwitcher].\n\nThe builder should return a widget which contains the given children, laid\nout as desired. It must not return null. The builder should be able to\nhandle an empty list of `previousChildren`, or a null `currentChild`.\n\nThe `previousChildren` list is an unmodifiable list, sorted with the oldest\nat the beginning and the newest at the end. It does not include the\n`currentChild`.",
"detail": "(Widget currentChild, List<Widget> previousChildren) → Widget",
"kind": 7,
"label": "AnimatedSwitcherLayoutBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedPositionedDirectional",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [PositionedDirectional] which automatically transitions\nthe child's position over a given duration whenever the given position\nchanges.\n\nThe ambient [Directionality] is used to determine whether [start] is to the\nleft or to the right.\n\nOnly works if it's the child of a [Stack].\n\nThis widget is a good choice if the _size_ of the child would end up\nchanging as a result of this animation. If the size is intended to remain\nthe same, with only the _position_ changing over time, then consider\n[SlideTransition] instead. [SlideTransition] only triggers a repaint each\nframe of the animation, whereas [AnimatedPositionedDirectional] will trigger\na relayout as well. ([SlideTransition] is also text-direction-aware.)\n\nHere's an illustration of what using this widget looks like, using a [curve]\nof [Curves.fastOutSlowIn].\n\nSee also:\n\n * [AnimatedPositioned], which specifies the widget's position visually (the\n same as this widget, but for animating [Positioned]).",
"detail": "",
"kind": 7,
"label": "AnimatedPositionedDirectional"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RadioListTile",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [ListTile] with a [Radio]. In other words, a radio button with a label.\n\nThe entire list tile is interactive: tapping anywhere in the tile selects\nthe radio button.\n\nThe [value], [groupValue], [onChanged], and [activeColor] properties of this\nwidget are identical to the similarly-named properties on the [Radio]\nwidget. The type parameter `T` serves the same purpose as that of the\n[Radio] class' type parameter.\n\nThe [title], [subtitle], [isThreeLine], and [dense] properties are like\nthose of the same name on [ListTile].\n\nThe [selected] property on this widget is similar to the [ListTile.selected]\nproperty, but the color used is that described by [activeColor], if any,\ndefaulting to the accent color of the current [Theme]. No effort is made to\ncoordinate the [selected] state and the [checked] state; to have the list\ntile appear selected when the radio button is the selected radio button, set\n[selected] to true when [value] matches [groupValue].\n\nThe radio button is shown on the left by default in left-to-right languages\n(i.e. the leading edge). This can be changed using [controlAffinity]. The\n[secondary] widget is placed on the opposite side. This maps to the\n[ListTile.leading] and [ListTile.trailing] properties of [ListTile].\n\nTo show the [RadioListTile] as disabled, pass null as the [onChanged]\ncallback.\n\n\nThis widget shows a pair of radio buttons that control the `_character`\nfield. The field is of the type `SingingCharacter`, an enum.\n\n```dart\n// At the top level:\nenum SingingCharacter { lafayette, jefferson }\n\n// In the State of a stateful widget:\nSingingCharacter _character = SingingCharacter.lafayette;\n\n// In the build function of that State:\nColumn(\n children: <Widget>[\n RadioListTile<SingingCharacter>(\n title: const Text('Lafayette'),\n value: SingingCharacter.lafayette,\n groupValue: _character,\n onChanged: (SingingCharacter value) { setState(() { _character = value; }); },\n ),\n RadioListTile<SingingCharacter>(\n title: const Text('Thomas Jefferson'),\n value: SingingCharacter.jefferson,\n groupValue: _character,\n onChanged: (SingingCharacter value) { setState(() { _character = value; }); },\n ),\n ],\n)\n```\n\nSee also:\n\n * [ListTileTheme], which can be used to affect the style of list tiles,\n including radio list tiles.\n * [CheckboxListTile], a similar widget for checkboxes.\n * [SwitchListTile], a similar widget for switches.\n * [ListTile] and [Radio], the widgets from which this widget is made.",
"detail": "",
"kind": 7,
"label": "RadioListTile"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TableCell",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that controls how a child of a [Table] is aligned.\n\nA [TableCell] widget must be a descendant of a [Table], and the path from\nthe [TableCell] widget to its enclosing [Table] must contain only\n[TableRow]s, [StatelessWidget]s, or [StatefulWidget]s (not\nother kinds of widgets, like [RenderObjectWidget]s).",
"detail": "",
"kind": 7,
"label": "TableCell"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RouteAware",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface for objects that are aware of their current [Route].\n\nThis is used with [RouteObserver] to make a widget aware of changes to the\n[Navigator]'s session history.",
"detail": "",
"kind": 7,
"label": "RouteAware"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LeafRenderObjectElement",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An [Element] that uses a [LeafRenderObjectWidget] as its configuration.",
"detail": "",
"kind": 7,
"label": "LeafRenderObjectElement"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScaffoldState",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "State for a [Scaffold].\n\nCan display [SnackBar]s and [BottomSheet]s. Retrieve a [ScaffoldState] from\nthe current [BuildContext] using [Scaffold.of].",
"detail": "",
"kind": 7,
"label": "ScaffoldState"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "NavigatorObserver",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface for observing the behavior of a [Navigator].",
"detail": "",
"kind": 7,
"label": "NavigatorObserver"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScaffoldPrelayoutGeometry",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The geometry of the [Scaffold] after all its contents have been laid out\nexcept the [FloatingActionButton].\n\nThe [Scaffold] passes this pre-layout geometry to its\n[FloatingActionButtonLocation], which produces an [Offset] that the\n[Scaffold] uses to position the [FloatingActionButton].\n\nFor a description of the [Scaffold]'s geometry after it has\nfinished laying out, see the [ScaffoldGeometry].",
"detail": "",
"kind": 7,
"label": "ScaffoldPrelayoutGeometry"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BoxBorder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for box borders that can paint as rectangles, circles, or rounded\nrectangles.\n\nThis class is extended by [Border] and [BorderDirectional] to provide\nconcrete versions of four-sided borders using different conventions for\nspecifying the sides.\n\nThe only API difference that this class introduces over [ShapeBorder] is\nthat its [paint] method takes additional arguments.\n\nSee also:\n\n * [BorderSide], which is used to describe each side of the box.\n * [RoundedRectangleBorder], another way of describing a box's border.\n * [CircleBorder], another way of describing a circle border.\n * [BoxDecoration], which uses a [BoxBorder] to describe its borders.",
"detail": "",
"kind": 7,
"label": "BoxBorder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TabBarTheme",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines a theme for [TabBar] widgets.\n\nA tab bar theme describes the color of the tab label and the size/shape of\nthe [TabBar.indicator].\n\nDescendant widgets obtain the current theme's [TabBarTheme] object using\n`TabBarTheme.of(context)`. Instances of [TabBarTheme] can be customized with\n[TabBarTheme.copyWith].\n\nSee also:\n\n * [TabBar], a widget that displays a horizontal row of tabs.\n * [ThemeData], which describes the overall theme information for the\n application.",
"detail": "",
"kind": 7,
"label": "TabBarTheme"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StateSetter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The signature of [State.setState] functions.",
"detail": "(VoidCallback fn) → void",
"kind": 7,
"label": "StateSetter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ExactAssetImage",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Fetches an image from an [AssetBundle], associating it with the given scale.\n\nThis implementation requires an explicit final [assetName] and [scale] on\nconstruction, and ignores the device pixel ratio and size in the\nconfiguration passed into [resolve]. For a resolution-aware variant that\nuses the configuration to pick an appropriate image based on the device\npixel ratio and size, see [AssetImage].\n\n## Fetching assets\n\nWhen fetching an image provided by the app itself, use the [assetName]\nargument to name the asset to choose. For instance, consider a directory\n`icons` with an image `heart.png`. First, the [pubspec.yaml] of the project\nshould specify its assets in the `flutter` section:\n\n```yaml\nflutter:\n assets:\n - icons/heart.png\n```\n\nThen, to fetch the image and associate it with scale `1.5`, use\n\n```dart\nAssetImage('icons/heart.png', scale: 1.5)\n```\n\n## Assets in packages\n\nTo fetch an asset from a package, the [package] argument must be provided.\nFor instance, suppose the structure above is inside a package called\n`my_icons`. Then to fetch the image, use:\n\n```dart\nAssetImage('icons/heart.png', scale: 1.5, package: 'my_icons')\n```\n\nAssets used by the package itself should also be fetched using the [package]\nargument as above.\n\nIf the desired asset is specified in the `pubspec.yaml` of the package, it\nis bundled automatically with the app. In particular, assets used by the\npackage itself must be specified in its `pubspec.yaml`.\n\nA package can also choose to have assets in its 'lib/' folder that are not\nspecified in its `pubspec.yaml`. In this case for those images to be\nbundled, the app has to specify which ones to include. For instance a\npackage named `fancy_backgrounds` could have:\n\n```\nlib/backgrounds/background1.png\nlib/backgrounds/background2.png\nlib/backgrounds/background3.png\n```\n\nTo include, say the first image, the `pubspec.yaml` of the app should specify\nit in the `assets` section:\n\n```yaml\n assets:\n - packages/fancy_backgrounds/backgrounds/background1.png\n```\n\nThe `lib/` is implied, so it should not be included in the asset path.\n\nSee also:\n\n * [Image.asset] for a shorthand of an [Image] widget backed by\n [ExactAssetImage] when using a scale.",
"detail": "",
"kind": 7,
"label": "ExactAssetImage"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FileImage",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Decodes the given [File] object as an image, associating it with the given\nscale.\n\nSee also:\n\n * [Image.file] for a shorthand of an [Image] widget backed by [FileImage].",
"detail": "",
"kind": 7,
"label": "FileImage"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MergeSemantics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that merges the semantics of its descendants.\n\nCauses all the semantics of the subtree rooted at this node to be\nmerged into one node in the semantics tree. For example, if you\nhave a widget with a Text node next to a checkbox widget, this\ncould be used to merge the label from the Text node with the\n\"checked\" semantic state of the checkbox into a single node that\nhad both the label and the checked state. Otherwise, the label\nwould be presented as a separate feature than the checkbox, and\nthe user would not be able to be sure that they were related.\n\nBe aware that if two nodes in the subtree have conflicting\nsemantics, the result may be nonsensical. For example, a subtree\nwith a checked checkbox and an unchecked checkbox will be\npresented as checked. All the labels will be merged into a single\nstring (with newlines separating each label from the other). If\nmultiple nodes in the merged subtree can handle semantic gestures,\nthe first one in tree order will be the one to receive the\ncallbacks.",
"detail": "",
"kind": 7,
"label": "MergeSemantics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BottomSheet",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design bottom sheet.\n\nThere are two kinds of bottom sheets in material design:\n\n * _Persistent_. A persistent bottom sheet shows information that\n supplements the primary content of the app. A persistent bottom sheet\n remains visible even when the user interacts with other parts of the app.\n Persistent bottom sheets can be created and displayed with the\n [ScaffoldState.showBottomSheet] function or by specifying the\n [Scaffold.bottomSheet] constructor parameter.\n\n * _Modal_. A modal bottom sheet is an alternative to a menu or a dialog and\n prevents the user from interacting with the rest of the app. Modal bottom\n sheets can be created and displayed with the [showModalBottomSheet]\n function.\n\nThe [BottomSheet] widget itself is rarely used directly. Instead, prefer to\ncreate a persistent bottom sheet with [ScaffoldState.showBottomSheet] or\n[Scaffold.bottomSheet], and a modal bottom sheet with [showModalBottomSheet].\n\nSee also:\n\n * [showBottomSheet] and [ScaffoldState.showBottomSheet], for showing\n non-modal \"persistent\" bottom sheets.\n * [showModalBottomSheet], which can be used to display a modal bottom\n sheet.\n * <https://material.io/design/components/sheets-bottom.html>",
"detail": "",
"kind": 7,
"label": "BottomSheet"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SizeChangedLayoutNotifier",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that automatically dispatches a [SizeChangedLayoutNotification]\nwhen the layout dimensions of its child change.\n\nThe notification is not sent for the initial layout (since the size doesn't\nchange in that case, it's just established).\n\nTo listen for the notification dispatched by this widget, use a\n[NotificationListener<SizeChangedLayoutNotification>].\n\nThe [Material] class listens for [LayoutChangedNotification]s, including\n[SizeChangedLayoutNotification]s, to repaint [InkResponse] and [InkWell] ink\neffects. When a widget is likely to change size, wrapping it in a\n[SizeChangedLayoutNotifier] will cause the ink effects to correctly repaint\nwhen the child changes size.\n\nSee also:\n\n * [Notification], the base class for notifications that bubble through the\n widget tree.",
"detail": "",
"kind": 7,
"label": "SizeChangedLayoutNotifier"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Notification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A notification that can bubble up the widget tree.\n\nYou can determine the type of a notification using the `is` operator to\ncheck the [runtimeType] of the notification.\n\nTo listen for notifications in a subtree, use a [NotificationListener].\n\nTo send a notification, call [dispatch] on the notification you wish to\nsend. The notification will be delivered to any [NotificationListener]\nwidgets with the appropriate type parameters that are ancestors of the given\n[BuildContext].",
"detail": "",
"kind": 7,
"label": "Notification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PopupMenuEntry",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A base class for entries in a material design popup menu.\n\nThe popup menu widget uses this interface to interact with the menu items.\nTo show a popup menu, use the [showMenu] function. To create a button that\nshows a popup menu, consider using [PopupMenuButton].\n\nThe type `T` is the type of the value(s) the entry represents. All the\nentries in a given menu must represent values with consistent types.\n\nA [PopupMenuEntry] may represent multiple values, for example a row with\nseveral icons, or a single entry, for example a menu item with an icon (see\n[PopupMenuItem]), or no value at all (for example, [PopupMenuDivider]).\n\nSee also:\n\n * [PopupMenuItem], a popup menu entry for a single value.\n * [PopupMenuDivider], a popup menu entry that is just a horizontal line.\n * [CheckedPopupMenuItem], a popup menu item with a checkmark.\n * [showMenu], a method to dynamically show a popup menu at a given location.\n * [PopupMenuButton], an [IconButton] that automatically shows a menu when\n it is tapped.",
"detail": "",
"kind": 7,
"label": "PopupMenuEntry"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ImageStreamCompleter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for those that manage the loading of [dart:ui.Image] objects for\n[ImageStream]s.\n\n[ImageStreamListener] objects are rarely constructed directly. Generally, an\n[ImageProvider] subclass will return an [ImageStream] and automatically\nconfigure it with the right [ImageStreamCompleter] when possible.",
"detail": "",
"kind": 7,
"label": "ImageStreamCompleter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "WidgetsBindingObserver",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Interface for classes that register with the Widgets layer binding.\n\nWhen used as a mixin, provides no-op method implementations.\n\nSee [WidgetsBinding.addObserver] and [WidgetsBinding.removeObserver].\n\nThis class can be extended directly, to get default behaviors for all of the\nhandlers, or can used with the `implements` keyword, in which case all the\nhandlers must be implemented (and the analyzer will list those that have\nbeen omitted).\n\n\nThis [StatefulWidget] implements the parts of the [State] and\n[WidgetsBindingObserver] protocols necessary to react to application\nlifecycle messages. See [didChangeAppLifecycleState].\n\n```dart\nclass AppLifecycleReactor extends StatefulWidget {\n const AppLifecycleReactor({ Key key }) : super(key: key);\n\n @override\n _AppLifecycleReactorState createState() => _AppLifecycleReactorState();\n}\n\nclass _AppLifecycleReactorState extends State<AppLifecycleReactor> with WidgetsBindingObserver {\n @override\n void initState() {\n super.initState();\n WidgetsBinding.instance.addObserver(this);\n }\n\n @override\n void dispose() {\n WidgetsBinding.instance.removeObserver(this);\n super.dispose();\n }\n\n AppLifecycleState _notification;\n\n @override\n void didChangeAppLifecycleState(AppLifecycleState state) {\n setState(() { _notification = state; });\n }\n\n @override\n Widget build(BuildContext context) {\n return Text('Last notification: $_notification');\n }\n}\n```\n\nTo respond to other notifications, replace the [didChangeAppLifecycleState]\nmethod above with other methods from this class.",
"detail": "",
"kind": 7,
"label": "WidgetsBindingObserver"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ExpansionPanel",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material expansion panel. It has a header and a body and can be either\nexpanded or collapsed. The body of the panel is only visible when it is\nexpanded.\n\nExpansion panels are only intended to be used as children for\n[ExpansionPanelList].\n\nSee [ExpansionPanelList] for a sample implementation.\n\nSee also:\n\n * [ExpansionPanelList]\n * <https://material.io/design/components/lists.html#types>",
"detail": "",
"kind": 7,
"label": "ExpansionPanel"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ListTileTheme",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An inherited widget that defines color and style parameters for [ListTile]s\nin this widget's subtree.\n\nValues specified here are used for [ListTile] properties that are not given\nan explicit non-null value.\n\nThe [Drawer] widget specifies a tile theme for its children which sets\n[style] to [ListTileStyle.drawer].",
"detail": "",
"kind": 7,
"label": "ListTileTheme"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialLocalizations",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines the localized resource values used by the Material widgets.\n\nSee also:\n\n * [DefaultMaterialLocalizations], the default, English-only, implementation\n of this interface.\n * [GlobalMaterialLocalizations], which provides material localizations for\n many languages.",
"detail": "",
"kind": 7,
"label": "MaterialLocalizations"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PopupMenuCanceled",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the callback invoked when a [PopupMenuButton] is dismissed\nwithout selecting an item.\n\nUsed by [PopupMenuButton.onCanceled].",
"detail": "() → void",
"kind": 7,
"label": "PopupMenuCanceled"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DragUpdateDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Details object for callbacks that use [GestureDragUpdateCallback].\n\nSee also:\n\n * [DragGestureRecognizer.onUpdate], which uses [GestureDragUpdateCallback].\n * [DragDownDetails], the details for [GestureDragDownCallback].\n * [DragStartDetails], the details for [GestureDragStartCallback].\n * [DragEndDetails], the details for [GestureDragEndCallback].",
"detail": "",
"kind": 7,
"label": "DragUpdateDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationBehavior",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Configures how an [AnimationController] behaves when animations are disabled.\n\nWhen [AccessibilityFeatures.disableAnimations] is true, the device is asking\nFlutter to reduce or disable animations as much as possible. To honor this,\nwe reduce the duration and the corresponding number of frames for animations.\nThis enum is used to allow certain [AnimationController]s to opt out of this\nbehavior.\n\nFor example, the [AnimationController] which controls the physics simulation\nfor a scrollable list will have [AnimationBehavior.preserve] so that when\na user attempts to scroll it does not jump to the end/beginning too quickly.",
"detail": "",
"kind": 13,
"label": "AnimationBehavior"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollConfiguration",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Controls how [Scrollable] widgets behave in a subtree.\n\nThe scroll configuration determines the [ScrollPhysics] and viewport\ndecorations used by descendants of [child].",
"detail": "",
"kind": 7,
"label": "ScrollConfiguration"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Gradient",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A 2D gradient.\n\nThis is an interface that allows [LinearGradient], [RadialGradient], and\n[SweepGradient] classes to be used interchangeably in [BoxDecoration]s.\n\nSee also:\n\n * [Gradient](https://api.flutter.dev/flutter/dart-ui/Gradient-class.html), the class in the [dart:ui] library.\n",
"detail": "",
"kind": 7,
"label": "Gradient"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DefaultShaderWarmUp",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Default way of warming up Skia shader compilations.\n\nThe draw operations being warmed up here are decided according to Flutter\nengineers' observation and experience based on the apps and the performance\nissues seen so far.",
"detail": "",
"kind": 7,
"label": "DefaultShaderWarmUp"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BottomNavigationBarItem",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interactive button within either material's [BottomNavigationBar]\nor the iOS themed [CupertinoTabBar] with an icon and title.\n\nThis class is rarely used in isolation. It is typically embedded in one of\nthe bottom navigation widgets above.\n\nSee also:\n\n * [BottomNavigationBar]\n * <https://material.io/design/components/bottom-navigation.html>\n * [CupertinoTabBar]\n * <https://developer.apple.com/ios/human-interface-guidelines/bars/tab-bars>",
"detail": "",
"kind": 7,
"label": "BottomNavigationBarItem"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "WidgetInspector",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that enables inspecting the child widget's structure.\n\nSelect a location on your device or emulator and view what widgets and\nrender object that best matches the location. An outline of the selected\nwidget and terse summary information is shown on device with detailed\ninformation is shown in the observatory or in IntelliJ when using the\nFlutter Plugin.\n\nThe inspector has a select mode and a view mode.\n\nIn the select mode, tapping the device selects the widget that best matches\nthe location of the touch and switches to view mode. Dragging a finger on\nthe device selects the widget under the drag location but does not switch\nmodes. Touching the very edge of the bounding box of a widget triggers\nselecting the widget even if another widget that also overlaps that\nlocation would otherwise have priority.\n\nIn the view mode, the previously selected widget is outlined, however,\ntouching the device has the same effect it would have if the inspector\nwasn't present. This allows interacting with the application and viewing how\nthe selected widget changes position. Clicking on the select icon in the\nbottom left corner of the application switches back to select mode.",
"detail": "",
"kind": 7,
"label": "WidgetInspector"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ClipRRect",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that clips its child using a rounded rectangle.\n\nBy default, [ClipRRect] uses its own bounds as the base rectangle for the\nclip, but the size and location of the clip can be customized using a custom\n[clipper].\n\n\nSee also:\n\n * [CustomClipper], for information about creating custom clips.\n * [ClipRect], for more efficient clips without rounded corners.\n * [ClipOval], for an elliptical clip.\n * [ClipPath], for an arbitrarily shaped clip.",
"detail": "",
"kind": 7,
"label": "ClipRRect"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Hero",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that marks its child as being a candidate for\n[hero animations](https://flutter.dev/docs/development/ui/animations/hero-animations).\n\nWhen a [PageRoute] is pushed or popped with the [Navigator], the entire\nscreen's content is replaced. An old route disappears and a new route\nappears. If there's a common visual feature on both routes then it can\nbe helpful for orienting the user for the feature to physically move from\none page to the other during the routes' transition. Such an animation\nis called a *hero animation*. The hero widgets \"fly\" in the Navigator's\noverlay during the transition and while they're in-flight they're, by\ndefault, not shown in their original locations in the old and new routes.\n\nTo label a widget as such a feature, wrap it in a [Hero] widget. When\nnavigation happens, the [Hero] widgets on each route are identified\nby the [HeroController]. For each pair of [Hero] widgets that have the\nsame tag, a hero animation is triggered.\n\nIf a [Hero] is already in flight when navigation occurs, its\nflight animation will be redirected to its new destination. The\nwidget shown in-flight during the transition is, by default, the\ndestination route's [Hero]'s child.\n\nFor a Hero animation to trigger, the Hero has to exist on the very first\nframe of the new page's animation.\n\nRoutes must not contain more than one [Hero] for each [tag].\n\n\n## Discussion\n\nHeroes and the [Navigator]'s [Overlay] [Stack] must be axis-aligned for\nall this to work. The top left and bottom right coordinates of each animated\nHero will be converted to global coordinates and then from there converted\nto that [Stack]'s coordinate space, and the entire Hero subtree will, for\nthe duration of the animation, be lifted out of its original place, and\npositioned on that stack. If the [Hero] isn't axis aligned, this is going to\nfail in a rather ugly fashion. Don't rotate your heroes!\n\nTo make the animations look good, it's critical that the widget tree for the\nhero in both locations be essentially identical. The widget of the *target*\nis, by default, used to do the transition: when going from route A to route\nB, route B's hero's widget is placed over route A's hero's widget. If a\n[flightShuttleBuilder] is supplied, its output widget is shown during the\nflight transition instead.\n\nBy default, both route A and route B's heroes are hidden while the\ntransitioning widget is animating in-flight above the 2 routes.\n[placeholderBuilder] can be used to show a custom widget in their place\ninstead once the transition has taken flight.\n\nDuring the transition, the transition widget is animated to route B's hero's\nposition, and then the widget is inserted into route B. When going back from\nB to A, route A's hero's widget is, by default, placed over where route B's\nhero's widget was, and then the animation goes the other way.\n\n### Nested Navigators\n\nIf either or both routes contain nested [Navigator]s, only [Hero]s\ncontained in the top-most routes (as defined by [Route.isCurrent]) *of those\nnested [Navigator]s* are considered for animation. Just like in the\nnon-nested case the top-most routes containing these [Hero]s in the nested\n[Navigator]s have to be [PageRoute]s.\n\n## Parts of a Hero Transition\n\n![Diagrams with parts of the Hero transition.](https://flutter.github.io/assets-for-api-docs/assets/interaction/heroes.png)",
"detail": "",
"kind": 7,
"label": "Hero"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Drawer",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design panel that slides in horizontally from the edge of a\n[Scaffold] to show navigation links in an application.\n\nDrawers are typically used with the [Scaffold.drawer] property. The child of\nthe drawer is usually a [ListView] whose first child is a [DrawerHeader]\nthat displays status information about the current user. The remaining\ndrawer children are often constructed with [ListTile]s, often concluding\nwith an [AboutListTile].\n\nAn open drawer can be closed by calling [Navigator.pop]. For example\na drawer item might close the drawer when tapped:\n\n```dart\nListTile(\n leading: Icon(Icons.change_history),\n title: Text('Change history'),\n onTap: () {\n // change app state...\n Navigator.pop(context); // close the drawer\n },\n);\n```\n\nThe [AppBar] automatically displays an appropriate [IconButton] to show the\n[Drawer] when a [Drawer] is available in the [Scaffold]. The [Scaffold]\nautomatically handles the edge-swipe gesture to show the drawer.\n\nSee also:\n\n * [Scaffold.drawer], where one specifies a [Drawer] so that it can be\n shown.\n * [Scaffold.of], to obtain the current [ScaffoldState], which manages the\n display and animation of the drawer.\n * [ScaffoldState.openDrawer], which displays its [Drawer], if any.\n * <https://material.io/design/components/navigation-drawer.html>",
"detail": "",
"kind": 7,
"label": "Drawer"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "WrapAlignment",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "How [Wrap] should align objects.\n\nUsed both to align children within a run in the main axis as well as to\nalign the runs themselves in the cross axis.",
"detail": "",
"kind": 13,
"label": "WrapAlignment"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ViewportBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature used by [Scrollable] to build the viewport through which the\nscrollable content is displayed.",
"detail": "(BuildContext context, ViewportOffset position) → Widget",
"kind": 7,
"label": "ViewportBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InheritedElement",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An [Element] that uses an [InheritedWidget] as its configuration.",
"detail": "",
"kind": 7,
"label": "InheritedElement"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SimpleDialog",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A simple material design dialog.\n\nA simple dialog offers the user a choice between several options. A simple\ndialog has an optional title that is displayed above the choices.\n\nChoices are normally represented using [SimpleDialogOption] widgets. If\nother widgets are used, see [contentPadding] for notes regarding the\nconventions for obtaining the spacing expected by Material Design.\n\nFor dialogs that inform the user about a situation, consider using an\n[AlertDialog].\n\nTypically passed as the child widget to [showDialog], which displays the\ndialog.\n\n\nIn this example, the user is asked to select between two options. These\noptions are represented as an enum. The [showDialog] method here returns\na [Future] that completes to a value of that enum. If the user cancels\nthe dialog (e.g. by hitting the back button on Android, or tapping on the\nmask behind the dialog) then the future completes with the null value.\n\nThe return value in this example is used as the index for a switch statement.\nOne advantage of using an enum as the return value and then using that to\ndrive a switch statement is that the analyzer will flag any switch statement\nthat doesn't mention every value in the enum.\n\n```dart\nFuture<void> _askedToLead() async {\n switch (await showDialog<Department>(\n context: context,\n builder: (BuildContext context) {\n return SimpleDialog(\n title: const Text('Select assignment'),\n children: <Widget>[\n SimpleDialogOption(\n onPressed: () { Navigator.pop(context, Department.treasury); },\n child: const Text('Treasury department'),\n ),\n SimpleDialogOption(\n onPressed: () { Navigator.pop(context, Department.state); },\n child: const Text('State department'),\n ),\n ],\n );\n }\n )) {\n case Department.treasury:\n // Let's go.\n // ...\n break;\n case Department.state:\n // ...\n break;\n }\n}\n```\n\nSee also:\n\n * [SimpleDialogOption], which are options used in this type of dialog.\n * [AlertDialog], for dialogs that have a row of buttons below the body.\n * [Dialog], on which [SimpleDialog] and [AlertDialog] are based.\n * [showDialog], which actually displays the dialog and returns its result.\n * <https://material.io/design/components/dialogs.html#simple-dialog>",
"detail": "",
"kind": 7,
"label": "SimpleDialog"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TabPageSelectorIndicator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Displays a single circle with the specified border and background colors.\n\nUsed by [TabPageSelector] to indicate the selected page.",
"detail": "",
"kind": 7,
"label": "TabPageSelectorIndicator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CompositedTransformFollower",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that follows a [CompositedTransformTarget].\n\nWhen this widget is composited during the compositing phase (which comes\nafter the paint phase, as described in [WidgetsBinding.drawFrame]), it\napplies a transformation that causes it to provide its child with a\ncoordinate space that matches that of the linked [CompositedTransformTarget]\nwidget, offset by [offset].\n\nThe [LayerLink] object used as the [link] must be the same object as that\nprovided to the matching [CompositedTransformTarget].\n\nThe [CompositedTransformTarget] must come earlier in the paint order than\nthis [CompositedTransformFollower].\n\nHit testing on descendants of this widget will only work if the target\nposition is within the box that this widget's parent considers to be\nhittable. If the parent covers the screen, this is trivially achievable, so\nthis widget is usually used as the root of an [OverlayEntry] in an app-wide\n[Overlay] (e.g. as created by the [MaterialApp] widget's [Navigator]).\n\nSee also:\n\n * [CompositedTransformTarget], the widget that this widget can target.\n * [FollowerLayer], the layer that implements this widget's logic.\n * [Transform], which applies an arbitrary transform to a child.",
"detail": "",
"kind": 7,
"label": "CompositedTransformFollower"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RelativeRect",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An immutable 2D, axis-aligned, floating-point rectangle whose coordinates\nare given relative to another rectangle's edges, known as the container.\nSince the dimensions of the rectangle are relative to those of the\ncontainer, this class has no width and height members. To determine the\nwidth or height of the rectangle, convert it to a [Rect] using [toRect()]\n(passing the container's own Rect), and then examine that object.\n\nThe fields [left], [right], [bottom], and [top] must not be null.",
"detail": "",
"kind": 7,
"label": "RelativeRect"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "EditableText",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A basic text input field.\n\nThis widget interacts with the [TextInput] service to let the user edit the\ntext it contains. It also provides scrolling, selection, and cursor\nmovement. This widget does not provide any focus management (e.g.,\ntap-to-focus).\n\n## Input Actions\n\nA [TextInputAction] can be provided to customize the appearance of the\naction button on the soft keyboard for Android and iOS. The default action\nis [TextInputAction.done].\n\nMany [TextInputAction]s are common between Android and iOS. However, if an\n[inputAction] is provided that is not supported by the current\nplatform in debug mode, an error will be thrown when the corresponding\nEditableText receives focus. For example, providing iOS's \"emergencyCall\"\naction when running on an Android device will result in an error when in\ndebug mode. In release mode, incompatible [TextInputAction]s are replaced\neither with \"unspecified\" on Android, or \"default\" on iOS. Appropriate\n[inputAction]s can be chosen by checking the current platform and then\nselecting the appropriate action.\n\n## Lifecycle\n\nUpon completion of editing, like pressing the \"done\" button on the keyboard,\ntwo actions take place:\n\n 1st: Editing is finalized. The default behavior of this step includes\n an invocation of [onChanged]. That default behavior can be overridden.\n See [onEditingComplete] for details.\n\n 2nd: [onSubmitted] is invoked with the user's input value.\n\n[onSubmitted] can be used to manually move focus to another input widget\nwhen a user finishes with the currently focused input widget.\n\nRather than using this widget directly, consider using [TextField], which\nis a full-featured, material-design text input field with placeholder text,\nlabels, and [Form] integration.\n\n## Gesture Events Handling\n\nThis widget provides rudimentary, platform-agnostic gesture handling for\nuser actions such as tapping, long-pressing and scrolling when\n[rendererIgnoresPointer] is false (false by default). To tightly conform\nto the platform behavior with respect to input gestures in text fields, use\n[TextField] or [CupertinoTextField]. For custom selection behavior, call\nmethods such as [RenderEditable.selectPosition],\n[RenderEditable.selectWord], etc. programmatically.\n\nSee also:\n\n * [TextField], which is a full-featured, material-design text input field\n with placeholder text, labels, and [Form] integration.",
"detail": "",
"kind": 7,
"label": "EditableText"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextEditingController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A controller for an editable text field.\n\nWhenever the user modifies a text field with an associated\n[TextEditingController], the text field updates [value] and the controller\nnotifies its listeners. Listeners can then read the [text] and [selection]\nproperties to learn what the user has typed or how the selection has been\nupdated.\n\nSimilarly, if you modify the [text] or [selection] properties, the text\nfield will be notified and will update itself appropriately.\n\nA [TextEditingController] can also be used to provide an initial value for a\ntext field. If you build a text field with a controller that already has\n[text], the text field will use that text as its initial value.\n\nThe [text] or [selection] properties can be set from within a listener\nadded to this controller. If both properties need to be changed then the\ncontroller's [value] should be set instead.\n\nThis example creates a [TextField] with a [TextEditingController] whose\nchange listener forces the entered text to be lower case and keeps the\ncursor at the end of the input.\n\n```dart\nfinal _controller = TextEditingController();\n\nvoid initState() {\n _controller.addListener(() {\n final text = _controller.text.toLowerCase();\n _controller.value = _controller.value.copyWith(\n text: text,\n selection: TextSelection(baseOffset: text.length, extentOffset: text.length),\n composing: TextRange.empty,\n );\n });\n super.initState();\n}\n\nvoid dispose() {\n _controller.dispose();\n super.dispose();\n}\n\nWidget build(BuildContext context) {\n return Scaffold(\n body: Container(\n alignment: Alignment.center,\n padding: const EdgeInsets.all(6),\n child: TextFormField(\n controller: _controller,\n decoration: InputDecoration(border: OutlineInputBorder()),\n ),\n ),\n );\n}\n```\n\nSee also:\n\n * [TextField], which is a Material Design text field that can be controlled\n with a [TextEditingController].\n * [EditableText], which is a raw region of editable text that can be\n controlled with a [TextEditingController].",
"detail": "",
"kind": 7,
"label": "TextEditingController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "UnderlineTabIndicator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Used with [TabBar.indicator] to draw a horizontal line below the\nselected tab.\n\nThe selected tab underline is inset from the tab's boundary by [insets].\nThe [borderSide] defines the line's color and weight.\n\nThe [TabBar.indicatorSize] property can be used to define the indicator's\nbounds in terms of its (centered) widget with [TabIndicatorSize.label],\nor the entire tab with [TabIndicatorSize.tab].",
"detail": "",
"kind": 7,
"label": "UnderlineTabIndicator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureTapCancelCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for when the pointer that previously triggered a\n[GestureTapDownCallback] will not end up causing a tap.\n\nSee also:\n\n * [GestureDetector.onTapCancel], which matches this signature.\n * [TapGestureRecognizer], which uses this signature in one of its callbacks.",
"detail": "() → void",
"kind": 7,
"label": "GestureTapCancelCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "WidgetInspectorService",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Service used by GUI tools to interact with the [WidgetInspector].\n\nCalls to this object are typically made from GUI tools such as the [Flutter\nIntelliJ Plugin](https://github.com/flutter/flutter-intellij/blob/master/README.md)\nusing the [Dart VM Service protocol](https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md).\nThis class uses its own object id and manages object lifecycles itself\ninstead of depending on the [object ids](https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#getobject)\nspecified by the VM Service Protocol because the VM Service Protocol ids\nexpire unpredictably. Object references are tracked in groups so that tools\nthat clients can use dereference all objects in a group with a single\noperation making it easier to avoid memory leaks.\n\nAll methods in this class are appropriate to invoke from debugging tools\nusing the Observatory service protocol to evaluate Dart expressions of the\nform `WidgetInspectorService.instance.methodName(arg1, arg2, ...)`. If you\nmake changes to any instance method of this class you need to verify that\nthe [Flutter IntelliJ Plugin](https://github.com/flutter/flutter-intellij/blob/master/README.md)\nwidget inspector support still works with the changes.\n\nAll methods returning String values return JSON.",
"detail": "",
"kind": 7,
"label": "WidgetInspectorService"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PositionedDirectional",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that controls where a child of a [Stack] is positioned without\ncommitting to a specific [TextDirection].\n\nThe ambient [Directionality] is used to determine whether [start] is to the\nleft or to the right.\n\nA [PositionedDirectional] widget must be a descendant of a [Stack], and the\npath from the [PositionedDirectional] widget to its enclosing [Stack] must\ncontain only [StatelessWidget]s or [StatefulWidget]s (not other kinds of\nwidgets, like [RenderObjectWidget]s).\n\nIf a widget is wrapped in a [PositionedDirectional], then it is a\n_positioned_ widget in its [Stack]. If the [top] property is non-null, the\ntop edge of this child/ will be positioned [top] layout units from the top\nof the stack widget. The [start], [bottom], and [end] properties work\nanalogously.\n\nIf both the [top] and [bottom] properties are non-null, then the child will\nbe forced to have exactly the height required to satisfy both constraints.\nSimilarly, setting the [start] and [end] properties to non-null values will\nforce the child to have a particular width. Alternatively the [width] and\n[height] properties can be used to give the dimensions, with one\ncorresponding position property (e.g. [top] and [height]).\n\nSee also:\n\n * [Positioned], which specifies the widget's position visually.\n * [Positioned.directional], which also specifies the widget's horizontal\n position using [start] and [end] but has an explicit [TextDirection].",
"detail": "",
"kind": 7,
"label": "PositionedDirectional"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SemanticsDebugger",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that visualizes the semantics for the child.\n\nThis widget is useful for understand how an app presents itself to\naccessibility technology.",
"detail": "",
"kind": 7,
"label": "SemanticsDebugger"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SingleChildRenderObjectElement",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An [Element] that uses a [SingleChildRenderObjectWidget] as its configuration.\n\nThe child is optional.\n\nThis element subclass can be used for RenderObjectWidgets whose\nRenderObjects use the [RenderObjectWithChildMixin] mixin. Such widgets are\nexpected to inherit from [SingleChildRenderObjectWidget].",
"detail": "",
"kind": 7,
"label": "SingleChildRenderObjectElement"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MediaQueryData",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Information about a piece of media (e.g., a window).\n\nFor example, the [MediaQueryData.size] property contains the width and\nheight of the current window.\n\nTo obtain the current [MediaQueryData] for a given [BuildContext], use the\n[MediaQuery.of] function. For example, to obtain the size of the current\nwindow, use `MediaQuery.of(context).size`.\n\nIf no [MediaQuery] is in scope then the [MediaQuery.of] method will throw an\nexception, unless the `nullOk` argument is set to true, in which case it\nreturns null.\n\nMediaQueryData includes two [EdgeInsets] values:\n[padding] and [viewInsets]. These\nvalues reflect the configuration of the device and are used by\nmany top level widgets, like [SafeArea] and the Cupertino and\nMaterial scaffold widgets. The padding value defines areas that\nmight not be completely visible, like the display \"notch\" on the\niPhone X. The viewInsets value defines areas that aren't visible at\nall, typically because they're obscured by the device's keyboard.\n\nThe viewInsets and padding values are independent, they're both\nmeasured from the edges of the MediaQuery widget's bounds. The\nbounds of the top level MediaQuery created by [WidgetsApp] are the\nsame as the window that contains the app.\n\nWidgets whose layouts consume space defined by [viewInsets] or\n[padding] should enclose their children in secondary MediaQuery\nwidgets that reduce those properties by the same amount.\nThe [removePadding] and [removeInsets] methods are useful for this.",
"detail": "",
"kind": 7,
"label": "MediaQueryData"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ModalBarrier",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that prevents the user from interacting with widgets behind itself.\n\nThe modal barrier is the scrim that is rendered behind each route, which\ngenerally prevents the user from interacting with the route below the\ncurrent route, and normally partially obscures such routes.\n\nFor example, when a dialog is on the screen, the page below the dialog is\nusually darkened by the modal barrier.\n\nSee also:\n\n * [ModalRoute], which indirectly uses this widget.\n * [AnimatedModalBarrier], which is similar but takes an animated [color]\n instead of a single color value.",
"detail": "",
"kind": 7,
"label": "ModalBarrier"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InputChip",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design input chip.\n\nInput chips represent a complex piece of information, such as an entity\n(person, place, or thing) or conversational text, in a compact form.\n\nInput chips can be made selectable by setting [onSelected], deletable by\nsetting [onDeleted], and pressable like a button with [onPressed]. They have\na [label], and they can have a leading icon (see [avatar]) and a trailing\nicon ([deleteIcon]). Colors and padding can be customized.\n\nRequires one of its ancestors to be a [Material] widget.\n\nInput chips work together with other UI elements. They can appear:\n\n * In a [Wrap] widget.\n * In a horizontally scrollable list, like a [ListView] whose\n scrollDirection is [Axis.horizontal].\n\n\n```dart\nInputChip(\n avatar: CircleAvatar(\n backgroundColor: Colors.grey.shade800,\n child: Text('AB'),\n ),\n label: Text('Aaron Burr'),\n onPressed: () {\n print('I am the one thing in life.');\n }\n)\n```\n\nSee also:\n\n * [Chip], a chip that displays information and can be deleted.\n * [ChoiceChip], allows a single selection from a set of options. Choice\n chips contain related descriptive text or categories.\n * [FilterChip], uses tags or descriptive words as a way to filter content.\n * [ActionChip], represents an action related to primary content.\n * [CircleAvatar], which shows images or initials of people.\n * [Wrap], A widget that displays its children in multiple horizontal or\n vertical runs.\n * <https://material.io/design/components/chips.html>",
"detail": "",
"kind": 7,
"label": "InputChip"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DialogTheme",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines a theme for [Dialog] widgets.\n\nDescendant widgets obtain the current [DialogTheme] object using\n`DialogTheme.of(context)`. Instances of [DialogTheme] can be customized with\n[DialogTheme.copyWith].\n\nWhen Shape is `null`, the dialog defaults to a [RoundedRectangleBorder] with\na border radius of 2.0 on all corners.\n\n[titleTextStyle] and [contentTextStyle] are used in [AlertDialogs].\nIf null, they default to [ThemeData.textTheme.title] and [ThemeData.textTheme.subhead],\nrespectively.\n\nSee also:\n\n * [Dialog], a material dialog that can be customized using this [DialogTheme].\n * [ThemeData], which describes the overall theme information for the\n application.",
"detail": "",
"kind": 7,
"label": "DialogTheme"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DefaultTextStyleTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of a [DefaultTextStyle] that animates the different properties\nof its [TextStyle].\n\nSee also:\n\n * [DefaultTextStyle], which also defines a [TextStyle] for its descendants\n but is not animated.",
"detail": "",
"kind": 7,
"label": "DefaultTextStyleTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RenderNestedScrollViewViewport",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The [RenderViewport] variant used by [NestedScrollView].\n\nThis viewport takes a [SliverOverlapAbsorberHandle] and notifies it any time\nthe viewport needs to recompute its layout (e.g. when it is scrolled).",
"detail": "",
"kind": 7,
"label": "RenderNestedScrollViewViewport"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LeafRenderObjectWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A superclass for RenderObjectWidgets that configure RenderObject subclasses\nthat have no children.",
"detail": "",
"kind": 7,
"label": "LeafRenderObjectWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Dialog",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design dialog.\n\nThis dialog widget does not have any opinion about the contents of the\ndialog. Rather than using this widget directly, consider using [AlertDialog]\nor [SimpleDialog], which implement specific kinds of material design\ndialogs.\n\nSee also:\n\n * [AlertDialog], for dialogs that have a message and some buttons.\n * [SimpleDialog], for dialogs that offer a variety of options.\n * [showDialog], which actually displays the dialog and returns its result.\n * <https://material.io/design/components/dialogs.html>",
"detail": "",
"kind": 7,
"label": "Dialog"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MediaQuery",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Establishes a subtree in which media queries resolve to the given data.\n\nFor example, to learn the size of the current media (e.g., the window\ncontaining your app), you can read the [MediaQueryData.size] property from\nthe [MediaQueryData] returned by [MediaQuery.of]:\n`MediaQuery.of(context).size`.\n\nQuerying the current media using [MediaQuery.of] will cause your widget to\nrebuild automatically whenever the [MediaQueryData] changes (e.g., if the\nuser rotates their device).\n\nIf no [MediaQuery] is in scope then the [MediaQuery.of] method will throw an\nexception, unless the `nullOk` argument is set to true, in which case it\nreturns null.\n\nSee also:\n\n * [WidgetsApp] and [MaterialApp], which introduce a [MediaQuery] and keep\n it up to date with the current screen metrics as they change.\n * [MediaQueryData], the data structure that represents the metrics.",
"detail": "",
"kind": 7,
"label": "MediaQuery"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DropdownButton",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design button for selecting from a list of items.\n\nA dropdown button lets the user select from a number of items. The button\nshows the currently selected item as well as an arrow that opens a menu for\nselecting another item.\n\nThe type `T` is the type of the [value] that each dropdown item represents.\nAll the entries in a given menu must represent values with consistent types.\nTypically, an enum is used. Each [DropdownMenuItem] in [items] must be\nspecialized with that same type argument.\n\nThe [onChanged] callback should update a state variable that defines the\ndropdown's value. It should also call [State.setState] to rebuild the\ndropdown with the new value.\n\n\nThis sample shows a `DropdownButton` whose value is one of\n\"One\", \"Two\", \"Free\", or \"Four\".\n\n```dart\nString dropdownValue = 'One';\n```\n\n```dart\nWidget build(BuildContext context) {\n return Scaffold(\n body: Center(\n child: DropdownButton<String>(\n value: dropdownValue,\n onChanged: (String newValue) {\n setState(() {\n dropdownValue = newValue;\n });\n },\n items: <String>['One', 'Two', 'Free', 'Four']\n .map<DropdownMenuItem<String>>((String value) {\n return DropdownMenuItem<String>(\n value: value,\n child: Text(value),\n );\n })\n .toList(),\n ),\n ),\n );\n}\n```\n\nIf the [onChanged] callback is null or the list of [items] is null\nthen the dropdown button will be disabled, i.e. its arrow will be\ndisplayed in grey and it will not respond to input. A disabled button\nwill display the [disabledHint] widget if it is non-null.\n\nRequires one of its ancestors to be a [Material] widget.\n\nSee also:\n\n * [DropdownMenuItem], the class used to represent the [items].\n * [DropdownButtonHideUnderline], which prevents its descendant dropdown buttons\n from displaying their underlines.\n * [RaisedButton], [FlatButton], ordinary buttons that trigger a single action.\n * <https://material.io/design/components/menus.html#dropdown-menu>",
"detail": "",
"kind": 7,
"label": "DropdownButton"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextSelectionGestureDetector",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A gesture detector to respond to non-exclusive event chains for a text field.\n\nAn ordinary [GestureDetector] configured to handle events like tap and\ndouble tap will only recognize one or the other. This widget detects both:\nfirst the tap and then, if another tap down occurs within a time limit, the\ndouble tap.\n\nSee also:\n\n * [TextField], a Material text field which uses this gesture detector.\n * [CupertinoTextField], a Cupertino text field which uses this gesture\n detector.",
"detail": "",
"kind": 7,
"label": "TextSelectionGestureDetector"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextSelection",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A range of text that represents a selection.",
"detail": "",
"kind": 7,
"label": "TextSelection"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "VoidCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature of callbacks that have no arguments and return no data.",
"detail": "() → void",
"kind": 7,
"label": "VoidCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlexibleSpaceBarSettings",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Provides sizing and opacity information to a [FlexibleSpaceBar].\n\nSee also:\n\n * [FlexibleSpaceBar] which creates a flexible space bar.",
"detail": "",
"kind": 7,
"label": "FlexibleSpaceBarSettings"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LabeledGlobalKey",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A global key with a debugging label.\n\nThe debug label is useful for documentation and for debugging. The label\ndoes not affect the key's identity.",
"detail": "",
"kind": 7,
"label": "LabeledGlobalKey"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollPositionWithSingleContext",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A scroll position that manages scroll activities for a single\n[ScrollContext].\n\nThis class is a concrete subclass of [ScrollPosition] logic that handles a\nsingle [ScrollContext], such as a [Scrollable]. An instance of this class\nmanages [ScrollActivity] instances, which change what content is visible in\nthe [Scrollable]'s [Viewport].\n\nSee also:\n\n * [ScrollPosition], which defines the underlying model for a position\n within a [Scrollable] but is agnostic as to how that position is\n changed.\n * [ScrollView] and its subclasses such as [ListView], which use\n [ScrollPositionWithSingleContext] to manage their scroll position.\n * [ScrollController], which can manipulate one or more [ScrollPosition]s,\n and which uses [ScrollPositionWithSingleContext] as its default class for\n scroll positions.",
"detail": "",
"kind": 7,
"label": "ScrollPositionWithSingleContext"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SizeTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two sizes.\n\nThis class specializes the interpolation of [Tween<Size>] to use\n[Size.lerp].\n\nSee [Tween] for a discussion on how to use interpolation objects.",
"detail": "",
"kind": 7,
"label": "SizeTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GlowingOverscrollIndicator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A visual indication that a scroll view has overscrolled.\n\nA [GlowingOverscrollIndicator] listens for [ScrollNotification]s in order\nto control the overscroll indication. These notifications are typically\ngenerated by a [ScrollView], such as a [ListView] or a [GridView].\n\n[GlowingOverscrollIndicator] generates [OverscrollIndicatorNotification]\nbefore showing an overscroll indication. To prevent the indicator from\nshowing the indication, call [OverscrollIndicatorNotification.disallowGlow]\non the notification.\n\nCreated automatically by [ScrollBehavior.buildViewportChrome] on platforms\n(e.g., Android) that commonly use this type of overscroll indication.\n\nIn a [MaterialApp], the edge glow color is the [ThemeData.accentColor].",
"detail": "",
"kind": 7,
"label": "GlowingOverscrollIndicator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OverflowBox",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that imposes different constraints on its child than it gets\nfrom its parent, possibly allowing the child to overflow the parent.\n\nSee also:\n\n * [RenderConstrainedOverflowBox] for details about how [OverflowBox] is\n rendered.\n * [SizedOverflowBox], a widget that is a specific size but passes its\n original constraints through to its child, which may then overflow.\n * [ConstrainedBox], a widget that imposes additional constraints on its\n child.\n * [UnconstrainedBox], a container that tries to let its child draw without\n constraints.\n * [SizedBox], a box with a specified size.\n * The [catalog of layout widgets](https://flutter.dev/widgets/layout/).",
"detail": "",
"kind": 7,
"label": "OverflowBox"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Listenable",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An object that maintains a list of listeners.\n\nThe listeners are typically used to notify clients that the object has been\nupdated.\n\nThere are two variants of this interface:\n\n * [ValueListenable], an interface that augments the [Listenable] interface\n with the concept of a _current value_.\n\n * [Animation], an interface that augments the [ValueListenable] interface\n to add the concept of direction (forward or reverse).\n\nMany classes in the Flutter API use or implement these interfaces. The\nfollowing subclasses are especially relevant:\n\n * [ChangeNotifier], which can be subclassed or mixed in to create objects\n that implement the [Listenable] interface.\n\n * [ValueNotifier], which implements the [ValueListenable] interface with\n a mutable value that triggers the notifications when modified.\n\nThe terms \"notify clients\", \"send notifications\", \"trigger notifications\",\nand \"fire notifications\" are used interchangeably.\n\nSee also:\n\n * [AnimatedBuilder], a widget that uses a builder callback to rebuild\n whenever a given [Listenable] triggers its notifications. This widget is\n commonly used with [Animation] subclasses, wherein its name. It is a\n subclass of [AnimatedWidget], which can be used to create widgets that\n are driven from a [Listenable].\n * [ValueListenableBuilder], a widget that uses a builder callback to\n rebuild whenever a [ValueListenable] object triggers its notifications,\n providing the builder with the value of the object.\n * [InheritedNotifier], an abstract superclass for widgets that use a\n [Listenable]'s notifications to trigger rebuilds in descendant widgets\n that declare a dependency on them, using the [InheritedWidget] mechanism.\n * [new Listenable.merge], which creates a [Listenable] that triggers\n notifications whenever any of a list of other [Listenable]s trigger their\n notifications.",
"detail": "",
"kind": 7,
"label": "Listenable"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DragSelectionUpdateCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for when a pointer that's dragging to select text has moved again.\n\nThe first argument [startDetails] contains the details of the event that\ninitiated the dragging.\n\nThe second argument [updateDetails] contains the details of the current\npointer movement. It's the same as the one passed to [DragGestureRecognizer.onUpdate].\n\nThis signature is different from [GestureDragUpdateCallback] to make it\neasier for various text fields to use [TextSelectionGestureDetector] without\nhaving to store the start position.",
"detail": "(DragStartDetails startDetails, DragUpdateDetails updateDetails) → void",
"kind": 7,
"label": "DragSelectionUpdateCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverWithKeepAliveWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A base class for sliver that have [KeepAlive] children.",
"detail": "",
"kind": 7,
"label": "SliverWithKeepAliveWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverGridDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Controls the layout of tiles in a grid.\n\nGiven the current constraints on the grid, a [SliverGridDelegate] computes\nthe layout for the tiles in the grid. The tiles can be placed arbitrarily,\nbut it is more efficient to place tiles in roughly in order by scroll offset\nbecause grids reify a contiguous sequence of children.\n\nSee also:\n\n * [SliverGridDelegateWithFixedCrossAxisCount], which creates a layout with\n a fixed number of tiles in the cross axis.\n * [SliverGridDelegateWithMaxCrossAxisExtent], which creates a layout with\n tiles that have a maximum cross-axis extent.\n * [GridView], which uses this delegate to control the layout of its tiles.\n * [SliverGrid], which uses this delegate to control the layout of its\n tiles.\n * [RenderSliverGrid], which uses this delegate to control the layout of its\n tiles.",
"detail": "",
"kind": 7,
"label": "SliverGridDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LayoutChangedNotification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Indicates that the layout of one of the descendants of the object receiving\nthis notification has changed in some way, and that therefore any\nassumptions about that layout are no longer valid.\n\nUseful if, for instance, you're trying to align multiple descendants.\n\nTo listen for notifications in a subtree, use a\n[NotificationListener<LayoutChangedNotification>].\n\nTo send a notification, call [dispatch] on the notification you wish to\nsend. The notification will be delivered to any [NotificationListener]\nwidgets with the appropriate type parameters that are ancestors of the given\n[BuildContext].\n\nIn the widgets library, only the [SizeChangedLayoutNotifier] class and\n[Scrollable] classes dispatch this notification (specifically, they dispatch\n[SizeChangedLayoutNotification]s and [ScrollNotification]s respectively).\nTransitions, in particular, do not. Changing one's layout in one's build\nfunction does not cause this notification to be dispatched automatically. If\nan ancestor expects to be notified for any layout change, make sure you\neither only use widgets that never change layout, or that notify their\nancestors when appropriate, or alternatively, dispatch the notifications\nyourself when appropriate.\n\nAlso, since this notification is sent when the layout is changed, it is only\nuseful for paint effects that depend on the layout. If you were to use this\nnotification to change the build, for instance, you would always be one\nframe behind, which would look really ugly and laggy.",
"detail": "",
"kind": 7,
"label": "LayoutChangedNotification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StatusTransitionWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that rebuilds when the given animation changes status.",
"detail": "",
"kind": 7,
"label": "StatusTransitionWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Threshold",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A curve that is 0.0 until it hits the threshold, then it jumps to 1.0.\n",
"detail": "",
"kind": 7,
"label": "Threshold"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LayoutBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Builds a widget tree that can depend on the parent widget's size.\n\nSimilar to the [Builder] widget except that the framework calls the [builder]\nfunction at layout time and provides the parent widget's constraints. This\nis useful when the parent constrains the child's size and doesn't depend on\nthe child's intrinsic size. The [LayoutBuilder]'s final size will match its\nchild's size.\n\n\nIf the child should be smaller than the parent, consider wrapping the child\nin an [Align] widget. If the child might want to be bigger, consider\nwrapping it in a [SingleChildScrollView].\n\nSee also:\n\n * [Builder], which calls a `builder` function at build time.\n * [StatefulBuilder], which passes its `builder` function a `setState` callback.\n * [CustomSingleChildLayout], which positions its child during layout.",
"detail": "",
"kind": 7,
"label": "LayoutBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CustomScrollView",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [ScrollView] that creates custom scroll effects using slivers.\n\nA [CustomScrollView] lets you supply [slivers] directly to create various\nscrolling effects, such as lists, grids, and expanding headers. For example,\nto create a scroll view that contains an expanding app bar followed by a\nlist and a grid, use a list of three slivers: [SliverAppBar], [SliverList],\nand [SliverGrid].\n\n[Widget]s in these [slivers] must produce [RenderSliver] objects.\n\nTo control the initial scroll offset of the scroll view, provide a\n[controller] with its [ScrollController.initialScrollOffset] property set.\n\n\nThis sample code shows a scroll view that contains a flexible pinned app\nbar, a grid, and an infinite list.\n\n```dart\nCustomScrollView(\n slivers: <Widget>[\n const SliverAppBar(\n pinned: true,\n expandedHeight: 250.0,\n flexibleSpace: FlexibleSpaceBar(\n title: Text('Demo'),\n ),\n ),\n SliverGrid(\n gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(\n maxCrossAxisExtent: 200.0,\n mainAxisSpacing: 10.0,\n crossAxisSpacing: 10.0,\n childAspectRatio: 4.0,\n ),\n delegate: SliverChildBuilderDelegate(\n (BuildContext context, int index) {\n return Container(\n alignment: Alignment.center,\n color: Colors.teal[100 * (index % 9)],\n child: Text('grid item $index'),\n );\n },\n childCount: 20,\n ),\n ),\n SliverFixedExtentList(\n itemExtent: 50.0,\n delegate: SliverChildBuilderDelegate(\n (BuildContext context, int index) {\n return Container(\n alignment: Alignment.center,\n color: Colors.lightBlue[100 * (index % 9)],\n child: Text('list item $index'),\n );\n },\n ),\n ),\n ],\n)\n```\n\n## Accessibility\n\nA [CustomScrollView] can allow Talkback/VoiceOver to make announcements\nto the user when the scroll state changes. For example, on Android an\nannouncement might be read as \"showing items 1 to 10 of 23\". To produce\nthis announcement, the scroll view needs three pieces of information:\n\n * The first visible child index.\n * The total number of children.\n * The total number of visible children.\n\nThe last value can be computed exactly by the framework, however the first\ntwo must be provided. Most of the higher-level scrollable widgets provide\nthis information automatically. For example, [ListView] provides each child\nwidget with a semantic index automatically and sets the semantic child\ncount to the length of the list.\n\nTo determine visible indexes, the scroll view needs a way to associate the\ngenerated semantics of each scrollable item with a semantic index. This can\nbe done by wrapping the child widgets in an [IndexedSemantics].\n\nThis semantic index is not necessarily the same as the index of the widget in\nthe scrollable, because some widgets may not contribute semantic\ninformation. Consider a [new ListView.separated()]: every other widget is a\ndivider with no semantic information. In this case, only odd numbered\nwidgets have a semantic index (equal to the index ~/ 2). Furthermore, the\ntotal number of children in this example would be half the number of\nwidgets. (The [new ListView.separated()] constructor handles this\nautomatically; this is only used here as an example.)\n\nThe total number of visible children can be provided by the constructor\nparameter `semanticChildCount`. This should always be the same as the\nnumber of widgets wrapped in [IndexedSemantics].\n\nSee also:\n\n * [SliverList], which is a sliver that displays linear list of children.\n * [SliverFixedExtentList], which is a more efficient sliver that displays\n linear list of children that have the same extent along the scroll axis.\n * [SliverGrid], which is a sliver that displays a 2D array of children.\n * [SliverPadding], which is a sliver that adds blank space around another\n sliver.\n * [SliverAppBar], which is a sliver that displays a header that can expand\n and float as the scroll view scrolls.\n * [ScrollNotification] and [NotificationListener], which can be used to watch\n the scroll position without using a [ScrollController].\n * [IndexedSemantics], which allows annotating child lists with an index\n for scroll announcements.",
"detail": "",
"kind": 7,
"label": "CustomScrollView"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TableCellVerticalAlignment",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Vertical alignment options for cells in [RenderTable] objects.\n\nThis is specified using [TableCellParentData] objects on the\n[RenderObject.parentData] of the children of the [RenderTable].",
"detail": "",
"kind": 13,
"label": "TableCellVerticalAlignment"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Typography",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The color and geometry [TextThemes] for Material apps.\n\nThe text themes provided by the overall [Theme], like\n[ThemeData.textTheme], are based on the current locale's\n[MaterialLocalizations.scriptCategory] and are created\nby merging a color text theme, [black] or [white]\nand a geometry text theme, one of [englishLike], [dense],\nor [tall], depending on the locale.\n\nTo lookup a localized text theme use\n`Theme.of(context).textTheme` or\n`Theme.of(context).primaryTextTheme` or\n`Theme.of(context).accentTextTheme`.\n\nThe color text themes are [blackMountainView],\n[whiteMountainView], and [blackCupertino] and [whiteCupertino]. The\nMountain View theme [TextStyles] are based on the Roboto fonts and the\nCupertino themes are based on the San Francisco fonts.\n\nTwo sets of geometry themes are provided: 2014 and 2018. The 2014 themes\ncorrespond to the original version of the Material Design spec and are\nthe defaults. The 2018 themes correspond the second iteration of the\nspecification and feature different font sizes, font weights, and\nletter spacing values.\n\nBy default, [ThemeData.typography] is\n`Typography(platform: platform)` which uses [englishLike2014],\n[dense2014] and [tall2014]. To use the 2018 text theme\ngeometries, specify a typography value:\n\n```dart\nTypography(\n platorm: platform,\n englishLike: Typography.englishLike2018,\n dense: Typography.dense2018,\n tall: Typography.tall2018,\n)\n```\n\nSee also:\n\n * [ThemeData.typography], which can be used to configure the\n text themes used to create [ThemeData.textTheme],\n [ThemeData.primaryTextTheme], [ThemeData.accentTextTheme].\n * <https://material.io/design/typography/>",
"detail": "",
"kind": 7,
"label": "Typography"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PointerCancelEventListener",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for listening to [PointerCancelEvent] events.\n\nUsed by [Listener] and [RenderPointerListener].",
"detail": "(PointerCancelEvent event) → void",
"kind": 7,
"label": "PointerCancelEventListener"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlexibleSpaceBar",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The part of a material design [AppBar] that expands and collapses.\n\nMost commonly used in in the [SliverAppBar.flexibleSpace] field, a flexible\nspace bar expands and contracts as the app scrolls so that the [AppBar]\nreaches from the top of the app to the top of the scrolling contents of the\napp.\n\nThe widget that sizes the [AppBar] must wrap it in the widget returned by\n[FlexibleSpaceBar.createSettings], to convey sizing information down to the\n[FlexibleSpaceBar].\n\nSee also:\n\n * [SliverAppBar], which implements the expanding and contracting.\n * [AppBar], which is used by [SliverAppBar].\n * <https://material.io/design/components/app-bars-top.html#behavior>",
"detail": "",
"kind": 7,
"label": "FlexibleSpaceBar"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InputDecorator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines the appearance of a Material Design text field.\n\n[InputDecorator] displays the visual elements of a Material Design text\nfield around its input [child]. The visual elements themselves are defined\nby an [InputDecoration] object and their layout and appearance depend\non the `baseStyle`, `textAlign`, `isFocused`, and `isEmpty` parameters.\n\n[TextField] uses this widget to decorate its [EditableText] child.\n\n[InputDecorator] can be used to create widgets that look and behave like a\n[TextField] but support other kinds of input.\n\nRequires one of its ancestors to be a [Material] widget.\n\nSee also:\n\n * [TextField], which uses an [InputDecorator] to display a border,\n labels, and icons, around its [EditableText] child.\n * [Decoration] and [DecoratedBox], for drawing arbitrary decorations\n around other widgets.",
"detail": "",
"kind": 7,
"label": "InputDecorator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RawImage",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that displays a [dart:ui.Image] directly.\n\nThe image is painted using [paintImage], which describes the meanings of the\nvarious fields on this class in more detail.\n\nThis widget is rarely used directly. Instead, consider using [Image].",
"detail": "",
"kind": 7,
"label": "RawImage"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BottomAppBarTheme",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines default property values for descendant [BottomAppBar] widgets.\n\nDescendant widgets obtain the current [BottomAppBarTheme] object using\n`BottomAppBarTheme.of(context)`. Instances of [BottomAppBarTheme] can be\ncustomized with [BottomAppBarTheme.copyWith].\n\nTypically a [BottomAppBarTheme] is specified as part of the overall [Theme]\nwith [ThemeData.bottomAppBarTheme].\n\nAll [BottomAppBarTheme] properties are `null` by default. When null, the\n[BottomAppBar] constructor provides defaults.\n\nSee also:\n\n * [ThemeData], which describes the overall theme information for the\n application.",
"detail": "",
"kind": 7,
"label": "BottomAppBarTheme"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "HSVColor",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A color represented using [alpha], [hue], [saturation], and [value].\n\nAn [HSVColor] is represented in a parameter space that's based on human\nperception of color in pigments (e.g. paint and printer's ink). The\nrepresentation is useful for some color computations (e.g. rotating the hue\nthrough the colors), because interpolation and picking of\ncolors as red, green, and blue channels doesn't always produce intuitive\nresults.\n\nThe HSV color space models the way that different pigments are perceived\nwhen mixed. The hue describes which pigment is used, the saturation\ndescribes which shade of the pigment, and the value resembles mixing the\npigment with different amounts of black or white pigment.\n\nSee also:\n\n * [HSLColor], a color that uses a color space based on human perception of\n colored light.\n * [HSV and HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) Wikipedia\n article, which this implementation is based upon.",
"detail": "",
"kind": 7,
"label": "HSVColor"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CupertinoPageTransitionsBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Used by [PageTransitionsTheme] to define a horizontal [MaterialPageRoute]\npage transition animation that matches native iOS page transitions.\n\nSee also:\n\n * [FadeUpwardsPageTransitionsBuilder], which defines a default page transition.\n * [OpenUpwardsPageTransitionsBuilder], which defines a page transition\n that's similar to the one provided by Android P.",
"detail": "",
"kind": 7,
"label": "CupertinoPageTransitionsBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "VerticalDivider",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A one device pixel thick vertical line, with padding on either\nside.\n\nIn the material design language, this represents a divider.\n\nDividers can be used in lists, [Drawer]s, and elsewhere to separate content\nhorizontally. To create a one-pixel divider between items in a list,\nconsider using [ListTile.divideTiles], which is optimized for this case.\n\nThe box's total width is controlled by [width]. The appropriate\npadding is automatically computed from the width.\n\nSee also:\n\n * [PopupMenuDivider], which is the equivalent but for popup menus.\n * [ListTile.divideTiles], another approach to dividing widgets in a list.\n * <https://material.io/design/components/dividers.html>",
"detail": "",
"kind": 7,
"label": "VerticalDivider"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureForcePressStartCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature used by a [ForcePressGestureRecognizer] for when a pointer has\npressed with at least [ForcePressGestureRecognizer.startPressure].",
"detail": "(ForcePressDetails details) → void",
"kind": 7,
"label": "GestureForcePressStartCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CustomSingleChildLayout",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that defers the layout of its single child to a delegate.\n\nThe delegate can determine the layout constraints for the child and can\ndecide where to position the child. The delegate can also determine the size\nof the parent, but the size of the parent cannot depend on the size of the\nchild.\n\nSee also:\n\n * [SingleChildLayoutDelegate], which controls the layout of the child.\n * [Align], which sizes itself based on its child's size and positions\n the child according to an [Alignment] value.\n * [FractionallySizedBox], which sizes its child based on a fraction of its own\n size and positions the child according to an [Alignment] value.\n * [CustomMultiChildLayout], which uses a delegate to position multiple\n children.",
"detail": "",
"kind": 7,
"label": "CustomSingleChildLayout"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "KeepAliveNotification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Indicates that the subtree through which this notification bubbles must be\nkept alive even if it would normally be discarded as an optimization.\n\nFor example, a focused text field might fire this notification to indicate\nthat it should not be disposed even if the user scrolls the field off\nscreen.\n\nEach [KeepAliveNotification] is configured with a [handle] that consists of\na [Listenable] that is triggered when the subtree no longer needs to be kept\nalive.\n\nThe [handle] should be triggered any time the sending widget is removed from\nthe tree (in [State.deactivate]). If the widget is then rebuilt and still\nneeds to be kept alive, it should immediately send a new notification\n(possible with the very same [Listenable]) during build.\n\nThis notification is listened to by the [AutomaticKeepAlive] widget, which\nis added to the tree automatically by [SliverList] (and [ListView]) and\n[SliverGrid] (and [GridView]) widgets.\n\nFailure to trigger the [handle] in the manner described above will likely\ncause the [AutomaticKeepAlive] to lose track of whether the widget should be\nkept alive or not, leading to memory leaks or lost data. For example, if the\nwidget that requested keep-alive is removed from the subtree but doesn't\ntrigger its [Listenable] on the way out, then the subtree will continue to\nbe kept alive until the list itself is disposed. Similarly, if the\n[Listenable] is triggered while the widget needs to be kept alive, but a new\n[KeepAliveNotification] is not immediately sent, then the widget risks being\ngarbage collected while it wants to be kept alive.\n\nIt is an error to use the same [handle] in two [KeepAliveNotification]s\nwithin the same [AutomaticKeepAlive] without triggering that [handle] before\nthe second notification is sent.\n\nFor a more convenient way to interact with [AutomaticKeepAlive] widgets,\nconsider using [AutomaticKeepAliveClientMixin], which uses\n[KeepAliveNotification] internally.",
"detail": "",
"kind": 7,
"label": "KeepAliveNotification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FractionColumnWidth",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Sizes the column to a fraction of the table's constraints' maxWidth.\n\nThis is a cheap way to size a column.",
"detail": "",
"kind": 7,
"label": "FractionColumnWidth"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DiagnosticLevel",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The various priority levels used to filter which diagnostics are shown and\nomitted.\n\nTrees of Flutter diagnostics can be very large so filtering the diagnostics\nshown matters. Typically filtering to only show diagnostics with at least\nlevel [debug] is appropriate.",
"detail": "",
"kind": 13,
"label": "DiagnosticLevel"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ElementVisitor",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the callback to [BuildContext.visitChildElements].\n\nThe argument is the child being visited.\n\nIt is safe to call `element.visitChildElements` reentrantly within\nthis callback.",
"detail": "(Element element) → void",
"kind": 7,
"label": "ElementVisitor"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "NotificationListenerCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for [Notification] listeners.\n\nReturn true to cancel the notification bubbling. Return false to allow the\nnotification to continue to be dispatched to further ancestors.\n\nUsed by [NotificationListener.onNotification].",
"detail": "(T notification) → bool",
"kind": 7,
"label": "NotificationListenerCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ActionChip",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design action chip.\n\nAction chips are a set of options which trigger an action related to primary\ncontent. Action chips should appear dynamically and contextually in a UI.\n\nAction chips can be tapped to trigger an action or show progress and\nconfirmation. They cannot be disabled; if the action is not applicable, the\nchip should not be included in the interface. (This contrasts with buttons,\nwhere unavailable choices are usually represented as disabled controls.)\n\nAction chips are displayed after primary content, such as below a card or\npersistently at the bottom of a screen.\n\nThe material button widgets, [RaisedButton], [FlatButton], and\n[OutlineButton], are an alternative to action chips, which should appear\nstatically and consistently in a UI.\n\nRequires one of its ancestors to be a [Material] widget.\n\n\n```dart\nActionChip(\n avatar: CircleAvatar(\n backgroundColor: Colors.grey.shade800,\n child: Text('AB'),\n ),\n label: Text('Aaron Burr'),\n onPressed: () {\n print(\"If you stand for nothing, Burr, what’ll you fall for?\");\n }\n)\n```\n\nSee also:\n\n * [Chip], a chip that displays information and can be deleted.\n * [InputChip], a chip that represents a complex piece of information, such\n as an entity (person, place, or thing) or conversational text, in a\n compact form.\n * [ChoiceChip], allows a single selection from a set of options. Choice\n chips contain related descriptive text or categories.\n * [CircleAvatar], which shows images or initials of people.\n * [Wrap], A widget that displays its children in multiple horizontal or\n vertical runs.\n * <https://material.io/design/components/chips.html>",
"detail": "",
"kind": 7,
"label": "ActionChip"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "UserScrollNotification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A notification that the user has changed the direction in which they are\nscrolling.\n\nSee also:\n\n * [ScrollNotification], which describes the notification lifecycle.",
"detail": "",
"kind": 7,
"label": "UserScrollNotification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ExpansionTile",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A single-line [ListTile] with a trailing button that expands or collapses\nthe tile to reveal or hide the [children].\n\nThis widget is typically used with [ListView] to create an\n\"expand / collapse\" list entry. When used with scrolling widgets like\n[ListView], a unique [PageStorageKey] must be specified to enable the\n[ExpansionTile] to save and restore its expanded state when it is scrolled\nin and out of view.\n\nSee also:\n\n * [ListTile], useful for creating expansion tile [children] when the\n expansion tile represents a sublist.\n * The \"Expand/collapse\" section of\n <https://material.io/guidelines/components/lists-controls.html>.",
"detail": "",
"kind": 7,
"label": "ExpansionTile"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AlignmentGeometryTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two [AlignmentGeometry].\n\nThis class specializes the interpolation of [Tween<AlignmentGeometry>]\nto be appropriate for alignments.\n\nSee [Tween] for a discussion on how to use interpolation objects.\n\nSee also:\n\n * [AlignmentTween], which interpolates between two [Alignment] objects.",
"detail": "",
"kind": 7,
"label": "AlignmentGeometryTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Align",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that aligns its child within itself and optionally sizes itself\nbased on the child's size.\n\nFor example, to align a box at the bottom right, you would pass this box a\ntight constraint that is bigger than the child's natural size,\nwith an alignment of [Alignment.bottomRight].\n\n\nThis widget will be as big as possible if its dimensions are constrained and\n[widthFactor] and [heightFactor] are null. If a dimension is unconstrained\nand the corresponding size factor is null then the widget will match its\nchild's size in that dimension. If a size factor is non-null then the\ncorresponding dimension of this widget will be the product of the child's\ndimension and the size factor. For example if widthFactor is 2.0 then\nthe width of this widget will always be twice its child's width.\n\n## How it works\n\nThe [alignment] property describes a point in the `child`'s coordinate system\nand a different point in the coordinate system of this widget. The [Align]\nwidget positions the `child` such that both points are lined up on top of\neach other.\n\nThe [Align] widget in this example uses one of the defined constants from\n[Alignment], [topRight]. This places the [FlutterLogo] in the top right corner\nof the parent blue [Container].\n\n![A blue square container with the Flutter logo in the top right corner.](https://flutter.github.io/assets-for-api-docs/assets/widgets/align_constant.png)\n\n```dart\nCenter(\n child: Container(\n height: 120.0,\n width: 120.0,\n color: Colors.blue[50],\n child: Align(\n alignment: Alignment.topRight,\n child: FlutterLogo(\n size: 60,\n ),\n ),\n ),\n)\n```\n\nThe [Alignment] used in the following example defines a single point:\n\n * (0.2 * width of [FlutterLogo]/2 + width of [FlutterLogo]/2, 0.6 * height\n of [FlutterLogo]/2 + height of [FlutterLogo]/2) = (36.0, 48.0).\n\nThe [Alignment] class uses a coordinate system with an origin in the center\nof the [Container], as shown with the [Icon] above. [Align] will place the\n[FlutterLogo] at (36.0, 48.0) according to this coordinate system.\n\n![A blue square container with the Flutter logo positioned according to the\nAlignment specified above. A point is marked at the center of the container\nfor the origin of the Alignment coordinate system.](https://flutter.github.io/assets-for-api-docs/assets/widgets/align_alignment.png)\n\n```dart\nCenter(\n child: Container(\n height: 120.0,\n width: 120.0,\n color: Colors.blue[50],\n child: Align(\n alignment: Alignment(0.2, 0.6),\n child: FlutterLogo(\n size: 60,\n ),\n ),\n ),\n)\n```\n\nThe [FractionalOffset] used in the following example defines two points:\n\n * (0.2 * width of [FlutterLogo], 0.6 * height of [FlutterLogo]) = (12.0, 36.0)\n in the coordinate system of the blue container.\n * (0.2 * width of [Align], 0.6 * height of [Align]) = (24.0, 72.0) in the\n coordinate system of the [Align] widget.\n\nThe [Align] widget positions the [FlutterLogo] such that the two points are on\ntop of each other. In this example, the top left of the [FlutterLogo] will\nbe placed at (24.0, 72.0) - (12.0, 36.0) = (12.0, 36.0) from the top left of\nthe [Align] widget.\n\nThe [FractionalOffset] class uses a coordinate system with an origin in the top-left\ncorner of the [Container] in difference to the center-oriented system used in\nthe example above with [Alignment].\n\n![A blue square container with the Flutter logo positioned according to the\nFractionalOffset specified above. A point is marked at the top left corner\nof the container for the origin of the FractionalOffset coordinate system.](https://flutter.github.io/assets-for-api-docs/assets/widgets/align_fractional_offset.png)\n\n```dart\nCenter(\n child: Container(\n height: 120.0,\n width: 120.0,\n color: Colors.blue[50],\n child: Align(\n alignment: FractionalOffset(0.2, 0.6),\n child: FlutterLogo(\n size: 60,\n ),\n ),\n ),\n)\n```\n\nSee also:\n\n * [CustomSingleChildLayout], which uses a delegate to control the layout of\n a single child.\n * [Center], which is the same as [Align] but with the [alignment] always\n set to [Alignment.center].\n * [FractionallySizedBox], which sizes its child based on a fraction of its\n own size and positions the child according to an [Alignment] value.\n * The [catalog of layout widgets](https://flutter.dev/widgets/layout/).",
"detail": "",
"kind": 7,
"label": "Align"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "IndexedWidgetBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for a function that creates a widget for a given index, e.g., in a\nlist.\n\nUsed by [ListView.builder] and other APIs that use lazily-generated widgets.\n\nSee also:\n\n * [WidgetBuilder], which is similar but only takes a [BuildContext].\n * [TransitionBuilder], which is similar but also takes a child.",
"detail": "(BuildContext context, int index) → Widget",
"kind": 7,
"label": "IndexedWidgetBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextSelectionDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface for manipulating the selection, to be used by the implementor\nof the toolbar widget.",
"detail": "",
"kind": 7,
"label": "TextSelectionDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FormFieldValidator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for validating a form field.\n\nReturns an error string to display if the input is invalid, or null\notherwise.\n\nUsed by [FormField.validator].",
"detail": "(T value) → String",
"kind": 7,
"label": "FormFieldValidator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RotationTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animates the rotation of a widget.\n\nHere's an illustration of the [RotationTransition] widget, with it's [turns]\nanimated by a [CurvedAnimation] set to [Curves.elasticOut]:\nSee also:\n\n * [ScaleTransition], a widget that animates the scale of a transformed\n widget.\n * [SizeTransition], a widget that animates its own size and clips and\n aligns its child.",
"detail": "",
"kind": 7,
"label": "RotationTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StreamBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Widget that builds itself based on the latest snapshot of interaction with\na [Stream].\n\n\nWidget rebuilding is scheduled by each interaction, using [State.setState],\nbut is otherwise decoupled from the timing of the stream. The [builder]\nis called at the discretion of the Flutter pipeline, and will thus receive a\ntiming-dependent sub-sequence of the snapshots that represent the\ninteraction with the stream.\n\nAs an example, when interacting with a stream producing the integers\n0 through 9, the [builder] may be called with any ordered sub-sequence\nof the following snapshots that includes the last one (the one with\nConnectionState.done):\n\n* `new AsyncSnapshot<int>.withData(ConnectionState.waiting, null)`\n* `new AsyncSnapshot<int>.withData(ConnectionState.active, 0)`\n* `new AsyncSnapshot<int>.withData(ConnectionState.active, 1)`\n* ...\n* `new AsyncSnapshot<int>.withData(ConnectionState.active, 9)`\n* `new AsyncSnapshot<int>.withData(ConnectionState.done, 9)`\n\nThe actual sequence of invocations of the [builder] depends on the relative\ntiming of events produced by the stream and the build rate of the Flutter\npipeline.\n\nChanging the [StreamBuilder] configuration to another stream during event\ngeneration introduces snapshot pairs of the form:\n\n* `new AsyncSnapshot<int>.withData(ConnectionState.none, 5)`\n* `new AsyncSnapshot<int>.withData(ConnectionState.waiting, 5)`\n\nThe latter will be produced only when the new stream is non-null, and the\nformer only when the old stream is non-null.\n\nThe stream may produce errors, resulting in snapshots of the form:\n\n* `new AsyncSnapshot<int>.withError(ConnectionState.active, 'some error')`\n\nThe data and error fields of snapshots produced are only changed when the\nstate is `ConnectionState.active`.\n\nThe initial snapshot data can be controlled by specifying [initialData].\nThis should be used to ensure that the first frame has the expected value,\nas the builder will always be called before the stream listener has a chance\nto be processed.\n\n\nThis sample shows a [StreamBuilder] configuring a text label to show the\nlatest bid received for a lot in an auction. Assume the `_lot` field is\nset by a selector elsewhere in the UI.\n\n```dart\nStreamBuilder<int>(\n stream: _lot?.bids, // a Stream<int> or null\n builder: (BuildContext context, AsyncSnapshot<int> snapshot) {\n if (snapshot.hasError)\n return Text('Error: ${snapshot.error}');\n switch (snapshot.connectionState) {\n case ConnectionState.none: return Text('Select lot');\n case ConnectionState.waiting: return Text('Awaiting bids...');\n case ConnectionState.active: return Text('\\$${snapshot.data}');\n case ConnectionState.done: return Text('\\$${snapshot.data} (closed)');\n }\n return null; // unreachable\n },\n)\n```\n\nSee also:\n\n * [ValueListenableBuilder], which wraps a [ValueListenable] instead of a\n [Stream].\n * [StreamBuilderBase], which supports widget building based on a computation\n that spans all interactions made with the stream.",
"detail": "",
"kind": 7,
"label": "StreamBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AboutDialog",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An about box. This is a dialog box with the application's icon, name,\nversion number, and copyright, plus a button to show licenses for software\nused by the application.\n\nTo show an [AboutDialog], use [showAboutDialog].\n\nIf the application has a [Drawer], the [AboutListTile] widget can make the\nprocess of showing an about dialog simpler.\n\nThe [AboutDialog] shown by [showAboutDialog] includes a button that calls\n[showLicensePage].\n\nThe licenses shown on the [LicensePage] are those returned by the\n[LicenseRegistry] API, which can be used to add more licenses to the list.",
"detail": "",
"kind": 7,
"label": "AboutDialog"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RefreshIndicatorState",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Contains the state for a [RefreshIndicator]. This class can be used to\nprogrammatically show the refresh indicator, see the [show] method.",
"detail": "",
"kind": 7,
"label": "RefreshIndicatorState"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StackFit",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "How to size the non-positioned children of a [Stack].\n\nThis enum is used with [Stack.fit] and [RenderStack.fit] to control\nhow the [BoxConstraints] passed from the stack's parent to the stack's child\nare adjusted.\n\nSee also:\n\n * [Stack], the widget that uses this.\n * [RenderStack], the render object that implements the stack algorithm.",
"detail": "",
"kind": 13,
"label": "StackFit"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "UserAccountsDrawerHeader",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design [Drawer] header that identifies the app's user.\n\nRequires one of its ancestors to be a [Material] widget.\n\nSee also:\n\n * [DrawerHeader], for a drawer header that doesn't show user accounts.\n * <https://material.io/design/components/navigation-drawer.html#anatomy>",
"detail": "",
"kind": 7,
"label": "UserAccountsDrawerHeader"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ValueKey",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A key that uses a value of a particular type to identify itself.\n\nA [ValueKey<T>] is equal to another [ValueKey<T>] if, and only if, their\nvalues are [operator==].\n\nThis class can be subclassed to create value keys that will not be equal to\nother value keys that happen to use the same value. If the subclass is\nprivate, this results in a value key type that cannot collide with keys from\nother sources, which could be useful, for example, if the keys are being\nused as fallbacks in the same scope as keys supplied from another widget.\n\nSee also the discussion at [Widget.key].",
"detail": "",
"kind": 7,
"label": "ValueKey"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ForcePressDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Details object for callbacks that use [GestureForcePressStartCallback],\n[GestureForcePressPeakCallback], [GestureForcePressEndCallback] or\n[GestureForcePressUpdateCallback].\n\nSee also:\n\n * [ForcePressGestureRecognizer.onStart], [ForcePressGestureRecognizer.onPeak],\n [ForcePressGestureRecognizer.onEnd], and [ForcePressGestureRecognizer.onUpdate]\n which use [ForcePressDetails].\n * [ForcePressUpdateDetails], the details for [ForcePressUpdateCallback].",
"detail": "",
"kind": 7,
"label": "ForcePressDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AutomaticNotchedShape",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [NotchedShape] created from [ShapeBorder]s.\n\nTwo shapes can be provided. The [host] is the shape of the widget that\nuses the [NotchedShape] (typically a [BottomAppBar]). The [guest] is\nsubtracted from the [host] to create the notch (typically to make room\nfor a [FloatingActionButton]).",
"detail": "",
"kind": 7,
"label": "AutomaticNotchedShape"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialButtonWithIconMixin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The type of [MaterialButton]s created with [RaisedButton.icon], [FlatButton.icon],\nand [OutlineButton.icon].\n\nThis mixin only exists to give the \"label and icon\" button widgets a distinct\ntype for the sake of [ButtonTheme].",
"detail": "",
"kind": 7,
"label": "MaterialButtonWithIconMixin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ShaderMask",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that applies a mask generated by a [Shader] to its child.\n\nFor example, [ShaderMask] can be used to gradually fade out the edge\nof a child by using a [new ui.Gradient.linear] mask.\n\n\nThis example makes the text look like it is on fire:\n\n```dart\nShaderMask(\n shaderCallback: (Rect bounds) {\n return RadialGradient(\n center: Alignment.topLeft,\n radius: 1.0,\n colors: <Color>[Colors.yellow, Colors.deepOrange.shade900],\n tileMode: TileMode.mirror,\n ).createShader(bounds);\n },\n child: const Text('I’m burning the memories'),\n)\n```\n\nSee also:\n\n * [Opacity], which can apply a uniform alpha effect to its child.\n * [CustomPaint], which lets you draw directly on the canvas.\n * [DecoratedBox], for another approach at decorating child widgets.\n * [BackdropFilter], which applies an image filter to the background.",
"detail": "",
"kind": 7,
"label": "ShaderMask"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TabController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Coordinates tab selection between a [TabBar] and a [TabBarView].\n\nThe [index] property is the index of the selected tab and the [animation]\nrepresents the current scroll positions of the tab bar and the tar bar view.\nThe selected tab's index can be changed with [animateTo].\n\nA stateful widget that builds a [TabBar] or a [TabBarView] can create\na [TabController] and share it directly.\n\nWhen the [TabBar] and [TabBarView] don't have a convenient stateful\nancestor, a [TabController] can be shared by providing a\n[DefaultTabController] inherited widget.\n\n\nThis widget introduces a [Scaffold] with an [AppBar] and a [TabBar].\n\n```dart\nclass MyTabbedPage extends StatefulWidget {\n const MyTabbedPage({ Key key }) : super(key: key);\n @override\n _MyTabbedPageState createState() => _MyTabbedPageState();\n}\n\nclass _MyTabbedPageState extends State<MyTabbedPage> with SingleTickerProviderStateMixin {\n final List<Tab> myTabs = <Tab>[\n Tab(text: 'LEFT'),\n Tab(text: 'RIGHT'),\n ];\n\n TabController _tabController;\n\n @override\n void initState() {\n super.initState();\n _tabController = TabController(vsync: this, length: myTabs.length);\n }\n\n @override\n void dispose() {\n _tabController.dispose();\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n bottom: TabBar(\n controller: _tabController,\n tabs: myTabs,\n ),\n ),\n body: TabBarView(\n controller: _tabController,\n children: myTabs.map((Tab tab) {\n return Center(child: Text(tab.text));\n }).toList(),\n ),\n );\n }\n}\n```",
"detail": "",
"kind": 7,
"label": "TabController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationLazyListenerMixin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A mixin that helps listen to another object only when this object has registered listeners.\n\nThis mixin provides implementations of [didRegisterListener] and [didUnregisterListener],\nand therefore can be used in conjunction with mixins that require these methods,\n[AnimationLocalListenersMixin] and [AnimationLocalStatusListenersMixin].",
"detail": "",
"kind": 7,
"label": "AnimationLazyListenerMixin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextEditingValue",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The current text, selection, and composing state for editing a run of text.",
"detail": "",
"kind": 7,
"label": "TextEditingValue"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SelectionChangedCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the callback that reports when the user changes the selection\n(including the cursor location).",
"detail": "(TextSelection selection, SelectionChangedCause cause) → void",
"kind": 7,
"label": "SelectionChangedCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ListTileStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines the title font used for [ListTile] descendants of a [ListTileTheme].\n\nList tiles that appear in a [Drawer] use the theme's [TextTheme.body2]\ntext style, which is a little smaller than the theme's [TextTheme.subhead]\ntext style, which is used by default.",
"detail": "",
"kind": 13,
"label": "ListTileStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialAccentColor",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines a single accent color as well a swatch of four shades of the\naccent color.\n\nThe color's shades are referred to by index, the colors with smaller\nindices are lighter, larger indices are darker. There are four valid\nindices: 100, 200, 400, and 700. The value of this color should be the\nsame as the value of index 200 and [shade200].\n\nSee also:\n\n * [Colors], which defines all of the standard material colors.\n * <https://material.io/go/design-theming#color-color-schemes>",
"detail": "",
"kind": 7,
"label": "MaterialAccentColor"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlutterErrorDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Class for information provided to [FlutterExceptionHandler] callbacks.\n\nSee [FlutterError.onError].",
"detail": "",
"kind": 7,
"label": "FlutterErrorDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SingleChildScrollView",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A box in which a single widget can be scrolled.\n\nThis widget is useful when you have a single box that will normally be\nentirely visible, for example a clock face in a time picker, but you need to\nmake sure it can be scrolled if the container gets too small in one axis\n(the scroll direction).\n\nIt is also useful if you need to shrink-wrap in both axes (the main\nscrolling direction as well as the cross axis), as one might see in a dialog\nor pop-up menu. In that case, you might pair the [SingleChildScrollView]\nwith a [ListBody] child.\n\nWhen you have a list of children and do not require cross-axis\nshrink-wrapping behavior, for example a scrolling list that is always the\nwidth of the screen, consider [ListView], which is vastly more efficient\nthat a [SingleChildScrollView] containing a [ListBody] or [Column] with\nmany children.\n\n## Sample code: Using [SingleChildScrollView] with a [Column]\n\nSometimes a layout is designed around the flexible properties of a\n[Column], but there is the concern that in some cases, there might not\nbe enough room to see the entire contents. This could be because some\ndevices have unusually small screens, or because the application can\nbe used in landscape mode where the aspect ratio isn't what was\noriginally envisioned, or because the application is being shown in a\nsmall window in split-screen mode. In any case, as a result, it might\nmake sense to wrap the layout in a [SingleChildScrollView].\n\nSimply doing so, however, usually results in a conflict between the [Column],\nwhich typically tries to grow as big as it can, and the [SingleChildScrollView],\nwhich provides its children with an infinite amount of space.\n\nTo resolve this apparent conflict, there are a couple of techniques, as\ndiscussed below. These techniques should only be used when the content is\nnormally expected to fit on the screen, so that the lazy instantiation of\na sliver-based [ListView] or [CustomScrollView] is not expected to provide\nany performance benefit. If the viewport is expected to usually contain\ncontent beyond the dimensions of the screen, then [SingleChildScrollView]\nwould be very expensive.\n\n### Centering, spacing, or aligning fixed-height content\n\nIf the content has fixed (or intrinsic) dimensions but needs to be spaced out,\ncentered, or otherwise positioned using the [Flex] layout model of a [Column],\nthe following technique can be used to provide the [Column] with a minimum\ndimension while allowing it to shrink-wrap the contents when there isn't enough\nroom to apply these spacing or alignment needs.\n\nA [LayoutBuilder] is used to obtain the size of the viewport (implicitly via\nthe constraints that the [SingleChildScrollView] sees, since viewports\ntypically grow to fit their maximum height constraint). Then, inside the\nscroll view, a [ConstrainedBox] is used to set the minimum height of the\n[Column].\n\nThe [Column] has no [Expanded] children, so rather than take on the infinite\nheight from its [BoxConstraints.maxHeight], (the viewport provides no maximum height\nconstraint), it automatically tries to shrink to fit its children. It cannot\nbe smaller than its [BoxConstraints.minHeight], though, and It therefore\nbecomes the bigger of the minimum height provided by the\n[ConstrainedBox] and the sum of the heights of the children.\n\nIf the children aren't enough to fit that minimum size, the [Column] ends up\nwith some remaining space to allocate as specified by its\n[Column.mainAxisAlignment] argument.\n\nIn this example, the children are spaced out equally, unless there's no more\nroom, in which case they stack vertically and scroll.\n\nWhen using this technique, [Expanded] and [Flexible] are not useful, because\nin both cases the \"available space\" is infinite (since this is in a viewport).\nThe next section describes a technique for providing a maximum height constraint.\n\n```dart\nWidget build(BuildContext context) {\n return LayoutBuilder(\n builder: (BuildContext context, BoxConstraints viewportConstraints) {\n return SingleChildScrollView(\n child: ConstrainedBox(\n constraints: BoxConstraints(\n minHeight: viewportConstraints.maxHeight,\n ),\n child: Column(\n mainAxisSize: MainAxisSize.min,\n mainAxisAlignment: MainAxisAlignment.spaceAround,\n children: <Widget>[\n Container(\n // A fixed-height child.\n color: const Color(0xff808000), // Yellow\n height: 120.0,\n ),\n Container(\n // Another fixed-height child.\n color: const Color(0xff008000), // Green\n height: 120.0,\n ),\n ],\n ),\n ),\n );\n },\n );\n}\n```\n\n### Expanding content to fit the viewport\n\nThe following example builds on the previous one. In addition to providing a\nminimum dimension for the child [Column], an [IntrinsicHeight] widget is used\nto force the column to be exactly as big as its contents. This constraint\ncombines with the [ConstrainedBox] constraints discussed previously to ensure\nthat the column becomes either as big as viewport, or as big as the contents,\nwhichever is biggest.\n\nBoth constraints must be used to get the desired effect. If only the\n[IntrinsicHeight] was specified, then the column would not grow to fit the\nentire viewport when its children were smaller than the whole screen. If only\nthe size of the viewport was used, then the [Column] would overflow if the\nchildren were bigger than the viewport.\n\nThe widget that is to grow to fit the remaining space so provided is wrapped\nin an [Expanded] widget.\n\nThis technique is quite expensive, as it more or less requires that the contents\nof the viewport be laid out twice (once to find their intrinsic dimensions, and\nonce to actually lay them out). The number of widgets within the column should\ntherefore be kept small. Alternatively, subsets of the children that have known\ndimensions can be wrapped in a [SizedBox] that has tight vertical constraints,\nso that the intrinsic sizing algorithm can short-circuit the computation when it\nreaches those parts of the subtree.\n\nIn this example, the column becomes either as big as viewport, or as big as\nthe contents, whichever is biggest.\n\n```dart\nWidget build(BuildContext context) {\n return LayoutBuilder(\n builder: (BuildContext context, BoxConstraints viewportConstraints) {\n return SingleChildScrollView(\n child: ConstrainedBox(\n constraints: BoxConstraints(\n minHeight: viewportConstraints.maxHeight,\n ),\n child: IntrinsicHeight(\n child: Column(\n children: <Widget>[\n Container(\n // A fixed-height child.\n color: const Color(0xff808000), // Yellow\n height: 120.0,\n ),\n Expanded(\n // A flexible child that will grow to fit the viewport but\n // still be at least as big as necessary to fit its contents.\n child: Container(\n color: const Color(0xff800000), // Red\n height: 120.0,\n ),\n ),\n ],\n ),\n ),\n ),\n );\n },\n );\n}\n```\n\nSee also:\n\n * [ListView], which handles multiple children in a scrolling list.\n * [GridView], which handles multiple children in a scrolling grid.\n * [PageView], for a scrollable that works page by page.\n * [Scrollable], which handles arbitrary scrolling effects.",
"detail": "",
"kind": 7,
"label": "SingleChildScrollView"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MinColumnWidth",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Sizes the column such that it is the size that is the minimum of\ntwo column width specifications.\n\nFor example, to have a column be 10% of the container width but\nnever bigger than 100px, you could use:\n\n const MinColumnWidth(const FixedColumnWidth(100.0), FractionColumnWidth(0.1))\n\nBoth specifications are evaluated, so if either specification is\nexpensive, so is this.",
"detail": "",
"kind": 7,
"label": "MinColumnWidth"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StreamBuilderBase",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for widgets that build themselves based on interaction with\na specified [Stream].\n\nA [StreamBuilderBase] is stateful and maintains a summary of the interaction\nso far. The type of the summary and how it is updated with each interaction\nis defined by sub-classes.\n\nExamples of summaries include:\n\n* the running average of a stream of integers;\n* the current direction and speed based on a stream of geolocation data;\n* a graph displaying data points from a stream.\n\nIn general, the summary is the result of a fold computation over the data\nitems and errors received from the stream along with pseudo-events\nrepresenting termination or change of stream. The initial summary is\nspecified by sub-classes by overriding [initial]. The summary updates on\nreceipt of stream data and errors are specified by overriding [afterData] and\n[afterError], respectively. If needed, the summary may be updated on stream\ntermination by overriding [afterDone]. Finally, the summary may be updated\non change of stream by overriding [afterDisconnected] and [afterConnected].\n\n`T` is the type of stream events.\n\n`S` is the type of interaction summary.\n\nSee also:\n\n * [StreamBuilder], which is specialized for the case where only the most\n recent interaction is needed for widget building.",
"detail": "",
"kind": 7,
"label": "StreamBuilderBase"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureRecognizerFactoryConstructor",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for closures that implement [GestureRecognizerFactory.constructor].",
"detail": "() → T",
"kind": 7,
"label": "GestureRecognizerFactoryConstructor"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "NavigatorState",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The state for a [Navigator] widget.",
"detail": "",
"kind": 7,
"label": "NavigatorState"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Visibility",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Whether to show or hide a child.\n\nBy default, the [visible] property controls whether the [child] is included\nin the subtree or not; when it is not [visible], the [replacement] child\n(typically a zero-sized box) is included instead.\n\nA variety of flags can be used to tweak exactly how the child is hidden.\n(Changing the flags dynamically is discouraged, as it can cause the [child]\nsubtree to be rebuilt, with any state in the subtree being discarded.\nTypically, only the [visible] flag is changed dynamically.)\n\nThese widgets provide some of the facets of this one:\n\n * [Opacity], which can stop its child from being painted.\n * [Offstage], which can stop its child from being laid out or painted.\n * [TickerMode], which can stop its child from being animated.\n * [ExcludeSemantics], which can hide the child from accessibility tools.\n * [IgnorePointer], which can disable touch interactions with the child.\n\nUsing this widget is not necessary to hide children. The simplest way to\nhide a child is just to not include it, or, if a child _must_ be given (e.g.\nbecause the parent is a [StatelessWidget]) then to use [SizedBox.shrink]\ninstead of the child that would otherwise be included.\n\nSee also:\n\n * [AnimatedSwitcher], which can fade from one child to the next as the\n subtree changes.\n * [AnimatedCrossFade], which can fade between two specific children.",
"detail": "",
"kind": 7,
"label": "Visibility"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PaddleSliderValueIndicatorShape",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "This is the default shape of a [Slider]'s value indicator.\n\nSee also:\n\n * [Slider], which includes a value indicator defined by this shape.\n * [SliderTheme], which can be used to configure the slider value indicator\n of all sliders in a widget subtree.",
"detail": "",
"kind": 7,
"label": "PaddleSliderValueIndicatorShape"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PhysicalShape",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget representing a physical layer that clips its children to a path.\n\nPhysical layers cast shadows based on an [elevation] which is nominally in\nlogical pixels, coming vertically out of the rendering surface.\n\n[PhysicalModel] does the same but only supports shapes that can be expressed\nas rectangles with rounded corners.\n\nSee also:\n\n * [ShapeBorderClipper], which converts a [ShapeBorder] to a [CustomerClipper], as\n needed by this widget.",
"detail": "",
"kind": 7,
"label": "PhysicalShape"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialBasedCupertinoThemeData",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [CupertinoThemeData] that defers unspecified theme attributes to an\nupstream Material [ThemeData].\n\nThis type of [CupertinoThemeData] is used by the Material [Theme] to\nharmonize the [CupertinoTheme] with the material theme's colors and text\nstyles.\n\nIn the most basic case, [ThemeData]'s `cupertinoOverrideTheme` is null and\nand descendant Cupertino widgets' styling is derived from the Material theme.\n\nTo override individual parts of the Material-derived Cupertino styling,\n`cupertinoOverrideTheme`'s construction parameters can be used.\n\nTo completely decouple the Cupertino styling from Material theme derivation,\nanother [CupertinoTheme] widget can be inserted as a descendant of the\nMaterial [Theme]. On a [MaterialApp], this can be done using the `builder`\nparameter on the constructor.\n\nSee also:\n\n * [CupertinoThemeData], whose null constructor parameters default to\n reasonable iOS styling defaults rather than harmonizing with a Material\n theme.\n * [Theme], widget which inserts a [CupertinoTheme] with this\n [MaterialBasedCupertinoThemeData].",
"detail": "",
"kind": 7,
"label": "MaterialBasedCupertinoThemeData"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BuildOwner",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Manager class for the widgets framework.\n\nThis class tracks which widgets need rebuilding, and handles other tasks\nthat apply to widget trees as a whole, such as managing the inactive element\nlist for the tree and triggering the \"reassemble\" command when necessary\nduring hot reload when debugging.\n\nThe main build owner is typically owned by the [WidgetsBinding], and is\ndriven from the operating system along with the rest of the\nbuild/layout/paint pipeline.\n\nAdditional build owners can be built to manage off-screen widget trees.\n\nTo assign a build owner to a tree, use the\n[RootRenderObjectElement.assignOwner] method on the root element of the\nwidget tree.",
"detail": "",
"kind": 7,
"label": "BuildOwner"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliderTickMarkShape",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for slider tick mark shapes.\n\nCreate a subclass of this if you would like a custom slider tick mark shape.\nThis is a simplified version of [SliderComponentShape] with a\n[SliderThemeData] passed when getting the preferred size.\n\nThe tick mark painting can be skipped by specifying [noTickMark] for\n[SliderThemeData.tickMarkShape].\n\nSee also:\n\n * [RoundSliderTickMarkShape] for a simple example of a tick mark shape.\n * [SliderTrackShape] for the base class for custom a track shape.\n * [SliderComponentShape] for the base class for custom a component shape.",
"detail": "",
"kind": 7,
"label": "SliderTickMarkShape"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Overlay",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [Stack] of entries that can be managed independently.\n\nOverlays let independent child widgets \"float\" visual elements on top of\nother widgets by inserting them into the overlay's [Stack]. The overlay lets\neach of these widgets manage their participation in the overlay using\n[OverlayEntry] objects.\n\nAlthough you can create an [Overlay] directly, it's most common to use the\noverlay created by the [Navigator] in a [WidgetsApp] or a [MaterialApp]. The\nnavigator uses its overlay to manage the visual appearance of its routes.\n\nSee also:\n\n * [OverlayEntry].\n * [OverlayState].\n * [WidgetsApp].\n * [MaterialApp].",
"detail": "",
"kind": 7,
"label": "Overlay"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "IconThemeData",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines the color, opacity, and size of icons.\n\nUsed by [IconTheme] to control the color, opacity, and size of icons in a\nwidget subtree.\n\nTo obtain the current icon theme, use [IconTheme.of]. To convert an icon\ntheme to a version with all the fields filled in, use [new\nIconThemeData.fallback].",
"detail": "",
"kind": 7,
"label": "IconThemeData"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverMultiBoxAdaptorWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A base class for sliver that have multiple box children.\n\nHelps subclasses build their children lazily using a [SliverChildDelegate].",
"detail": "",
"kind": 7,
"label": "SliverMultiBoxAdaptorWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedAlign",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [Align] which automatically transitions the child's\nposition over a given duration whenever the given [alignment] changes.\n\nHere's an illustration of what this can look like, using a [curve] of\n[Curves.fastOutSlowIn].\n\nSee also:\n\n * [AnimatedContainer], which can transition more values at once.\n * [AnimatedPadding], which can animate the padding instead of the\n alignment.\n * [AnimatedPositioned], which, as a child of a [Stack], automatically\n transitions its child's position over a given duration whenever the given\n position changes.",
"detail": "",
"kind": 7,
"label": "AnimatedAlign"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureDragStartCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for when a pointer has contacted the screen and has begun to move.\n\nThe `details` object provides the position of the touch when it first\ntouched the surface.\n\nSee [DragGestureRecognizer.onStart].",
"detail": "(DragStartDetails details) → void",
"kind": 7,
"label": "GestureDragStartCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Border",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A border of a box, comprised of four sides: top, right, bottom, left.\n\nThe sides are represented by [BorderSide] objects.\n\n\nAll four borders the same, two-pixel wide solid white:\n\n```dart\nBorder.all(width: 2.0, color: const Color(0xFFFFFFFF))\n```\n\nThe border for a material design divider:\n\n```dart\nBorder(bottom: BorderSide(color: Theme.of(context).dividerColor))\n```\n\nA 1990s-era \"OK\" button:\n\n```dart\nContainer(\n decoration: const BoxDecoration(\n border: Border(\n top: BorderSide(width: 1.0, color: Color(0xFFFFFFFFFF)),\n left: BorderSide(width: 1.0, color: Color(0xFFFFFFFFFF)),\n right: BorderSide(width: 1.0, color: Color(0xFFFF000000)),\n bottom: BorderSide(width: 1.0, color: Color(0xFFFF000000)),\n ),\n ),\n child: Container(\n padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 2.0),\n decoration: const BoxDecoration(\n border: Border(\n top: BorderSide(width: 1.0, color: Color(0xFFFFDFDFDF)),\n left: BorderSide(width: 1.0, color: Color(0xFFFFDFDFDF)),\n right: BorderSide(width: 1.0, color: Color(0xFFFF7F7F7F)),\n bottom: BorderSide(width: 1.0, color: Color(0xFFFF7F7F7F)),\n ),\n color: Color(0xFFBFBFBF),\n ),\n child: const Text(\n 'OK',\n textAlign: TextAlign.center,\n style: TextStyle(color: Color(0xFF000000))\n ),\n ),\n)\n```\n\nSee also:\n\n * [BoxDecoration], which uses this class to describe its edge decoration.\n * [BorderSide], which is used to describe each side of the box.\n * [Theme], from the material layer, which can be queried to obtain appropriate colors\n to use for borders in a material app, as shown in the \"divider\" sample above.",
"detail": "",
"kind": 7,
"label": "Border"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ShapeBorderTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two [ShapeBorder]s.\n\nThis class specializes the interpolation of [Tween] to use [ShapeBorder.lerp].",
"detail": "",
"kind": 7,
"label": "ShapeBorderTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ElasticInOutCurve",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An oscillating curve that grows and then shrinks in magnitude while\novershooting its bounds.\n\nAn instance of this class using the default period of 0.4 is available as\n[Curves.elasticInOut].\n",
"detail": "",
"kind": 7,
"label": "ElasticInOutCurve"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BorderRadiusGeometry",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for [BorderRadius] that allows for text-direction aware resolution.\n\nA property or argument of this type accepts classes created either with [new\nBorderRadius.only] and its variants, or [new BorderRadiusDirectional.only]\nand its variants.\n\nTo convert a [BorderRadiusGeometry] object of indeterminate type into a\n[BorderRadius] object, call the [resolve] method.",
"detail": "",
"kind": 7,
"label": "BorderRadiusGeometry"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DragAnchor",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Where the [Draggable] should be anchored during a drag.",
"detail": "",
"kind": 13,
"label": "DragAnchor"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OneFrameImageStreamCompleter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Manages the loading of [dart:ui.Image] objects for static [ImageStream]s (those\nwith only one frame).",
"detail": "",
"kind": 7,
"label": "OneFrameImageStreamCompleter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A general-purpose widget for building animations.\n\nAnimatedBuilder is useful for more complex widgets that wish to include\nan animation as part of a larger build function. To use AnimatedBuilder,\nsimply construct the widget and pass it a builder function.\n\nFor simple cases without additional state, consider using\n[AnimatedWidget].\n\n\n## Performance optimizations\n\nIf your [builder] function contains a subtree that does not depend on the\nanimation, it's more efficient to build that subtree once instead of\nrebuilding it on every animation tick.\n\nIf you pass the pre-built subtree as the [child] parameter, the\nAnimatedBuilder will pass it back to your builder function so that you\ncan incorporate it into your build.\n\nUsing this pre-built child is entirely optional, but can improve\nperformance significantly in some cases and is therefore a good practice.\n\n\nThis code defines a widget called `Spinner` that spins a green square\ncontinually. It is built with an [AnimatedBuilder] and makes use of the\n[child] feature to avoid having to rebuild the [Container] each time.\n\n```dart\nclass Spinner extends StatefulWidget {\n @override\n _SpinnerState createState() => _SpinnerState();\n}\n\nclass _SpinnerState extends State<Spinner> with SingleTickerProviderStateMixin {\n AnimationController _controller;\n\n @override\n void initState() {\n super.initState();\n _controller = AnimationController(\n duration: const Duration(seconds: 10),\n vsync: this,\n )..repeat();\n }\n\n @override\n void dispose() {\n _controller.dispose();\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return AnimatedBuilder(\n animation: _controller,\n child: Container(width: 200.0, height: 200.0, color: Colors.green),\n builder: (BuildContext context, Widget child) {\n return Transform.rotate(\n angle: _controller.value * 2.0 * math.pi,\n child: child,\n );\n },\n );\n }\n}\n```",
"detail": "",
"kind": 7,
"label": "AnimatedBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "UnconstrainedBox",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that imposes no constraints on its child, allowing it to render\nat its \"natural\" size.\n\nThis allows a child to render at the size it would render if it were alone\non an infinite canvas with no constraints. This container will then attempt\nto adopt the same size, within the limits of its own constraints. If it ends\nup with a different size, it will align the child based on [alignment].\nIf the box cannot expand enough to accommodate the entire child, the\nchild will be clipped.\n\nIn debug mode, if the child overflows the container, a warning will be\nprinted on the console, and black and yellow striped areas will appear where\nthe overflow occurs.\n\nSee also:\n\n * [ConstrainedBox], for a box which imposes constraints on its child.\n * [Align], which loosens the constraints given to the child rather than\n removing them entirely.\n * [Container], a convenience widget that combines common painting,\n positioning, and sizing widgets.\n * [OverflowBox], a widget that imposes different constraints on its child\n than it gets from its parent, possibly allowing the child to overflow\n the parent.",
"detail": "",
"kind": 7,
"label": "UnconstrainedBox"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MultiChildRenderObjectWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A superclass for RenderObjectWidgets that configure RenderObject subclasses\nthat have a single list of children. (This superclass only provides the\nstorage for that child list, it doesn't actually provide the updating\nlogic.)",
"detail": "",
"kind": 7,
"label": "MultiChildRenderObjectWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AssetBundleImageProvider",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A subclass of [ImageProvider] that knows about [AssetBundle]s.\n\nThis factors out the common logic of [AssetBundle]-based [ImageProvider]\nclasses, simplifying what subclasses must implement to just [obtainKey].",
"detail": "",
"kind": 7,
"label": "AssetBundleImageProvider"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "WillPopCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for a callback that verifies that it's OK to call [Navigator.pop].\n\nUsed by [Form.onWillPop], [ModalRoute.addScopedWillPopCallback],\n[ModalRoute.removeScopedWillPopCallback], and [WillPopScope].",
"detail": "() → Future<bool>",
"kind": 7,
"label": "WillPopCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SizedOverflowBox",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that is a specific size but passes its original constraints\nthrough to its child, which may then overflow.\n\nSee also:\n\n * [OverflowBox], A widget that imposes different constraints on its child\n than it gets from its parent, possibly allowing the child to overflow the\n parent.\n * [ConstrainedBox], a widget that imposes additional constraints on its\n child.\n * [UnconstrainedBox], a container that tries to let its child draw without\n constraints.\n * The [catalog of layout widgets](https://flutter.dev/widgets/layout/).",
"detail": "",
"kind": 7,
"label": "SizedOverflowBox"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Switch",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design switch.\n\nUsed to toggle the on/off state of a single setting.\n\nThe switch itself does not maintain any state. Instead, when the state of\nthe switch changes, the widget calls the [onChanged] callback. Most widgets\nthat use a switch will listen for the [onChanged] callback and rebuild the\nswitch with a new [value] to update the visual appearance of the switch.\n\nIf the [onChanged] callback is null, then the switch will be disabled (it\nwill not respond to input). A disabled switch's thumb and track are rendered\nin shades of grey by default. The default appearance of a disabled switch\ncan be overridden with [inactiveThumbColor] and [inactiveTrackColor].\n\nRequires one of its ancestors to be a [Material] widget.\n\nSee also:\n\n * [SwitchListTile], which combines this widget with a [ListTile] so that\n you can give the switch a label.\n * [Checkbox], another widget with similar semantics.\n * [Radio], for selecting among a set of explicit values.\n * [Slider], for selecting a value in a range.\n * <https://material.io/design/components/selection-controls.html#switches>",
"detail": "",
"kind": 7,
"label": "Switch"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FormFieldState",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The current state of a [FormField]. Passed to the [FormFieldBuilder] method\nfor use in constructing the form field's widget.",
"detail": "",
"kind": 7,
"label": "FormFieldState"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BackdropFilter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that applies a filter to the existing painted content and then\npaints [child].\n\nThe filter will be applied to all the area within its parent or ancestor\nwidget's clip. If there's no clip, the filter will be applied to the full\nscreen.\n\n\nIf the [BackdropFilter] needs to be applied to an area that exactly matches\nits child, wraps the [BackdropFilter] with a clip widget that clips exactly\nto that child.\n\n```dart\nStack(\n fit: StackFit.expand,\n children: <Widget>[\n Text('0' * 10000),\n Center(\n child: ClipRect( // <-- clips to the 200x200 [Container] below\n child: BackdropFilter(\n filter: ui.ImageFilter.blur(\n sigmaX: 5.0,\n sigmaY: 5.0,\n ),\n child: Container(\n alignment: Alignment.center,\n width: 200.0,\n height: 200.0,\n child: Text('Hello World'),\n ),\n ),\n ),\n ),\n ],\n)\n```\n\nThis effect is relatively expensive, especially if the filter is non-local,\nsuch as a blur.\n\nSee also:\n\n * [DecoratedBox], which draws a background under (or over) a widget.\n * [Opacity], which changes the opacity of the widget itself.",
"detail": "",
"kind": 7,
"label": "BackdropFilter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MultiChildLayoutDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A delegate that controls the layout of multiple children.\n\nDelegates must be idempotent. Specifically, if two delegates are equal, then\nthey must produce the same layout. To change the layout, replace the\ndelegate with a different instance whose [shouldRelayout] returns true when\ngiven the previous instance.\n\nOverride [getSize] to control the overall size of the layout. The size of\nthe layout cannot depend on layout properties of the children.\n\nOverride [performLayout] to size and position the children. An\nimplementation of [performLayout] must call [layoutChild] exactly once for\neach child, but it may call [layoutChild] on children in an arbitrary order.\nTypically a delegate will use the size returned from [layoutChild] on one\nchild to determine the constraints for [performLayout] on another child or\nto determine the offset for [positionChild] for that child or another child.\n\nOverride [shouldRelayout] to determine when the layout of the children needs\nto be recomputed when the delegate changes.\n\nUsed with [CustomMultiChildLayout], the widget for the\n[RenderCustomMultiChildLayoutBox] render object.\n\nEach child must be wrapped in a [LayoutId] widget to assign the id that\nidentifies it to the delegate. The [LayoutId.id] needs to be unique among\nthe children that the [CustomMultiChildLayout] manages.\n\n\nBelow is an example implementation of [performLayout] that causes one widget\n(the follower) to be the same size as another (the leader):\n\n```dart\n// Define your own slot numbers, depending upon the id assigned by LayoutId.\n// Typical usage is to define an enum like the one below, and use those\n// values as the ids.\nenum _Slot {\n leader,\n follower,\n}\n\nclass FollowTheLeader extends MultiChildLayoutDelegate {\n @override\n void performLayout(Size size) {\n Size leaderSize = Size.zero;\n\n if (hasChild(_Slot.leader)) {\n leaderSize = layoutChild(_Slot.leader, BoxConstraints.loose(size));\n positionChild(_Slot.leader, Offset.zero);\n }\n\n if (hasChild(_Slot.follower)) {\n layoutChild(_Slot.follower, BoxConstraints.tight(leaderSize));\n positionChild(_Slot.follower, Offset(size.width - leaderSize.width,\n size.height - leaderSize.height));\n }\n }\n\n @override\n bool shouldRelayout(MultiChildLayoutDelegate oldDelegate) => false;\n}\n```\n\nThe delegate gives the leader widget loose constraints, which means the\nchild determines what size to be (subject to fitting within the given size).\nThe delegate then remembers the size of that child and places it in the\nupper left corner.\n\nThe delegate then gives the follower widget tight constraints, forcing it to\nmatch the size of the leader widget. The delegate then places the follower\nwidget in the bottom right corner.\n\nThe leader and follower widget will paint in the order they appear in the\nchild list, regardless of the order in which [layoutChild] is called on\nthem.",
"detail": "",
"kind": 7,
"label": "MultiChildLayoutDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollNotification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [Notification] related to scrolling.\n\n[Scrollable] widgets notify their ancestors about scrolling-related changes.\nThe notifications have the following lifecycle:\n\n * A [ScrollStartNotification], which indicates that the widget has started\n scrolling.\n * Zero or more [ScrollUpdateNotification]s, which indicate that the widget\n has changed its scroll position, mixed with zero or more\n [OverscrollNotification]s, which indicate that the widget has not changed\n its scroll position because the change would have caused its scroll\n position to go outside its scroll bounds.\n * Interspersed with the [ScrollUpdateNotification]s and\n [OverscrollNotification]s are zero or more [UserScrollNotification]s,\n which indicate that the user has changed the direction in which they are\n scrolling.\n * A [ScrollEndNotification], which indicates that the widget has stopped\n scrolling.\n * A [UserScrollNotification], with a [UserScrollNotification.direction] of\n [ScrollDirection.idle].\n\nNotifications bubble up through the tree, which means a given\n[NotificationListener] will receive notifications for all descendant\n[Scrollable] widgets. To focus on notifications from the nearest\n[Scrollable] descendant, check that the [depth] property of the notification\nis zero.\n\nWhen a scroll notification is received by a [NotificationListener], the\nlistener will have already completed build and layout, and it is therefore\ntoo late for that widget to call [State.setState]. Any attempt to adjust the\nbuild or layout based on a scroll notification would result in a layout that\nlagged one frame behind, which is a poor user experience. Scroll\nnotifications are therefore primarily useful for paint effects (since paint\nhappens after layout). The [GlowingOverscrollIndicator] and [Scrollbar]\nwidgets are examples of paint effects that use scroll notifications.\n\nTo drive layout based on the scroll position, consider listening to the\n[ScrollPosition] directly (or indirectly via a [ScrollController]).",
"detail": "",
"kind": 7,
"label": "ScrollNotification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AndroidView",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Embeds an Android view in the Widget hierarchy.\n\nRequires Android API level 20 or greater.\n\nEmbedding Android views is an expensive operation and should be avoided when a Flutter\nequivalent is possible.\n\nThe embedded Android view is painted just like any other Flutter widget and transformations\napply to it as well.\n\nThe widget fills all available space, the parent of this object must provide bounded layout\nconstraints.\n\nThe widget participates in Flutter's [GestureArena]s, and dispatches touch events to the\nplatform view iff it won the arena. Specific gestures that should be dispatched to the platform\nview can be specified in the `gestureRecognizers` constructor parameter. If\nthe set of gesture recognizers is empty, a gesture will be dispatched to the platform\nview iff it was not claimed by any other gesture recognizer.\n\nThe Android view object is created using a [PlatformViewFactory](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html).\nPlugins can register platform view factories with [PlatformViewRegistry#registerViewFactory](/javadoc/io/flutter/plugin/platform/PlatformViewRegistry.html#registerViewFactory-java.lang.String-io.flutter.plugin.platform.PlatformViewFactory-).\n\nRegistration is typically done in the plugin's registerWith method, e.g:\n\n```java\n public static void registerWith(Registrar registrar) {\n registrar.platformViewRegistry().registerViewFactory(\"webview\", WebViewFactory(registrar.messenger()));\n }\n```\n\nThe platform view's lifetime is the same as the lifetime of the [State] object for this widget.\nWhen the [State] is disposed the platform view (and auxiliary resources) are lazily\nreleased (some resources are immediately released and some by platform garbage collector).\nA stateful widget's state is disposed when the widget is removed from the tree or when it is\nmoved within the tree. If the stateful widget has a key and it's only moved relative to its siblings,\nor it has a [GlobalKey] and it's moved within the tree, it will not be disposed.",
"detail": "",
"kind": 7,
"label": "AndroidView"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverGrid",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sliver that places multiple box children in a two dimensional arrangement.\n\n[SliverGrid] places its children in arbitrary positions determined by\n[gridDelegate]. Each child is forced to have the size specified by the\n[gridDelegate].\n\nThe main axis direction of a grid is the direction in which it scrolls; the\ncross axis direction is the orthogonal direction.\n\n\n\nThis example, which would be inserted into a [CustomScrollView.slivers]\nlist, shows twenty boxes in a pretty teal grid:\n\n```dart\nSliverGrid(\n gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(\n maxCrossAxisExtent: 200.0,\n mainAxisSpacing: 10.0,\n crossAxisSpacing: 10.0,\n childAspectRatio: 4.0,\n ),\n delegate: SliverChildBuilderDelegate(\n (BuildContext context, int index) {\n return Container(\n alignment: Alignment.center,\n color: Colors.teal[100 * (index % 9)],\n child: Text('grid item $index'),\n );\n },\n childCount: 20,\n ),\n)\n```\n\n\nSee also:\n\n * [SliverList], which places its children in a linear array.\n * [SliverFixedExtentList], which places its children in a linear\n array with a fixed extent in the main axis.\n * [SliverPrototypeExtentList], which is similar to [SliverFixedExtentList]\n except that it uses a prototype list item instead of a pixel value to define\n the main axis extent of each item.",
"detail": "",
"kind": 7,
"label": "SliverGrid"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "EdgeInsetsGeometry",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for [EdgeInsets] that allows for text-direction aware\nresolution.\n\nA property or argument of this type accepts classes created either with [new\nEdgeInsets.fromLTRB] and its variants, or [new\nEdgeInsetsDirectional.fromSTEB] and its variants.\n\nTo convert an [EdgeInsetsGeometry] object of indeterminate type into a\n[EdgeInsets] object, call the [resolve] method.\n\nSee also:\n\n * [Padding], a widget that describes margins using [EdgeInsetsGeometry].",
"detail": "",
"kind": 7,
"label": "EdgeInsetsGeometry"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AssetBundleImageKey",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Key for the image obtained by an [AssetImage] or [ExactAssetImage].\n\nThis is used to identify the precise resource in the [imageCache].",
"detail": "",
"kind": 7,
"label": "AssetBundleImageKey"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MainAxisAlignment",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "How the children should be placed along the main axis in a flex layout.\n\nSee also:\n\n * [Column], [Row], and [Flex], the flex widgets.\n * [RenderFlex], the flex render object.",
"detail": "",
"kind": 13,
"label": "MainAxisAlignment"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LayerLink",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An object that a [LeaderLayer] can register with.\n\nAn instance of this class should be provided as the [LeaderLayer.link] and\nthe [FollowerLayer.link] properties to cause the [FollowerLayer] to follow\nthe [LeaderLayer].\n\nSee also:\n\n * [CompositedTransformTarget], the widget that creates a [LeaderLayer].\n * [CompositedTransformFollower], the widget that creates a [FollowerLayer].\n * [RenderLeaderLayer] and [RenderFollowerLayer], the corresponding\n render objects.",
"detail": "",
"kind": 7,
"label": "LayerLink"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FadeInImage",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An image that shows a [placeholder] image while the target [image] is\nloading, then fades in the new image when it loads.\n\nUse this class to display long-loading images, such as [new NetworkImage],\nso that the image appears on screen with a graceful animation rather than\nabruptly pops onto the screen.\n\n\nIf the [image] emits an [ImageInfo] synchronously, such as when the image\nhas been loaded and cached, the [image] is displayed immediately and the\n[placeholder] is never displayed.\n\n[fadeOutDuration] and [fadeOutCurve] control the fade-out animation of the\nplaceholder.\n\n[fadeInDuration] and [fadeInCurve] control the fade-in animation of the\ntarget [image].\n\nPrefer a [placeholder] that's already cached so that it is displayed in one\nframe. This prevents it from popping onto the screen.\n\nWhen [image] changes it is resolved to a new [ImageStream]. If the new\n[ImageStream.key] is different this widget subscribes to the new stream and\nreplaces the displayed image with images emitted by the new stream.\n\nWhen [placeholder] changes and the [image] has not yet emitted an\n[ImageInfo], then [placeholder] is resolved to a new [ImageStream]. If the\nnew [ImageStream.key] is different this widget subscribes to the new stream\nand replaces the displayed image to images emitted by the new stream.\n\nWhen either [placeholder] or [image] changes, this widget continues showing\nthe previously loaded image (if any) until the new image provider provides a\ndifferent image. This is known as \"gapless playback\" (see also\n[Image.gaplessPlayback]).\n\n\n```dart\nFadeInImage(\n // here `bytes` is a Uint8List containing the bytes for the in-memory image\n placeholder: MemoryImage(bytes),\n image: NetworkImage('https://backend.example.com/image.png'),\n)\n```",
"detail": "",
"kind": 7,
"label": "FadeInImage"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "HeroController",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [Navigator] observer that manages [Hero] transitions.\n\nAn instance of [HeroController] should be used in [Navigator.observers].\nThis is done automatically by [MaterialApp].",
"detail": "",
"kind": 7,
"label": "HeroController"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InheritedModelElement",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An [Element] that uses a [InheritedModel] as its configuration.",
"detail": "",
"kind": 7,
"label": "InheritedModelElement"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PageMetrics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Metrics for a [PageView].\n\nThe metrics are available on [ScrollNotification]s generated from\n[PageView]s.",
"detail": "",
"kind": 7,
"label": "PageMetrics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Locale",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An identifier used to select a user's language and formatting preferences.\n\nThis represents a [Unicode Language\nIdentifier](https://www.unicode.org/reports/tr35/#Unicode_language_identifier)\n(i.e. without Locale extensions), except variants are not supported.\n\nLocales are canonicalized according to the \"preferred value\" entries in the\n[IANA Language Subtag\nRegistry](https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry).\nFor example, `const Locale('he')` and `const Locale('iw')` are equal and\nboth have the [languageCode] `he`, because `iw` is a deprecated language\nsubtag that was replaced by the subtag `he`.\n\nSee also:\n\n * [Window.locale], which specifies the system's currently selected\n [Locale].",
"detail": "",
"kind": 7,
"label": "Locale"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StrutStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines the strut, which sets the minimum height a line can be\nrelative to the baseline. Strut applies to all lines in the paragraph.\n\nStrut is a feature that allows minimum line heights to be set. The effect is as\nif a zero width space was included at the beginning of each line in the\nparagraph. This imaginary space is 'shaped' according the properties defined\nin this class. Flutter's strut is based on [typesetting strut](https://en.wikipedia.org/wiki/Strut_(typesetting))\nand CSS's [line-height](https://www.w3.org/TR/CSS2/visudet.html#line-height).\n\nNo lines may be shorter than the strut. The ascent and descent of the strut\nare calculated, and any laid out text that has a shorter ascent or descent than\nthe strut's ascent or descent will take the ascent and descent of the strut.\nText with ascents or descents larger than the strut's ascent or descent will lay\nout as normal and extend past the strut.\n\nStrut is defined independently from any text content or [TextStyle]s.\n\nThe vertical components of strut are as follows:\n\n * `leading * fontSize / 2` or half the font leading if `leading` is undefined (half leading)\n * `ascent * height`\n * `descent * height`\n * `leading * fontSize / 2` or half the font leading if `leading` is undefined (half leading)\n\nThe sum of these four values is the total height of the line.\n\nThe `ascent + descent` is equivalent to the [fontSize]. Ascent is the font's\nspacing above the baseline without leading and descent is the spacing below the\nbaseline without leading. Leading is split evenly between the top and bottom.\nThe values for `ascent` and `descent` are provided by the font named by\n[fontFamily]. If no [fontFamily] or [fontFamilyFallback] is provided, then the\nplatform's default family will be used.\n\nEach line's spacing above the baseline will be at least as tall as the half\nleading plus ascent. Each line's spacing below the baseline will be at least as\ntall as the half leading plus descent.\n\nSee also:\n\n * [StrutStyle](https://api.flutter.dev/flutter/dart-ui/StrutStyle-class.html), the class in the [dart:ui] library.\n\n### Fields and their default values.\n\nOmitted or null properties will take the default values specified below:\n\n * [fontFamily]: the name of the font to use when calculating the strut\n (e.g., Roboto). No glyphs from the font will be drawn and the font will\n be used purely for metrics.\n\n * [fontFamilyFallback]: an ordered list of font family names that will be searched for when\n the font in [fontFamily] cannot be found. When all specified font families have been\n exhausted an no match was found, the default platform font will be used.\n\n * [fontSize]: the size of the ascent plus descent in logical pixels. This\n is also used as the basis of the custom leading calculation. This value\n cannot be negative.\n Default is 14 logical pixels.\n\n * [height]: the multiple of [fontSize] to multiply the ascent and descent by.\n The [height] will impact the spacing above and below the baseline differently\n depending on the ratios between the font's ascent and descent. This property is\n separate from the leading multiplier, which is controlled through [leading].\n Default is 1.0.\n\n * [leading]: the custom leading to apply to the strut as a multiple of [fontSize].\n Leading is additional spacing between lines. Half of the leading is added\n to the top and the other half to the bottom of the line height. This differs\n from [height] since the spacing is equally distributed above and below the\n baseline.\n Default is `null`, which will use the font-specified leading.\n\n * [fontWeight]: the typeface thickness to use when calculating the strut (e.g., bold).\n Default is [FontWeight.w400].\n\n * [fontStyle]: the typeface variant to use when calculating the strut (e.g., italic).\n Default is [FontStyle.normal].\n\n * [forceStrutHeight]: when true, all lines will be laid out with the height of the\n strut. All line and run-specific metrics will be ignored/overridden and only strut\n metrics will be used instead. This property guarantees uniform line spacing, however\n text in adjacent lines may overlap. This property should be enabled with caution as\n it bypasses a large portion of the vertical layout system.\n The default value is false.\n\n### Examples\n\nIn this simple case, the text will be rendered at font size 10, however, the vertical\nheight of each line will be the strut height (Roboto in font size 30 * 1.5) as the text\nitself is shorter than the strut.\n\n```dart\nconst Text(\n 'Hello, world!\\nSecond line!',\n style: TextStyle(\n fontSize: 10,\n fontFamily: 'Raleway',\n ),\n strutStyle: StrutStyle(\n fontFamily: 'Roboto',\n fontSize: 30,\n height: 1.5,\n ),\n),\n```\n\nHere, strut is used to absorb the additional line height in the second line.\nThe strut [height] was defined as 1.5 (the default font size is 14), which\ncaused all lines to be laid out taller than without strut. This extra space\nwas able to accommodate the larger font size of `Second line!` without\ncausing the line height to change for the second line only. All lines in\nthis example are thus the same height (`14 * 1.5`).\n\n```dart\nconst Text.rich(\n TextSpan(\n text: 'First line!\\n',\n style: TextStyle(\n fontSize: 14,\n fontFamily: 'Roboto'\n ),\n children: <TextSpan>[\n TextSpan(\n text: 'Second line!\\n',\n style: TextStyle(\n fontSize: 16,\n fontFamily: 'Roboto',\n ),\n ),\n TextSpan(\n text: 'Third line!\\n',\n style: TextStyle(\n fontSize: 14,\n fontFamily: 'Roboto',\n ),\n ),\n ],\n ),\n strutStyle: StrutStyle(\n fontFamily: 'Roboto',\n height: 1.5,\n ),\n),\n```\n\nHere, strut is used to enable strange and overlapping text to achieve unique\neffects. The `M`s in lines 2 and 3 are able to extend above their lines and\nfill empty space in lines above. The [forceStrutHeight] is enabled and functions\nas a 'grid' for the glyphs to draw on.\n\n![The result of the example below.](https://flutter.github.io/assets-for-api-docs/assets/painting/strut_force_example.png)\n\n```dart\nconst Text.rich(\n TextSpan(\n text: '--------- ---------\\n',\n style: TextStyle(\n fontSize: 14,\n fontFamily: 'Roboto',\n ),\n children: <TextSpan>[\n TextSpan(\n text: '^^^M^^^\\n',\n style: TextStyle(\n fontSize: 30,\n fontFamily: 'Roboto',\n ),\n ),\n TextSpan(\n text: 'M------M\\n',\n style: TextStyle(\n fontSize: 30,\n fontFamily: 'Roboto',\n ),\n ),\n ],\n ),\n strutStyle: StrutStyle(\n fontFamily: 'Roboto',\n fontSize: 14,\n height: 1,\n forceStrutHeight: true,\n ),\n),\n```\n\nThis example uses forceStrutHeight to create a 'drop cap' for the 'T' in 'The'.\nBy locking the line heights to the metrics of the 14pt serif font, we are able\nto lay out a large 37pt 'T' on the second line to take up space on both the first\nand second lines.\n\n![The result of the example below.](https://flutter.github.io/assets-for-api-docs/assets/painting/strut_force_example_2.png)\n\n```dart\nText.rich(\n TextSpan(\n text: '  he candle flickered\\n',\n style: TextStyle(\n fontSize: 14,\n fontFamily: 'Serif'\n ),\n children: <TextSpan>[\n TextSpan(\n text: 'T',\n style: TextStyle(\n fontSize: 37,\n fontFamily: 'Serif'\n ),\n ),\n TextSpan(\n text: 'in the moonlight as\\n',\n style: TextStyle(\n fontSize: 14,\n fontFamily: 'Serif'\n ),\n ),\n TextSpan(\n text: 'Dash the bird fluttered\\n',\n style: TextStyle(\n fontSize: 14,\n fontFamily: 'Serif'\n ),\n ),\n TextSpan(\n text: 'off into the distance.',\n style: TextStyle(\n fontSize: 14,\n fontFamily: 'Serif'\n ),\n ),\n ],\n ),\n strutStyle: StrutStyle(\n fontFamily: 'Serif',\n fontSize: 14,\n forceStrutHeight: true,\n ),\n),\n```\n",
"detail": "",
"kind": 7,
"label": "StrutStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PreferredSizeWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface for widgets that can return the size this widget would prefer\nif it were otherwise unconstrained.\n\nThere are a few cases, notably [AppBar] and [TabBar], where it would be\nundesirable for the widget to constrain its own size but where the widget\nneeds to expose a preferred or \"default\" size. For example a primary\n[Scaffold] sets its app bar height to the app bar's preferred height\nplus the height of the system status bar.\n\nUse [PreferredSize] to give a preferred size to an arbitrary widget.",
"detail": "",
"kind": 7,
"label": "PreferredSizeWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverFixedExtentList",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sliver that places multiple box children with the same main axis extent in\na linear array.\n\n[SliverFixedExtentList] places its children in a linear array along the main\naxis starting at offset zero and without gaps. Each child is forced to have\nthe [itemExtent] in the main axis and the\n[SliverConstraints.crossAxisExtent] in the cross axis.\n\n[SliverFixedExtentList] is more efficient than [SliverList] because\n[SliverFixedExtentList] does not need to perform layout on its children to\nobtain their extent in the main axis.\n\n\nThis example, which would be inserted into a [CustomScrollView.slivers]\nlist, shows an infinite number of items in varying shades of blue:\n\n```dart\nSliverFixedExtentList(\n itemExtent: 50.0,\n delegate: SliverChildBuilderDelegate(\n (BuildContext context, int index) {\n return Container(\n alignment: Alignment.center,\n color: Colors.lightBlue[100 * (index % 9)],\n child: Text('list item $index'),\n );\n },\n ),\n)\n```\n\n\nSee also:\n\n * [SliverPrototypeExtentList], which is similar to [SliverFixedExtentList]\n except that it uses a prototype list item instead of a pixel value to define\n the main axis extent of each item.\n * [SliverFillViewport], which determines the [itemExtent] based on\n [SliverConstraints.viewportMainAxisExtent].\n * [SliverList], which does not require its children to have the same\n extent in the main axis.",
"detail": "",
"kind": 7,
"label": "SliverFixedExtentList"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "HeroFlightDirection",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Direction of the hero's flight based on the navigation operation.",
"detail": "",
"kind": 13,
"label": "HeroFlightDirection"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PageTransitionsBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Used by [PageTransitionsTheme] to define a [MaterialPageRoute] page\ntransition animation.\n\nApps can configure the map of builders for [ThemeData.platformTheme]\nto customize the default [MaterialPageRoute] page transition animation\nfor different platforms.\n\nSee also:\n\n * [FadeUpwardsPageTransitionsBuilder], which defines a default page transition.\n * [OpenUpwardsPageTransitionsBuilder], which defines a page transition\n that's similar to the one provided by Android P.\n * [CupertinoPageTransitionsBuilder], which defines a horizontal page\n transition that matches native iOS page transitions.",
"detail": "",
"kind": 7,
"label": "PageTransitionsBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialButton",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A utility class for building Material buttons that depend on the\nambient [ButtonTheme] and [Theme].\n\nThe button's size will expand to fit the child widget, if necessary.\n\nMaterialButtons whose [onPressed] handler is null will be disabled. To have\nan enabled button, make sure to pass a non-null value for onPressed.\n\nRather than using this class directly, consider using [FlatButton],\n[OutlineButton], or [RaisedButton], which configure this class with\nappropriate defaults that match the material design specification.\n\nTo create a button directly, without inheriting theme defaults, use\n[RawMaterialButton].\n\nIf you want an ink-splash effect for taps, but don't want to use a button,\nconsider using [InkWell] directly.\n\nSee also:\n\n * [IconButton], to create buttons that contain icons rather than text.",
"detail": "",
"kind": 7,
"label": "MaterialButton"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CircularProgressIndicator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design circular progress indicator, which spins to indicate that\nthe application is busy.\n\nA widget that shows progress along a circle. There are two kinds of circular\nprogress indicators:\n\n * _Determinate_. Determinate progress indicators have a specific value at\n each point in time, and the value should increase monotonically from 0.0\n to 1.0, at which time the indicator is complete. To create a determinate\n progress indicator, use a non-null [value] between 0.0 and 1.0.\n * _Indeterminate_. Indeterminate progress indicators do not have a specific\n value at each point in time and instead indicate that progress is being\n made without indicating how much progress remains. To create an\n indeterminate progress indicator, use a null [value].\n\nThe indicator arc is displayed with [valueColor], an animated value. To\nspecify a constant color use: `AlwaysStoppedAnimation<Color>(color)`.\n\nSee also:\n\n * [LinearProgressIndicator], which displays progress along a line.\n * [RefreshIndicator], which automatically displays a [CircularProgressIndicator]\n when the underlying vertical scrollable is overscrolled.\n * <https://material.io/design/components/progress-indicators.html#circular-progress-indicators>",
"detail": "",
"kind": 7,
"label": "CircularProgressIndicator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialApp",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An application that uses material design.\n\nA convenience widget that wraps a number of widgets that are commonly\nrequired for material design applications. It builds upon a [WidgetsApp] by\nadding material-design specific functionality, such as [AnimatedTheme] and\n[GridPaper].\n\nThe [MaterialApp] configures the top-level [Navigator] to search for routes\nin the following order:\n\n 1. For the `/` route, the [home] property, if non-null, is used.\n\n 2. Otherwise, the [routes] table is used, if it has an entry for the route.\n\n 3. Otherwise, [onGenerateRoute] is called, if provided. It should return a\n non-null value for any _valid_ route not handled by [home] and [routes].\n\n 4. Finally if all else fails [onUnknownRoute] is called.\n\nIf a [Navigator] is created, at least one of these options must handle the\n`/` route, since it is used when an invalid [initialRoute] is specified on\nstartup (e.g. by another application launching this one with an intent on\nAndroid; see [Window.defaultRouteName]).\n\nThis widget also configures the observer of the top-level [Navigator] (if\nany) to perform [Hero] animations.\n\nIf [home], [routes], [onGenerateRoute], and [onUnknownRoute] are all null,\nand [builder] is not null, then no [Navigator] is created.\n\nSee also:\n\n * [Scaffold], which provides standard app elements like an [AppBar] and a [Drawer].\n * [Navigator], which is used to manage the app's stack of pages.\n * [MaterialPageRoute], which defines an app page that transitions in a material-specific way.\n * [WidgetsApp], which defines the basic app elements but does not depend on the material library.\n * The Flutter Internationalization Tutorial,\n <https://flutter.dev/tutorials/internationalization/>.",
"detail": "",
"kind": 7,
"label": "MaterialApp"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BoxDecoration",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An immutable description of how to paint a box.\n\nThe [BoxDecoration] class provides a variety of ways to draw a box.\n\nThe box has a [border], a body, and may cast a [boxShadow].\n\nThe [shape] of the box can be a circle or a rectangle. If it is a rectangle,\nthen the [borderRadius] property controls the roundness of the corners.\n\nThe body of the box is painted in layers. The bottom-most layer is the\n[color], which fills the box. Above that is the [gradient], which also fills\nthe box. Finally there is the [image], the precise alignment of which is\ncontrolled by the [DecorationImage] class.\n\nThe [border] paints over the body; the [boxShadow], naturally, paints below it.\n\n\nThe following example uses the [Container] widget from the widgets layer to\ndraw an image with a border:\n\n```dart\nContainer(\n decoration: BoxDecoration(\n color: const Color(0xff7c94b6),\n image: DecorationImage(\n image: ExactAssetImage('images/flowers.jpeg'),\n fit: BoxFit.cover,\n ),\n border: Border.all(\n color: Colors.black,\n width: 8.0,\n ),\n ),\n)\n```\n\nThe [shape] or the [borderRadius] won't clip the children of the\ndecorated [Container]. If the clip is required, insert a clip widget\n(e.g., [ClipRect], [ClipRRect], [ClipPath]) as the child of the [Container].\nBe aware that clipping may be costly in terms of performance.\n\nSee also:\n\n * [DecoratedBox] and [Container], widgets that can be configured with\n [BoxDecoration] objects.\n * [CustomPaint], a widget that lets you draw arbitrary graphics.\n * [Decoration], the base class which lets you define other decorations.",
"detail": "",
"kind": 7,
"label": "BoxDecoration"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MemoryImage",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Decodes the given [Uint8List] buffer as an image, associating it with the\ngiven scale.\n\nThe provided [bytes] buffer should not be changed after it is provided\nto a [MemoryImage]. To provide an [ImageStream] that represents an image\nthat changes over time, consider creating a new subclass of [ImageProvider]\nwhose [load] method returns a subclass of [ImageStreamCompleter] that can\nhandle providing multiple images.\n\nSee also:\n\n * [Image.memory] for a shorthand of an [Image] widget backed by [MemoryImage].",
"detail": "",
"kind": 7,
"label": "MemoryImage"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PathFillType",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Determines the winding rule that decides how the interior of a [Path] is\ncalculated.\n\nThis enum is used by the [Path.fillType] property.",
"detail": "",
"kind": 13,
"label": "PathFillType"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BottomAppBar",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A container that is typically used with [Scaffold.bottomNavigationBar], and\ncan have a notch along the top that makes room for an overlapping\n[FloatingActionButton].\n\nTypically used with a [Scaffold] and a [FloatingActionButton].\n\n```dart\nScaffold(\n bottomNavigationBar: BottomAppBar(\n color: Colors.white,\n child: bottomAppBarContents,\n ),\n floatingActionButton: FloatingActionButton(onPressed: null),\n)\n```\n\nSee also:\n\n * [ComputeNotch] a function used for creating a notch in a shape.\n * [ScaffoldGeometry.floatingActionBarComputeNotch] the [ComputeNotch] used to\n make a notch for the [FloatingActionButton].\n * [FloatingActionButton] which the [BottomAppBar] makes a notch for.\n * [AppBar] for a toolbar that is shown at the top of the screen.",
"detail": "",
"kind": 7,
"label": "BottomAppBar"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BuildContext",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A handle to the location of a widget in the widget tree.\n\nThis class presents a set of methods that can be used from\n[StatelessWidget.build] methods and from methods on [State] objects.\n\n[BuildContext] objects are passed to [WidgetBuilder] functions (such as\n[StatelessWidget.build]), and are available from the [State.context] member.\nSome static functions (e.g. [showDialog], [Theme.of], and so forth) also\ntake build contexts so that they can act on behalf of the calling widget, or\nobtain data specifically for the given context.\n\nEach widget has its own [BuildContext], which becomes the parent of the\nwidget returned by the [StatelessWidget.build] or [State.build] function.\n(And similarly, the parent of any children for [RenderObjectWidget]s.)\n\nIn particular, this means that within a build method, the build context of\nthe widget of the build method is not the same as the build context of the\nwidgets returned by that build method. This can lead to some tricky cases.\nFor example, [Theme.of(context)] looks for the nearest enclosing [Theme] of\nthe given build context. If a build method for a widget Q includes a [Theme]\nwithin its returned widget tree, and attempts to use [Theme.of] passing its\nown context, the build method for Q will not find that [Theme] object. It\nwill instead find whatever [Theme] was an ancestor to the widget Q. If the\nbuild context for a subpart of the returned tree is needed, a [Builder]\nwidget can be used: the build context passed to the [Builder.builder]\ncallback will be that of the [Builder] itself.\n\nFor example, in the following snippet, the [ScaffoldState.showSnackBar]\nmethod is called on the [Scaffold] widget that the build method itself\ncreates. If a [Builder] had not been used, and instead the `context`\nargument of the build method itself had been used, no [Scaffold] would have\nbeen found, and the [Scaffold.of] function would have returned null.\n\n```dart\n @override\n Widget build(BuildContext context) {\n // here, Scaffold.of(context) returns null\n return Scaffold(\n appBar: AppBar(title: Text('Demo')),\n body: Builder(\n builder: (BuildContext context) {\n return FlatButton(\n child: Text('BUTTON'),\n onPressed: () {\n // here, Scaffold.of(context) returns the locally created Scaffold\n Scaffold.of(context).showSnackBar(SnackBar(\n content: Text('Hello.')\n ));\n }\n );\n }\n )\n );\n }\n```\n\nThe [BuildContext] for a particular widget can change location over time as\nthe widget is moved around the tree. Because of this, values returned from\nthe methods on this class should not be cached beyond the execution of a\nsingle synchronous function.\n\n[BuildContext] objects are actually [Element] objects. The [BuildContext]\ninterface is used to discourage direct manipulation of [Element] objects.",
"detail": "",
"kind": 7,
"label": "BuildContext"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StrokeCap",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Styles to use for line endings.\n\nSee also:\n\n * [Paint.strokeCap] for how this value is used.\n * [StrokeJoin] for the different kinds of line segment joins.",
"detail": "",
"kind": 13,
"label": "StrokeCap"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureScaleUpdateCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for when the pointers in contact with the screen have indicated a\nnew focal point and/or scale.",
"detail": "(ScaleUpdateDetails details) → void",
"kind": 7,
"label": "GestureScaleUpdateCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Theme",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Applies a theme to descendant widgets.\n\nA theme describes the colors and typographic choices of an application.\n\nDescendant widgets obtain the current theme's [ThemeData] object using\n[Theme.of]. When a widget uses [Theme.of], it is automatically rebuilt if\nthe theme later changes, so that the changes can be applied.\n\nThe [Theme] widget implies an [IconTheme] widget, set to the value of the\n[ThemeData.iconTheme] of the [data] for the [Theme].\n\nSee also:\n\n * [ThemeData], which describes the actual configuration of a theme.\n * [AnimatedTheme], which animates the [ThemeData] when it changes rather\n than changing the theme all at once.\n * [MaterialApp], which includes an [AnimatedTheme] widget configured via\n the [MaterialApp.theme] argument.",
"detail": "",
"kind": 7,
"label": "Theme"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Divider",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A one device pixel thick horizontal line, with padding on either\nside.\n\nIn the material design language, this represents a divider.\n\nDividers can be used in lists, [Drawer]s, and elsewhere to separate content\nvertically or horizontally depending on the value of the [axis] enum.\nTo create a one-pixel divider between items in a list, consider using\n[ListTile.divideTiles], which is optimized for this case.\n\nThe box's total height is controlled by [height]. The appropriate\npadding is automatically computed from the width or height.\n\nSee also:\n\n * [PopupMenuDivider], which is the equivalent but for popup menus.\n * [ListTile.divideTiles], another approach to dividing widgets in a list.\n * <https://material.io/design/components/dividers.html>",
"detail": "",
"kind": 7,
"label": "Divider"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DataColumn",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Column configuration for a [DataTable].\n\nOne column configuration must be provided for each column to\ndisplay in the table. The list of [DataColumn] objects is passed\nas the `columns` argument to the [new DataTable] constructor.",
"detail": "",
"kind": 7,
"label": "DataColumn"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DragTarget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that receives data when a [Draggable] widget is dropped.\n\nWhen a draggable is dragged on top of a drag target, the drag target is\nasked whether it will accept the data the draggable is carrying. If the user\ndoes drop the draggable on top of the drag target (and the drag target has\nindicated that it will accept the draggable's data), then the drag target is\nasked to accept the draggable's data.\n\nSee also:\n\n * [Draggable]\n * [LongPressDraggable]",
"detail": "",
"kind": 7,
"label": "DragTarget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Widget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Describes the configuration for an [Element].\n\nWidgets are the central class hierarchy in the Flutter framework. A widget\nis an immutable description of part of a user interface. Widgets can be\ninflated into elements, which manage the underlying render tree.\n\nWidgets themselves have no mutable state (all their fields must be final).\nIf you wish to associate mutable state with a widget, consider using a\n[StatefulWidget], which creates a [State] object (via\n[StatefulWidget.createState]) whenever it is inflated into an element and\nincorporated into the tree.\n\nA given widget can be included in the tree zero or more times. In particular\na given widget can be placed in the tree multiple times. Each time a widget\nis placed in the tree, it is inflated into an [Element], which means a\nwidget that is incorporated into the tree multiple times will be inflated\nmultiple times.\n\nThe [key] property controls how one widget replaces another widget in the\ntree. If the [runtimeType] and [key] properties of the two widgets are\n[operator==], respectively, then the new widget replaces the old widget by\nupdating the underlying element (i.e., by calling [Element.update] with the\nnew widget). Otherwise, the old element is removed from the tree, the new\nwidget is inflated into an element, and the new element is inserted into the\ntree.\n\nSee also:\n\n * [StatefulWidget] and [State], for widgets that can build differently\n several times over their lifetime.\n * [InheritedWidget], for widgets that introduce ambient state that can\n be read by descendant widgets.\n * [StatelessWidget], for widgets that always build the same way given a\n particular configuration and ambient state.",
"detail": "",
"kind": 7,
"label": "Widget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BannerLocation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Where to show a [Banner].\n\nThe start and end locations are relative to the ambient [Directionality]\n(which can be overridden by [Banner.layoutDirection]).",
"detail": "",
"kind": 13,
"label": "BannerLocation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedPhysicalModel",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [PhysicalModel].\n\nThe [borderRadius] and [elevation] are animated.\n\nThe [color] is animated if the [animateColor] property is set; otherwise,\nthe color changes immediately at the start of the animation for the other\ntwo properties. This allows the color to be animated independently (e.g.\nbecause it is being driven by an [AnimatedTheme]).\n\nThe [shape] is not animated.\n\nHere's an illustration of what using this widget looks like, using a [curve]\nof [Curves.fastOutSlowIn].",
"detail": "",
"kind": 7,
"label": "AnimatedPhysicalModel"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverOverlapInjector",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sliver that has a sliver geometry based on the values stored in a\n[SliverOverlapAbsorberHandle].\n\nThe [SliverOverlapAbsorber] must be an earlier descendant of a common\nancestor [Viewport], so that it will always be laid out before the\n[SliverOverlapInjector] during a particular frame.\n\nSee also:\n\n * [NestedScrollView], which uses a [SliverOverlapAbsorber] to align its\n children, and which shows sample usage for this class.",
"detail": "",
"kind": 7,
"label": "SliverOverlapInjector"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "HeroFlightShuttleBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A function that lets [Hero]s self supply a [Widget] that is shown during the\nhero's flight from one route to another instead of default (which is to\nshow the destination route's instance of the Hero).",
"detail": "(BuildContext flightContext, Animation<double> animation, HeroFlightDirection flightDirection, BuildContext fromHeroContext, BuildContext toHeroContext) → Widget",
"kind": 7,
"label": "HeroFlightShuttleBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PopupMenuButton",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Displays a menu when pressed and calls [onSelected] when the menu is dismissed\nbecause an item was selected. The value passed to [onSelected] is the value of\nthe selected menu item.\n\nOne of [child] or [icon] may be provided, but not both. If [icon] is provided,\nthen [PopupMenuButton] behaves like an [IconButton].\n\nIf both are null, then a standard overflow icon is created (depending on the\nplatform).\n\n\nThis example shows a menu with four items, selecting between an enum's\nvalues and setting a `_selection` field based on the selection.\n\n```dart\n// This is the type used by the popup menu below.\nenum WhyFarther { harder, smarter, selfStarter, tradingCharter }\n\n// This menu button widget updates a _selection field (of type WhyFarther,\n// not shown here).\nPopupMenuButton<WhyFarther>(\n onSelected: (WhyFarther result) { setState(() { _selection = result; }); },\n itemBuilder: (BuildContext context) => <PopupMenuEntry<WhyFarther>>[\n const PopupMenuItem<WhyFarther>(\n value: WhyFarther.harder,\n child: Text('Working a lot harder'),\n ),\n const PopupMenuItem<WhyFarther>(\n value: WhyFarther.smarter,\n child: Text('Being a lot smarter'),\n ),\n const PopupMenuItem<WhyFarther>(\n value: WhyFarther.selfStarter,\n child: Text('Being a self-starter'),\n ),\n const PopupMenuItem<WhyFarther>(\n value: WhyFarther.tradingCharter,\n child: Text('Placed in charge of trading charter'),\n ),\n ],\n)\n```\n\nSee also:\n\n * [PopupMenuItem], a popup menu entry for a single value.\n * [PopupMenuDivider], a popup menu entry that is just a horizontal line.\n * [CheckedPopupMenuItem], a popup menu item with a checkmark.\n * [showMenu], a method to dynamically show a popup menu at a given location.",
"detail": "",
"kind": 7,
"label": "PopupMenuButton"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ShapeBorderClipper",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [CustomClipper] that clips to the outer path of a [ShapeBorder].",
"detail": "",
"kind": 7,
"label": "ShapeBorderClipper"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Animation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An animation with a value of type `T`.\n\nAn animation consists of a value (of type `T`) together with a status. The\nstatus indicates whether the animation is conceptually running from\nbeginning to end or from the end back to the beginning, although the actual\nvalue of the animation might not change monotonically (e.g., if the\nanimation uses a curve that bounces).\n\nAnimations also let other objects listen for changes to either their value\nor their status. These callbacks are called during the \"animation\" phase of\nthe pipeline, just prior to rebuilding widgets.\n\nTo create a new animation that you can run forward and backward, consider\nusing [AnimationController].\n\nSee also:\n\n * [Tween], which can be used to create [Animation] subclasses that\n convert `Animation<double>`s into other kinds of `Animation`s.",
"detail": "",
"kind": 7,
"label": "Animation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "IntTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two integers that rounds.\n\nThis class specializes the interpolation of [Tween<int>] to be\nappropriate for integers by interpolating between the given begin\nand end values and then rounding the result to the nearest\ninteger.\n\nThis is the closest approximation to a linear tween that is possible with an\ninteger. Compare to [StepTween] and [Tween<double>].\n\nSee [Tween] for a discussion on how to use interpolation objects.",
"detail": "",
"kind": 7,
"label": "IntTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextSelectionOverlay",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An object that manages a pair of text selection handles.\n\nThe selection handles are displayed in the [Overlay] that most closely\nencloses the given [BuildContext].",
"detail": "",
"kind": 7,
"label": "TextSelectionOverlay"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationStatus",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The status of an animation",
"detail": "",
"kind": 13,
"label": "AnimationStatus"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RoundSliderTickMarkShape",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "This is the default shape of each [Slider] tick mark.\n\nTick marks are only displayed if the slider is discrete, which can be done\nby setting the [Slider.divisions] as non-null.\n\nIt paints a solid circle, centered in the on the track.\nThe color is determined by the [Slider]'s enabled state and track's active\nstates. These colors are defined in:\n [SliderThemeData.activeTrackColor],\n [SliderThemeData.inactiveTrackColor],\n [SliderThemeData.disabledActiveTrackColor],\n [SliderThemeData.disabledInactiveTrackColor].\n\nSee also:\n\n * [Slider], which includes tick marks defined by this shape.\n * [SliderTheme], which can be used to configure the tick mark shape of all\n sliders in a widget subtree.",
"detail": "",
"kind": 7,
"label": "RoundSliderTickMarkShape"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Navigator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that manages a set of child widgets with a stack discipline.\n\nMany apps have a navigator near the top of their widget hierarchy in order\nto display their logical history using an [Overlay] with the most recently\nvisited pages visually on top of the older pages. Using this pattern lets\nthe navigator visually transition from one page to another by moving the widgets\naround in the overlay. Similarly, the navigator can be used to show a dialog\nby positioning the dialog widget above the current page.\n\n## Using the Navigator\n\nMobile apps typically reveal their contents via full-screen elements\ncalled \"screens\" or \"pages\". In Flutter these elements are called\nroutes and they're managed by a [Navigator] widget. The navigator\nmanages a stack of [Route] objects and provides methods for managing\nthe stack, like [Navigator.push] and [Navigator.pop].\n\n### Displaying a full-screen route\n\nAlthough you can create a navigator directly, it's most common to use\nthe navigator created by a [WidgetsApp] or a [MaterialApp] widget. You\ncan refer to that navigator with [Navigator.of].\n\nA [MaterialApp] is the simplest way to set things up. The [MaterialApp]'s\nhome becomes the route at the bottom of the [Navigator]'s stack. It is what\nyou see when the app is launched.\n\n```dart\nvoid main() {\n runApp(MaterialApp(home: MyAppHome()));\n}\n```\n\nTo push a new route on the stack you can create an instance of\n[MaterialPageRoute] with a builder function that creates whatever you\nwant to appear on the screen. For example:\n\n```dart\nNavigator.push(context, MaterialPageRoute<void>(\n builder: (BuildContext context) {\n return Scaffold(\n appBar: AppBar(title: Text('My Page')),\n body: Center(\n child: FlatButton(\n child: Text('POP'),\n onPressed: () {\n Navigator.pop(context);\n },\n ),\n ),\n );\n },\n));\n```\n\nThe route defines its widget with a builder function instead of a\nchild widget because it will be built and rebuilt in different\ncontexts depending on when it's pushed and popped.\n\nAs you can see, the new route can be popped, revealing the app's home\npage, with the Navigator's pop method:\n\n```dart\nNavigator.pop(context);\n```\n\nIt usually isn't necessary to provide a widget that pops the Navigator\nin a route with a [Scaffold] because the Scaffold automatically adds a\n'back' button to its AppBar. Pressing the back button causes\n[Navigator.pop] to be called. On Android, pressing the system back\nbutton does the same thing.\n\n### Using named navigator routes\n\nMobile apps often manage a large number of routes and it's often\neasiest to refer to them by name. Route names, by convention,\nuse a path-like structure (for example, '/a/b/c').\nThe app's home page route is named '/' by default.\n\nThe [MaterialApp] can be created\nwith a [Map<String, WidgetBuilder>] which maps from a route's name to\na builder function that will create it. The [MaterialApp] uses this\nmap to create a value for its navigator's [onGenerateRoute] callback.\n\n```dart\nvoid main() {\n runApp(MaterialApp(\n home: MyAppHome(), // becomes the route named '/'\n routes: <String, WidgetBuilder> {\n '/a': (BuildContext context) => MyPage(title: 'page A'),\n '/b': (BuildContext context) => MyPage(title: 'page B'),\n '/c': (BuildContext context) => MyPage(title: 'page C'),\n },\n ));\n}\n```\n\nTo show a route by name:\n\n```dart\nNavigator.pushNamed(context, '/b');\n```\n\n### Routes can return a value\n\nWhen a route is pushed to ask the user for a value, the value can be\nreturned via the [pop] method's result parameter.\n\nMethods that push a route return a [Future]. The Future resolves when the\nroute is popped and the [Future]'s value is the [pop] method's `result`\nparameter.\n\nFor example if we wanted to ask the user to press 'OK' to confirm an\noperation we could `await` the result of [Navigator.push]:\n\n```dart\nbool value = await Navigator.push(context, MaterialPageRoute<bool>(\n builder: (BuildContext context) {\n return Center(\n child: GestureDetector(\n child: Text('OK'),\n onTap: () { Navigator.pop(context, true); }\n ),\n );\n }\n));\n```\n\nIf the user presses 'OK' then value will be true. If the user backs\nout of the route, for example by pressing the Scaffold's back button,\nthe value will be null.\n\nWhen a route is used to return a value, the route's type parameter must\nmatch the type of [pop]'s result. That's why we've used\n`MaterialPageRoute<bool>` instead of `MaterialPageRoute<void>` or just\n`MaterialPageRoute`. (If you prefer to not specify the types, though, that's\nfine too.)\n\n### Popup routes\n\nRoutes don't have to obscure the entire screen. [PopupRoute]s cover the\nscreen with a [ModalRoute.barrierColor] that can be only partially opaque to\nallow the current screen to show through. Popup routes are \"modal\" because\nthey block input to the widgets below.\n\nThere are functions which create and show popup routes. For\nexample: [showDialog], [showMenu], and [showModalBottomSheet]. These\nfunctions return their pushed route's Future as described above.\nCallers can await the returned value to take an action when the\nroute is popped, or to discover the route's value.\n\nThere are also widgets which create popup routes, like [PopupMenuButton] and\n[DropdownButton]. These widgets create internal subclasses of PopupRoute\nand use the Navigator's push and pop methods to show and dismiss them.\n\n### Custom routes\n\nYou can create your own subclass of one of the widget library route classes\nlike [PopupRoute], [ModalRoute], or [PageRoute], to control the animated\ntransition employed to show the route, the color and behavior of the route's\nmodal barrier, and other aspects of the route.\n\nThe [PageRouteBuilder] class makes it possible to define a custom route\nin terms of callbacks. Here's an example that rotates and fades its child\nwhen the route appears or disappears. This route does not obscure the entire\nscreen because it specifies `opaque: false`, just as a popup route does.\n\n```dart\nNavigator.push(context, PageRouteBuilder(\n opaque: false,\n pageBuilder: (BuildContext context, _, __) {\n return Center(child: Text('My PageRoute'));\n },\n transitionsBuilder: (___, Animation<double> animation, ____, Widget child) {\n return FadeTransition(\n opacity: animation,\n child: RotationTransition(\n turns: Tween<double>(begin: 0.5, end: 1.0).animate(animation),\n child: child,\n ),\n );\n }\n));\n```\n\nThe page route is built in two parts, the \"page\" and the\n\"transitions\". The page becomes a descendant of the child passed to\nthe `transitionsBuilder` function. Typically the page is only built once,\nbecause it doesn't depend on its animation parameters (elided with `_`\nand `__` in this example). The transition is built on every frame\nfor its duration.\n\n### Nesting Navigators\n\nAn app can use more than one Navigator. Nesting one Navigator below\nanother Navigator can be used to create an \"inner journey\" such as tabbed\nnavigation, user registration, store checkout, or other independent journeys\nthat represent a subsection of your overall application.\n\n#### Real World Example\n\nIt is standard practice for iOS apps to use tabbed navigation where each\ntab maintains its own navigation history. Therefore, each tab has its own\n[Navigator], creating a kind of \"parallel navigation.\"\n\nIn addition to the parallel navigation of the tabs, it is still possible to\nlaunch full-screen pages that completely cover the tabs. For example: an\non-boarding flow, or an alert dialog. Therefore, there must exist a \"root\"\n[Navigator] that sits above the tab navigation. As a result, each of the\ntab's [Navigator]s are actually nested [Navigator]s sitting below a single\nroot [Navigator].\n\nThe nested [Navigator]s for tabbed navigation sit in [WidgetApp] and\n[CupertinoTabView], so you don't need to worry about nested [Navigator]s\nin this situation, but it's a real world example where nested [Navigator]s\nare used.\n\nThe following example demonstrates how a nested [Navigator] can be used to\npresent a standalone user registration journey.\n\nEven though this example uses two [Navigator]s to demonstrate nested\n[Navigator]s, a similar result is possible using only a single [Navigator].\n\nRun this example with `flutter run --route=/signup` to start it with\nthe signup flow instead of on the home page.\n\n```dart\nimport 'package:flutter/material.dart';\n```\n\n```dart\nvoid main() => runApp(new MyApp());\n```\n\n```dart\nclass MyApp extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return MaterialApp(\n title: 'Flutter Code Sample for Navigator',\n // MaterialApp contains our top-level Navigator\n initialRoute: '/',\n routes: {\n '/': (BuildContext context) => HomePage(),\n '/signup': (BuildContext context) => SignUpPage(),\n },\n );\n }\n}\n\nclass HomePage extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return DefaultTextStyle(\n style: Theme.of(context).textTheme.display1,\n child: Container(\n color: Colors.white,\n alignment: Alignment.center,\n child: Text('Home Page'),\n ),\n );\n }\n}\n\nclass CollectPersonalInfoPage extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return DefaultTextStyle(\n style: Theme.of(context).textTheme.display1,\n child: GestureDetector(\n onTap: () {\n // This moves from the personal info page to the credentials page,\n // replacing this page with that one.\n Navigator.of(context)\n .pushReplacementNamed('signup/choose_credentials');\n },\n child: Container(\n color: Colors.lightBlue,\n alignment: Alignment.center,\n child: Text('Collect Personal Info Page'),\n ),\n ),\n );\n }\n}\n\nclass ChooseCredentialsPage extends StatelessWidget {\n const ChooseCredentialsPage({\n this.onSignupComplete,\n });\n\n final VoidCallback onSignupComplete;\n\n @override\n Widget build(BuildContext context) {\n return GestureDetector(\n onTap: onSignupComplete,\n child: DefaultTextStyle(\n style: Theme.of(context).textTheme.display1,\n child: Container(\n color: Colors.pinkAccent,\n alignment: Alignment.center,\n child: Text('Choose Credentials Page'),\n ),\n ),\n );\n }\n}\n\nclass SignUpPage extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n // SignUpPage builds its own Navigator which ends up being a nested\n // Navigator in our app.\n return Navigator(\n initialRoute: 'signup/personal_info',\n onGenerateRoute: (RouteSettings settings) {\n WidgetBuilder builder;\n switch (settings.name) {\n case 'signup/personal_info':\n // Assume CollectPersonalInfoPage collects personal info and then\n // navigates to 'signup/choose_credentials'.\n builder = (BuildContext _) => CollectPersonalInfoPage();\n break;\n case 'signup/choose_credentials':\n // Assume ChooseCredentialsPage collects new credentials and then\n // invokes 'onSignupComplete()'.\n builder = (BuildContext _) => ChooseCredentialsPage(\n onSignupComplete: () {\n // Referencing Navigator.of(context) from here refers to the\n // top level Navigator because SignUpPage is above the\n // nested Navigator that it created. Therefore, this pop()\n // will pop the entire \"sign up\" journey and return to the\n // \"/\" route, AKA HomePage.\n Navigator.of(context).pop();\n },\n );\n break;\n default:\n throw Exception('Invalid route: ${settings.name}');\n }\n return MaterialPageRoute(builder: builder, settings: settings);\n },\n );\n }\n}\n```\n\n[Navigator.of] operates on the nearest ancestor [Navigator] from the given\n[BuildContext]. Be sure to provide a [BuildContext] below the intended\n[Navigator], especially in large [build] methods where nested [Navigator]s\nare created. The [Builder] widget can be used to access a [BuildContext] at\na desired location in the widget subtree.",
"detail": "",
"kind": 7,
"label": "Navigator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverSafeArea",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A sliver that insets another sliver by sufficient padding to avoid\nintrusions by the operating system.\n\nFor example, this will indent the sliver by enough to avoid the status bar\nat the top of the screen.\n\nIt will also indent the sliver by the amount necessary to avoid The Notch\non the iPhone X, or other similar creative physical features of the\ndisplay.\n\nWhen a [minimum] padding is specified, the greater of the minimum padding\nor the safe area padding will be applied.\n\nSee also:\n\n * [SafeArea], for insetting widgets to avoid operating system intrusions.\n * [SliverPadding], for insetting slivers in general.\n * [MediaQuery], from which the window padding is obtained.\n * [dart:ui.Window.padding], which reports the padding from the operating\n system.",
"detail": "",
"kind": 7,
"label": "SliverSafeArea"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Checkbox",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design checkbox.\n\nThe checkbox itself does not maintain any state. Instead, when the state of\nthe checkbox changes, the widget calls the [onChanged] callback. Most\nwidgets that use a checkbox will listen for the [onChanged] callback and\nrebuild the checkbox with a new [value] to update the visual appearance of\nthe checkbox.\n\nThe checkbox can optionally display three values - true, false, and null -\nif [tristate] is true. When [value] is null a dash is displayed. By default\n[tristate] is false and the checkbox's [value] must be true or false.\n\nRequires one of its ancestors to be a [Material] widget.\n\nSee also:\n\n * [CheckboxListTile], which combines this widget with a [ListTile] so that\n you can give the checkbox a label.\n * [Switch], a widget with semantics similar to [Checkbox].\n * [Radio], for selecting among a set of explicit values.\n * [Slider], for selecting a value in a range.\n * <https://material.io/design/components/selection-controls.html#checkboxes>\n * <https://material.io/design/components/lists.html#types>",
"detail": "",
"kind": 7,
"label": "Checkbox"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TrainHoppingAnimation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "This animation starts by proxying one animation, but when the value of that\nanimation crosses the value of the second (either because the second is\ngoing in the opposite direction, or because the one overtakes the other),\nthe animation hops over to proxying the second animation.\n\nWhen the [TrainHoppingAnimation] starts proxying the second animation\ninstead of the first, the [onSwitchedTrain] callback is called.\n\nIf the two animations start at the same value, then the\n[TrainHoppingAnimation] immediately hops to the second animation, and the\n[onSwitchedTrain] callback is not called. If only one animation is provided\n(i.e. if the second is null), then the [TrainHoppingAnimation] just proxies\nthe first animation.\n\nSince this object must track the two animations even when it has no\nlisteners of its own, instead of shutting down when all its listeners are\nremoved, it exposes a [dispose()] method. Call this method to shut this\nobject down.",
"detail": "",
"kind": 7,
"label": "TrainHoppingAnimation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlatButton",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design \"flat button\".\n\nA flat button is a text label displayed on a (zero elevation) [Material]\nwidget that reacts to touches by filling with color.\n\nUse flat buttons on toolbars, in dialogs, or inline with other content but\noffset from that content with padding so that the button's presence is\nobvious. Flat buttons intentionally do not have visible borders and must\ntherefore rely on their position relative to other content for context. In\ndialogs and cards, they should be grouped together in one of the bottom\ncorners. Avoid using flat buttons where they would blend in with other\ncontent, for example in the middle of lists.\n\nMaterial design flat buttons have an all-caps label, some internal padding,\nand some defined dimensions. To have a part of your application be\ninteractive, with ink splashes, without also committing to these stylistic\nchoices, consider using [InkWell] instead.\n\nIf the [onPressed] callback is null, then the button will be disabled,\nwill not react to touch, and will be colored as specified by\nthe [disabledColor] property instead of the [color] property. If you are\ntrying to change the button's [color] and it is not having any effect, check\nthat you are passing a non-null [onPressed] handler.\n\nFlat buttons have a minimum size of 88.0 by 36.0 which can be overridden\nwith [ButtonTheme].\n\nThe [clipBehavior] argument must not be null.\n\n\nThis example shows a simple [FlatButton].\n\n```dart\nFlatButton(\n onPressed: () {\n /*...*/\n },\n child: Text(\n \"Flat Button\",\n ),\n)\n```\n\n\nThis example shows a [FlatButton] that is normally white-on-blue,\nwith splashes rendered in a different shade of blue.\nIt turns black-on-grey when disabled.\nThe button has 8px of padding on each side, and the text is 20px high.\n\n```dart\nFlatButton(\n color: Colors.blue,\n textColor: Colors.white,\n disabledColor: Colors.grey,\n disabledTextColor: Colors.black,\n padding: EdgeInsets.all(8.0),\n splashColor: Colors.blueAccent,\n onPressed: () {\n /*...*/\n },\n child: Text(\n \"Flat Button\",\n style: TextStyle(fontSize: 20.0),\n ),\n)\n```\n\nSee also:\n\n * [RaisedButton], a filled button whose material elevates when pressed.\n * [DropdownButton], which offers the user a choice of a number of options.\n * [SimpleDialogOption], which is used in [SimpleDialog]s.\n * [IconButton], to create buttons that just contain icons.\n * [InkWell], which implements the ink splash part of a flat button.\n * [RawMaterialButton], the widget this widget is based on.\n * <https://material.io/design/components/buttons.html>",
"detail": "",
"kind": 7,
"label": "FlatButton"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RenderObjectWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "RenderObjectWidgets provide the configuration for [RenderObjectElement]s,\nwhich wrap [RenderObject]s, which provide the actual rendering of the\napplication.",
"detail": "",
"kind": 7,
"label": "RenderObjectWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollSpringSimulation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A SpringSimulation where the value of [x] is guaranteed to have exactly the\nend value when the simulation isDone().",
"detail": "",
"kind": 7,
"label": "ScrollSpringSimulation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ValueChanged",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for callbacks that report that an underlying value has changed.\n\nSee also [ValueSetter].",
"detail": "(T value) → void",
"kind": 7,
"label": "ValueChanged"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RawGestureDetector",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that detects gestures described by the given gesture\nfactories.\n\nFor common gestures, use a [GestureRecognizer].\n[RawGestureDetector] is useful primarily when developing your\nown gesture recognizers.\n\nConfiguring the gesture recognizers requires a carefully constructed map, as\ndescribed in [gestures] and as shown in the example below.\n\n\nThis example shows how to hook up a [TapGestureRecognizer]. It assumes that\nthe code is being used inside a [State] object with a `_last` field that is\nthen displayed as the child of the gesture detector.\n\n```dart\nRawGestureDetector(\n gestures: <Type, GestureRecognizerFactory>{\n TapGestureRecognizer: GestureRecognizerFactoryWithHandlers<TapGestureRecognizer>(\n () => TapGestureRecognizer(),\n (TapGestureRecognizer instance) {\n instance\n ..onTapDown = (TapDownDetails details) { setState(() { _last = 'down'; }); }\n ..onTapUp = (TapUpDetails details) { setState(() { _last = 'up'; }); }\n ..onTap = () { setState(() { _last = 'tap'; }); }\n ..onTapCancel = () { setState(() { _last = 'cancel'; }); };\n },\n ),\n },\n child: Container(width: 300.0, height: 300.0, color: Colors.yellow, child: Text(_last)),\n)\n```\n\nSee also:\n\n * [GestureDetector], a less flexible but much simpler widget that does the same thing.\n * [Listener], a widget that reports raw pointer events.\n * [GestureRecognizer], the class that you extend to create a custom gesture recognizer.",
"detail": "",
"kind": 7,
"label": "RawGestureDetector"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CheckedModeBanner",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Displays a [Banner] saying \"DEBUG\" when running in checked mode.\n[MaterialApp] builds one of these by default.\nDoes nothing in release mode.",
"detail": "",
"kind": 7,
"label": "CheckedModeBanner"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ReverseAnimation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An animation that is the reverse of another animation.\n\nIf the parent animation is running forward from 0.0 to 1.0, this animation\nis running in reverse from 1.0 to 0.0.\n\nUsing a [ReverseAnimation] is different from simply using a [Tween] with a\nbegin of 1.0 and an end of 0.0 because the tween does not change the status\nor direction of the animation.\n\nSee also:\n\n * [Curve.flipped] and [FlippedCurve], which provide a similar effect but on\n [Curve]s.\n * [CurvedAnimation], which can take separate curves for when the animation\n is going forward than for when it is going in reverse.",
"detail": "",
"kind": 7,
"label": "ReverseAnimation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "UiKitView",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Embeds an iOS view in the Widget hierarchy.\n\n\nEmbedding iOS views is an expensive operation and should be avoided when a Flutter\nequivalent is possible.\n\n\n\n\nConstruction of UIViews is done asynchronously, before the UIView is ready this widget paints\nnothing while maintaining the same layout constraints.",
"detail": "",
"kind": 7,
"label": "UiKitView"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedListState",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The state for a scrolling container that animates items when they are\ninserted or removed.\n\nWhen an item is inserted with [insertItem] an animation begins running. The\nanimation is passed to [AnimatedList.itemBuilder] whenever the item's widget\nis needed.\n\nWhen an item is removed with [removeItem] its animation is reversed.\nThe removed item's animation is passed to the [removeItem] builder\nparameter.\n\nAn app that needs to insert or remove items in response to an event\ncan refer to the [AnimatedList]'s state with a global key:\n\n```dart\nGlobalKey<AnimatedListState> listKey = GlobalKey<AnimatedListState>();\n...\nAnimatedList(key: listKey, ...);\n...\nlistKey.currentState.insert(123);\n```\n\n[AnimatedList] item input handlers can also refer to their [AnimatedListState]\nwith the static [AnimatedList.of] method.",
"detail": "",
"kind": 7,
"label": "AnimatedListState"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BottomNavigationBarType",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines the layout and behavior of a [BottomNavigationBar].\n\nSee also:\n\n * [BottomNavigationBar]\n * [BottomNavigationBarItem]\n * <https://material.io/design/components/bottom-navigation.html#specs>",
"detail": "",
"kind": 13,
"label": "BottomNavigationBarType"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MaterialRectCenterArcTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [Tween] that interpolates a [Rect] by moving it along a circular arc from\n[begin]'s [Rect.center] to [end]'s [Rect.center] while interpolating the\nrectangle's width and height.\n\nThe arc that defines that center of the interpolated rectangle as it morphs\nfrom [begin] to [end] is a [MaterialPointArcTween].\n\nSee also:\n\n * [MaterialRectArcTween], A [Tween] that interpolates a [Rect] by having\n its opposite corners follow circular arcs.\n * [Tween], for a discussion on how to use interpolation objects.\n * [MaterialPointArcTween], the analogue for [Offset] interpolation.\n * [RectTween], which does a linear rectangle interpolation.\n * [Hero.createRectTween], which can be used to specify the tween that defines\n a hero's path.",
"detail": "",
"kind": 7,
"label": "MaterialRectCenterArcTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Dismissible",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that can be dismissed by dragging in the indicated [direction].\n\nDragging or flinging this widget in the [DismissDirection] causes the child\nto slide out of view. Following the slide animation, if [resizeDuration] is\nnon-null, the Dismissible widget animates its height (or width, whichever is\nperpendicular to the dismiss direction) to zero over the [resizeDuration].\n\n\nBackgrounds can be used to implement the \"leave-behind\" idiom. If a background\nis specified it is stacked behind the Dismissible's child and is exposed when\nthe child moves.\n\nThe widget calls the [onDismissed] callback either after its size has\ncollapsed to zero (if [resizeDuration] is non-null) or immediately after\nthe slide animation (if [resizeDuration] is null). If the Dismissible is a\nlist item, it must have a key that distinguishes it from the other items and\nits [onDismissed] callback must remove the item from the list.",
"detail": "",
"kind": 7,
"label": "Dismissible"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextSelectionHandleType",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Which type of selection handle to be displayed.\n\nWith mixed-direction text, both handles may be the same type. Examples:\n\n* LTR text: 'the &lt;quick brown&gt; fox':\n\n The '&lt;' is drawn with the [left] type, the '&gt;' with the [right]\n\n* RTL text: 'XOF &lt;NWORB KCIUQ&gt; EHT':\n\n Same as above.\n\n* mixed text: '&lt;the NWOR&lt;B KCIUQ fox'\n\n Here 'the QUICK B' is selected, but 'QUICK BROWN' is RTL. Both are drawn\n with the [left] type.\n\nSee also:\n\n * [TextDirection], which discusses left-to-right and right-to-left text in\n more detail.",
"detail": "",
"kind": 13,
"label": "TextSelectionHandleType"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Stack",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that positions its children relative to the edges of its box.\n\nThis class is useful if you want to overlap several children in a simple\nway, for example having some text and an image, overlaid with a gradient and\na button attached to the bottom.\n\nEach child of a [Stack] widget is either _positioned_ or _non-positioned_.\nPositioned children are those wrapped in a [Positioned] widget that has at\nleast one non-null property. The stack sizes itself to contain all the\nnon-positioned children, which are positioned according to [alignment]\n(which defaults to the top-left corner in left-to-right environments and the\ntop-right corner in right-to-left environments). The positioned children are\nthen placed relative to the stack according to their top, right, bottom, and\nleft properties.\n\nThe stack paints its children in order with the first child being at the\nbottom. If you want to change the order in which the children paint, you\ncan rebuild the stack with the children in the new order. If you reorder\nthe children in this way, consider giving the children non-null keys.\nThese keys will cause the framework to move the underlying objects for\nthe children to their new locations rather than recreate them at their\nnew location.\n\nFor more details about the stack layout algorithm, see [RenderStack].\n\nIf you want to lay a number of children out in a particular pattern, or if\nyou want to make a custom layout manager, you probably want to use\n[CustomMultiChildLayout] instead. In particular, when using a [Stack] you\ncan't position children relative to their size or the stack's own size.\n\n\nUsing a [Stack] you can position widgets over one another.\n\n```dart\nStack(\n children: <Widget>[\n Container(\n width: 100,\n height: 100,\n color: Colors.red,\n ),\n Container(\n width: 90,\n height: 90,\n color: Colors.green,\n ),\n Container(\n width: 80,\n height: 80,\n color: Colors.blue,\n ),\n ],\n)\n```\n\n\nThis example shows how [Stack] can be used to enhance text visibility\nby adding gradient backdrops.\n\n```dart\nSizedBox(\n width: 250,\n height: 250,\n child: Stack(\n children: <Widget>[\n Container(\n width: 250,\n height: 250,\n color: Colors.white,\n ),\n Container(\n padding: EdgeInsets.all(5.0),\n alignment: Alignment.bottomCenter,\n decoration: BoxDecoration(\n gradient: LinearGradient(\n begin: Alignment.topCenter,\n end: Alignment.bottomCenter,\n colors: <Color>[\n Colors.black.withAlpha(0),\n Colors.black12,\n Colors.black45\n ],\n ),\n ),\n child: Text(\n \"Foreground Text\",\n style: TextStyle(color: Colors.white, fontSize: 20.0),\n ),\n ),\n ],\n ),\n)\n```\n\nSee also:\n\n * [Align], which sizes itself based on its child's size and positions\n the child according to an [Alignment] value.\n * [CustomSingleChildLayout], which uses a delegate to control the layout of\n a single child.\n * [CustomMultiChildLayout], which uses a delegate to position multiple\n children.\n * [Flow], which provides paint-time control of its children using transform\n matrices.\n * The [catalog of layout widgets](https://flutter.dev/widgets/layout/).",
"detail": "",
"kind": 7,
"label": "Stack"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RoundedRectangleBorder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A rectangular border with rounded corners.\n\nTypically used with [ShapeDecoration] to draw a box with a rounded\nrectangle.\n\nThis shape can interpolate to and from [CircleBorder].\n\nSee also:\n\n * [BorderSide], which is used to describe each side of the box.\n * [Border], which, when used with [BoxDecoration], can also\n describe a rounded rectangle.",
"detail": "",
"kind": 7,
"label": "RoundedRectangleBorder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DayPicker",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Displays the days of a given month and allows choosing a day.\n\nThe days are arranged in a rectangular grid with one column for each day of\nthe week.\n\nThe day picker widget is rarely used directly. Instead, consider using\n[showDatePicker], which creates a date picker dialog.\n\nSee also:\n\n * [showDatePicker], which shows a dialog that contains a material design\n date picker.\n * [showTimePicker], which shows a dialog that contains a material design\n time picker.",
"detail": "",
"kind": 7,
"label": "DayPicker"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "IndexedSemantics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that annotates the child semantics with an index.\n\nSemantic indexes are used by TalkBack/Voiceover to make announcements about\nthe current scroll state. Certain widgets like the [ListView] will\nautomatically provide a child index for building semantics. A user may wish\nto manually provide semantic indexes if not all child of the scrollable\ncontribute semantics.\n\n\nThe example below handles spacers in a scrollable that don't contribute\nsemantics. The automatic indexes would give the spaces a semantic index,\ncausing scroll announcements to erroneously state that there are four items\nvisible.\n\n```dart\nListView(\n addSemanticIndexes: false,\n semanticChildCount: 2,\n children: const <Widget>[\n IndexedSemantics(index: 0, child: Text('First')),\n Spacer(),\n IndexedSemantics(index: 1, child: Text('Second')),\n Spacer(),\n ],\n)\n```\n\nSee also:\n\n * [CustomScrollView], for an explanation of index semantics.",
"detail": "",
"kind": 7,
"label": "IndexedSemantics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GridPaper",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that draws a rectilinear grid of lines one pixel wide.\n\nUseful with a [Stack] for visualizing your layout along a grid.\n\nThe grid's origin (where the first primary horizontal line and the first\nprimary vertical line intersect) is at the top left of the widget.\n\nThe grid is drawn over the [child] widget.",
"detail": "",
"kind": 7,
"label": "GridPaper"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Directionality",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that determines the ambient directionality of text and\ntext-direction-sensitive render objects.\n\nFor example, [Padding] depends on the [Directionality] to resolve\n[EdgeInsetsDirectional] objects into absolute [EdgeInsets] objects.",
"detail": "",
"kind": 7,
"label": "Directionality"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DecoratedBox",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that paints a [Decoration] either before or after its child paints.\n\n[Container] insets its child by the widths of the borders; this widget does\nnot.\n\nCommonly used with [BoxDecoration].\n\nThe [child] is not clipped. To clip a child to the shape of a particular\n[ShapeDecoration], consider using a [ClipPath] widget.\n\n\nThis sample shows a radial gradient that draws a moon on a night sky:\n\n```dart\nDecoratedBox(\n decoration: BoxDecoration(\n gradient: RadialGradient(\n center: const Alignment(-0.5, -0.6),\n radius: 0.15,\n colors: <Color>[\n const Color(0xFFEEEEEE),\n const Color(0xFF111133),\n ],\n stops: <double>[0.9, 1.0],\n ),\n ),\n)\n```\n\nSee also:\n\n * [Ink], which paints a [Decoration] on a [Material], allowing\n [InkResponse] and [InkWell] splashes to paint over them.\n * [DecoratedBoxTransition], the version of this class that animates on the\n [decoration] property.\n * [Decoration], which you can extend to provide other effects with\n [DecoratedBox].\n * [CustomPaint], another way to draw custom effects from the widget layer.",
"detail": "",
"kind": 7,
"label": "DecoratedBox"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TappableChipAttributes",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface for material design chips that can be tapped.\n\nThe defaults mentioned in the documentation for each attribute are what\nthe implementing classes typically use for defaults (but this class doesn't\nprovide or enforce them).\n\nSee also:\n\n * [InputChip], a chip that represents a complex piece of information, such\n as an entity (person, place, or thing) or conversational text, in a\n compact form.\n * [ChoiceChip], allows a single selection from a set of options. Choice\n chips contain related descriptive text or categories.\n * [FilterChip], uses tags or descriptive words as a way to filter content.\n * [ActionChip], represents an action related to primary content.\n * <https://material.io/design/components/chips.html>",
"detail": "",
"kind": 7,
"label": "TappableChipAttributes"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextRange",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A range of characters in a string of text.",
"detail": "",
"kind": 7,
"label": "TextRange"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ExpansionPanelRadio",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An expansion panel that allows for radio-like functionality.\nThis means that at any given time, at most, one [ExpansionPanelRadio]\ncan remain expanded.\n\nA unique identifier [value] must be assigned to each panel.\nThis identifier allows the [ExpansionPanelList] to determine\nwhich [ExpansionPanelRadio] instance should be expanded.\n\nSee [ExpansionPanelList.radio] for a sample implementation.",
"detail": "",
"kind": 7,
"label": "ExpansionPanelRadio"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Title",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that describes this app in the operating system.",
"detail": "",
"kind": 7,
"label": "Title"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ProgressIndicator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A base class for material design progress indicators.\n\nThis widget cannot be instantiated directly. For a linear progress\nindicator, see [LinearProgressIndicator]. For a circular progress indicator,\nsee [CircularProgressIndicator].\n\nSee also:\n\n * <https://material.io/design/components/progress-indicators.html>",
"detail": "",
"kind": 7,
"label": "ProgressIndicator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlowDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A delegate that controls the appearance of a flow layout.\n\nFlow layouts are optimized for moving children around the screen using\ntransformation matrices. For optimal performance, construct the\n[FlowDelegate] with an [Animation] that ticks whenever the delegate wishes\nto change the transformation matrices for the children and avoid rebuilding\nthe [Flow] widget itself every animation frame.\n\nSee also:\n\n * [Flow]\n * [RenderFlow]",
"detail": "",
"kind": 7,
"label": "FlowDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OrientationBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Builds a widget tree that can depend on the parent widget's orientation\n(distinct from the device orientation).\n\nSee also:\n\n * [LayoutBuilder], which exposes the complete constraints, not just the\n orientation.\n * [CustomSingleChildLayout], which positions its child during layout.\n * [CustomMultiChildLayout], with which you can define the precise layout\n of a list of children during the layout phase.\n * [MediaQueryData.orientation], which exposes whether the device is in\n landscape or portrait mode.",
"detail": "",
"kind": 7,
"label": "OrientationBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Expanded",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that expands a child of a [Row], [Column], or [Flex]\nso that the child fills the available space.\n\nUsing an [Expanded] widget makes a child of a [Row], [Column], or [Flex]\nexpand to fill the available space along the main axis (e.g., horizontally for\na [Row] or vertically for a [Column]). If multiple children are expanded,\nthe available space is divided among them according to the [flex] factor.\n\nAn [Expanded] widget must be a descendant of a [Row], [Column], or [Flex],\nand the path from the [Expanded] widget to its enclosing [Row], [Column], or\n[Flex] must contain only [StatelessWidget]s or [StatefulWidget]s (not other\nkinds of widgets, like [RenderObjectWidget]s).\n\n\nThis example shows how to use an [Expanded] widget in a [Column] so that\nit's middle child, a [Container] here, expands to fill the space.\n\n```dart\nWidget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text('Expanded Column Sample'),\n ),\n body: Center(\n child: Column(\n children: <Widget>[\n Container(\n color: Colors.red,\n height: 100,\n width: 100,\n ),\n Expanded(\n child: Container(\n color: Colors.blue,\n width: 100,\n ),\n ),\n Container(\n color: Colors.red,\n height: 100,\n width: 100,\n ),\n ],\n ),\n ),\n );\n}\n```\n\nThis example shows how to use an [Expanded] widget in a [Row] with multiple\nchildren expanded, utilizing the [flex] factor to prioritize available space.\n\n```dart\nWidget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text('Expanded Row Sample'),\n ),\n body: Center(\n child: Row(\n children: <Widget>[\n Expanded(\n flex: 2,\n child: Container(\n color: Colors.red,\n height: 100,\n ),\n ),\n Container(\n color: Colors.blue,\n height: 100,\n width: 50,\n ),\n Expanded(\n flex: 1,\n child: Container(\n color: Colors.red,\n height: 100,\n ),\n ),\n ],\n ),\n ),\n );\n}\n```\n\nSee also:\n\n * [Flexible], which does not force the child to fill the available space.\n * [Spacer], a widget that takes up space proportional to it's flex value.\n * The [catalog of layout widgets](https://flutter.dev/widgets/layout/).",
"detail": "",
"kind": 7,
"label": "Expanded"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Offset",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An immutable 2D floating-point offset.\n\nGenerally speaking, Offsets can be interpreted in two ways:\n\n1. As representing a point in Cartesian space a specified distance from a\n separately-maintained origin. For example, the top-left position of\n children in the [RenderBox] protocol is typically represented as an\n [Offset] from the top left of the parent box.\n\n2. As a vector that can be applied to coordinates. For example, when\n painting a [RenderObject], the parent is passed an [Offset] from the\n screen's origin which it can add to the offsets of its children to find\n the [Offset] from the screen's origin to each of the children.\n\nBecause a particular [Offset] can be interpreted as one sense at one time\nthen as the other sense at a later time, the same class is used for both\nsenses.\n\nSee also:\n\n * [Size], which represents a vector describing the size of a rectangle.",
"detail": "",
"kind": 7,
"label": "Offset"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RenderComparison",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The description of the difference between two objects, in the context of how\nit will affect the rendering.\n\nUsed by [TextSpan.compareTo] and [TextStyle.compareTo].\n\nThe values in this enum are ordered such that they are in increasing order\nof cost. A value with index N implies all the values with index less than N.\nFor example, [layout] (index 3) implies [paint] (2).",
"detail": "",
"kind": 13,
"label": "RenderComparison"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Alignment",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A point within a rectangle.\n\n`Alignment(0.0, 0.0)` represents the center of the rectangle. The distance\nfrom -1.0 to +1.0 is the distance from one side of the rectangle to the\nother side of the rectangle. Therefore, 2.0 units horizontally (or\nvertically) is equivalent to the width (or height) of the rectangle.\n\n`Alignment(-1.0, -1.0)` represents the top left of the rectangle.\n\n`Alignment(1.0, 1.0)` represents the bottom right of the rectangle.\n\n`Alignment(0.0, 3.0)` represents a point that is horizontally centered with\nrespect to the rectangle and vertically below the bottom of the rectangle by\nthe height of the rectangle.\n\n`Alignment(0.0, -0.5)` represents a point that is horizontally centered with\nrespect to the rectangle and vertically half way between the top edge and\nthe center.\n\n`Alignment(x, y)` in a rectangle with height h and width w describes\nthe point (x * w/2 + w/2, y * h/2 + h/2) in the coordinate system of the\nrectangle.\n\n[Alignment] uses visual coordinates, which means increasing [x] moves the\npoint from left to right. To support layouts with a right-to-left\n[TextDirection], consider using [AlignmentDirectional], in which the\ndirection the point moves when increasing the horizontal value depends on\nthe [TextDirection].\n\nA variety of widgets use [Alignment] in their configuration, most\nnotably:\n\n * [Align] positions a child according to an [Alignment].\n\nSee also:\n\n * [AlignmentDirectional], which has a horizontal coordinate orientation\n that depends on the [TextDirection].\n * [AlignmentGeometry], which is an abstract type that is agnostic as to\n whether the horizontal direction depends on the [TextDirection].",
"detail": "",
"kind": 7,
"label": "Alignment"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FixedColumnWidth",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Sizes the column to a specific number of pixels.\n\nThis is the cheapest way to size a column.",
"detail": "",
"kind": 7,
"label": "FixedColumnWidth"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DayPeriod",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Whether the [TimeOfDay] is before or after noon.",
"detail": "",
"kind": 13,
"label": "DayPeriod"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextFormField",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [FormField] that contains a [TextField].\n\nThis is a convenience widget that wraps a [TextField] widget in a\n[FormField].\n\nA [Form] ancestor is not required. The [Form] simply makes it easier to\nsave, reset, or validate multiple fields at once. To use without a [Form],\npass a [GlobalKey] to the constructor and use [GlobalKey.currentState] to\nsave or reset the form field.\n\nWhen a [controller] is specified, its [TextEditingController.text]\ndefines the [initialValue]. If this [FormField] is part of a scrolling\ncontainer that lazily constructs its children, like a [ListView] or a\n[CustomScrollView], then a [controller] should be specified.\nThe controller's lifetime should be managed by a stateful widget ancestor\nof the scrolling container.\n\nIf a [controller] is not specified, [initialValue] can be used to give\nthe automatically generated controller an initial value.\n\nFor a documentation about the various parameters, see [TextField].\n\n\nCreates a [TextFormField] with an [InputDecoration] and validator function.\n\n```dart\nTextFormField(\n decoration: const InputDecoration(\n icon: Icon(Icons.person),\n hintText: 'What do people call you?',\n labelText: 'Name *',\n ),\n onSaved: (String value) {\n // This optional block of code can be used to run\n // code when the user saves the form.\n },\n validator: (String value) {\n return value.contains('@') ? 'Do not use the @ char.' : null;\n },\n)\n```\n\nSee also:\n\n * <https://material.io/design/components/text-fields.html>\n * [TextField], which is the underlying text field without the [Form]\n integration.\n * [InputDecorator], which shows the labels and other visual elements that\n surround the actual text editing widget.",
"detail": "",
"kind": 7,
"label": "TextFormField"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BallisticScrollActivity",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An activity that animates a scroll view based on a physics [Simulation].\n\nA [BallisticScrollActivity] is typically used when the user lifts their\nfinger off the screen to continue the scrolling gesture with the current velocity.\n\n[BallisticScrollActivity] is also used to restore a scroll view to a valid\nscroll offset when the geometry of the scroll view changes. In these\nsituations, the [Simulation] typically starts with a zero velocity.\n\nSee also:\n\n * [DrivenScrollActivity], which animates a scroll view based on a set of\n animation parameters.",
"detail": "",
"kind": 7,
"label": "BallisticScrollActivity"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextAlign",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Whether and how to align text horizontally.",
"detail": "",
"kind": 13,
"label": "TextAlign"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverAppBar",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design app bar that integrates with a [CustomScrollView].\n\nAn app bar consists of a toolbar and potentially other widgets, such as a\n[TabBar] and a [FlexibleSpaceBar]. App bars typically expose one or more\ncommon actions with [IconButton]s which are optionally followed by a\n[PopupMenuButton] for less common operations.\n\n\nSliver app bars are typically used as the first child of a\n[CustomScrollView], which lets the app bar integrate with the scroll view so\nthat it can vary in height according to the scroll offset or float above the\nother content in the scroll view. For a fixed-height app bar at the top of\nthe screen see [AppBar], which is used in the [Scaffold.appBar] slot.\n\nThe AppBar displays the toolbar widgets, [leading], [title], and\n[actions], above the [bottom] (if any). If a [flexibleSpace] widget is\nspecified then it is stacked behind the toolbar and the bottom widget.\n\n\nThis is an example that could be included in a [CustomScrollView]'s\n[CustomScrollView.slivers] list:\n\n```dart\nSliverAppBar(\n expandedHeight: 150.0,\n flexibleSpace: const FlexibleSpaceBar(\n title: Text('Available seats'),\n ),\n actions: <Widget>[\n IconButton(\n icon: const Icon(Icons.add_circle),\n tooltip: 'Add new entry',\n onPressed: () { /* ... */ },\n ),\n ]\n)\n```\n\n## Animated Examples\n\nThe following animations show how app bars with different configurations\nbehave when a user scrolls up and then down again.\n\n* App bar with [floating]: false, [pinned]: false, [snap]: false:\n\n* App bar with [floating]: true, [pinned]: false, [snap]: false:\n\n* App bar with [floating]: true, [pinned]: false, [snap]: true:\n\n* App bar with [floating]: true, [pinned]: true, [snap]: false:\n\n* App bar with [floating]: true, [pinned]: true, [snap]: true:\n\n* App bar with [floating]: false, [pinned]: true, [snap]: false:\n\nThe property [snap] can only be set to true if [floating] is also true.\n\nSee also:\n\n * [CustomScrollView], which integrates the [SliverAppBar] into its\n scrolling.\n * [AppBar], which is a fixed-height app bar for use in [Scaffold.appBar].\n * [TabBar], which is typically placed in the [bottom] slot of the [AppBar]\n if the screen has multiple pages arranged in tabs.\n * [IconButton], which is used with [actions] to show buttons on the app bar.\n * [PopupMenuButton], to show a popup menu on the app bar, via [actions].\n * [FlexibleSpaceBar], which is used with [flexibleSpace] when the app bar\n can expand and collapse.\n * <https://material.io/design/components/app-bars-top.html>",
"detail": "",
"kind": 7,
"label": "SliverAppBar"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TweenVisitor",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for callbacks passed to [AnimatedWidgetBaseState.forEachTween].",
"detail": "(Tween<T> tween, T targetValue, TweenConstructor<T> constructor) → Tween<T>",
"kind": 7,
"label": "TweenVisitor"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScaleEndDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Details for [GestureScaleEndCallback].",
"detail": "",
"kind": 7,
"label": "ScaleEndDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CircleBorder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A border that fits a circle within the available space.\n\nTypically used with [ShapeDecoration] to draw a circle.\n\nThe [dimensions] assume that the border is being used in a square space.\nWhen applied to a rectangular space, the border paints in the center of the\nrectangle.\n\nSee also:\n\n * [BorderSide], which is used to describe each side of the box.\n * [Border], which, when used with [BoxDecoration], can also\n describe a circle.",
"detail": "",
"kind": 7,
"label": "CircleBorder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FlutterError",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Error class used to report Flutter-specific assertion failures and\ncontract violations.",
"detail": "",
"kind": 7,
"label": "FlutterError"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "BorderRadius",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An immutable set of radii for each corner of a rectangle.\n\nUsed by [BoxDecoration] when the shape is a [BoxShape.rectangle].\n\nThe [BorderRadius] class specifies offsets in terms of visual corners, e.g.\n[topLeft]. These values are not affected by the [TextDirection]. To support\nboth left-to-right and right-to-left layouts, consider using\n[BorderRadiusDirectional], which is expressed in terms that are relative to\na [TextDirection] (typically obtained from the ambient [Directionality]).",
"detail": "",
"kind": 7,
"label": "BorderRadius"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextInputAction",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An action the user has requested the text input control to perform.\n\nEach action represents a logical meaning, and also configures the soft\nkeyboard to display a certain kind of action button. The visual appearance\nof the action button might differ between versions of the same OS.\n\nDespite the logical meaning of each action, choosing a particular\n[TextInputAction] does not necessarily cause any specific behavior to\nhappen. It is up to the developer to ensure that the behavior that occurs\nwhen an action button is pressed is appropriate for the action button chosen.\n\nFor example: If the user presses the keyboard action button on iOS when it\nreads \"Emergency Call\", the result should not be a focus change to the next\nTextField. This behavior is not logically appropriate for a button that says\n\"Emergency Call\".\n\nSee [EditableText] for more information about customizing action button\nbehavior.\n\nMost [TextInputAction]s are supported equally by both Android and iOS.\nHowever, there is not a complete, direct mapping between Android's IME input\ntypes and iOS's keyboard return types. Therefore, some [TextInputAction]s\nare inappropriate for one of the platforms. If a developer chooses an\ninappropriate [TextInputAction] when running in debug mode, an error will be\nthrown. If the same thing is done in release mode, then instead of sending\nthe inappropriate value, Android will use \"unspecified\" on the platform\nside and iOS will use \"default\" on the platform side.\n\nSee also:\n\n * [TextInput], which configures the platform's keyboard setup.\n * [EditableText], which invokes callbacks when the action button is pressed.",
"detail": "",
"kind": 13,
"label": "TextInputAction"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RelativeRectTween",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interpolation between two relative rects.\n\nThis class specializes the interpolation of [Tween<RelativeRect>] to\nuse [RelativeRect.lerp].\n\nSee [Tween] for a discussion on how to use interpolation objects.",
"detail": "",
"kind": 7,
"label": "RelativeRectTween"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ButtonBarLayoutBehavior",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Used with [ButtonTheme] and [ButtonThemeData] to define how the button bar\nshould size itself with either constraints or internal padding.",
"detail": "",
"kind": 13,
"label": "ButtonBarLayoutBehavior"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "InkResponse",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An area of a [Material] that responds to touch. Has a configurable shape and\ncan be configured to clip splashes that extend outside its bounds or not.\n\nFor a variant of this widget that is specialized for rectangular areas that\nalways clip splashes, see [InkWell].\n\nAn [InkResponse] widget does two things when responding to a tap:\n\n * It starts to animate a _highlight_. The shape of the highlight is\n determined by [highlightShape]. If it is a [BoxShape.circle], the\n default, then the highlight is a circle of fixed size centered in the\n [InkResponse]. If it is [BoxShape.rectangle], then the highlight is a box\n the size of the [InkResponse] itself, unless [getRectCallback] is\n provided, in which case that callback defines the rectangle. The color of\n the highlight is set by [highlightColor].\n\n * Simultaneously, it starts to animate a _splash_. This is a growing circle\n initially centered on the tap location. If this is a [containedInkWell],\n the splash grows to the [radius] while remaining centered at the tap\n location. Otherwise, the splash migrates to the center of the box as it\n grows.\n\nThe following two diagrams show how [InkResponse] looks when tapped if the\n[highlightShape] is [BoxShape.circle] (the default) and [containedInkWell]\nis false (also the default).\n\nThe first diagram shows how it looks if the [InkResponse] is relatively\nlarge:\n\n![The highlight is a disc centered in the box, smaller than the child widget.](https://flutter.github.io/assets-for-api-docs/assets/material/ink_response_large.png)\n\nThe second diagram shows how it looks if the [InkResponse] is small:\n\n![The highlight is a disc overflowing the box, centered on the child.](https://flutter.github.io/assets-for-api-docs/assets/material/ink_response_small.png)\n\nThe main thing to notice from these diagrams is that the splashes happily\nexceed the bounds of the widget (because [containedInkWell] is false).\n\nThe following diagram shows the effect when the [InkResponse] has a\n[highlightShape] of [BoxShape.rectangle] with [containedInkWell] set to\ntrue. These are the values used by [InkWell].\n\n![The highlight is a rectangle the size of the box.](https://flutter.github.io/assets-for-api-docs/assets/material/ink_well.png)\n\nThe [InkResponse] widget must have a [Material] widget as an ancestor. The\n[Material] widget is where the ink reactions are actually painted. This\nmatches the material design premise wherein the [Material] is what is\nactually reacting to touches by spreading ink.\n\nIf a Widget uses this class directly, it should include the following line\nat the top of its build function to call [debugCheckHasMaterial]:\n\n```dart\nassert(debugCheckHasMaterial(context));\n```\n\n## Troubleshooting\n\n### The ink splashes aren't visible!\n\nIf there is an opaque graphic, e.g. painted using a [Container], [Image], or\n[DecoratedBox], between the [Material] widget and the [InkResponse] widget,\nthen the splash won't be visible because it will be under the opaque graphic.\nThis is because ink splashes draw on the underlying [Material] itself, as\nif the ink was spreading inside the material.\n\nThe [Ink] widget can be used as a replacement for [Image], [Container], or\n[DecoratedBox] to ensure that the image or decoration also paints in the\n[Material] itself, below the ink.\n\nIf this is not possible for some reason, e.g. because you are using an\nopaque [CustomPaint] widget, alternatively consider using a second\n[Material] above the opaque widget but below the [InkResponse] (as an\nancestor to the ink response). The [MaterialType.transparency] material\nkind can be used for this purpose.\n\nSee also:\n\n * [GestureDetector], for listening for gestures without ink splashes.\n * [RaisedButton] and [FlatButton], two kinds of buttons in material design.\n * [IconButton], which combines [InkResponse] with an [Icon].",
"detail": "",
"kind": 7,
"label": "InkResponse"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "StatefulWidget",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that has mutable state.\n\nState is information that (1) can be read synchronously when the widget is\nbuilt and (2) might change during the lifetime of the widget. It is the\nresponsibility of the widget implementer to ensure that the [State] is\npromptly notified when such state changes, using [State.setState].\n\nA stateful widget is a widget that describes part of the user interface by\nbuilding a constellation of other widgets that describe the user interface\nmore concretely. The building process continues recursively until the\ndescription of the user interface is fully concrete (e.g., consists\nentirely of [RenderObjectWidget]s, which describe concrete [RenderObject]s).\n\nStateful widgets are useful when the part of the user interface you are\ndescribing can change dynamically, e.g. due to having an internal\nclock-driven state, or depending on some system state. For compositions that\ndepend only on the configuration information in the object itself and the\n[BuildContext] in which the widget is inflated, consider using\n[StatelessWidget].\n\n\n[StatefulWidget] instances themselves are immutable and store their mutable\nstate either in separate [State] objects that are created by the\n[createState] method, or in objects to which that [State] subscribes, for\nexample [Stream] or [ChangeNotifier] objects, to which references are stored\nin final fields on the [StatefulWidget] itself.\n\nThe framework calls [createState] whenever it inflates a\n[StatefulWidget], which means that multiple [State] objects might be\nassociated with the same [StatefulWidget] if that widget has been inserted\ninto the tree in multiple places. Similarly, if a [StatefulWidget] is\nremoved from the tree and later inserted in to the tree again, the framework\nwill call [createState] again to create a fresh [State] object, simplifying\nthe lifecycle of [State] objects.\n\nA [StatefulWidget] keeps the same [State] object when moving from one\nlocation in the tree to another if its creator used a [GlobalKey] for its\n[key]. Because a widget with a [GlobalKey] can be used in at most one\nlocation in the tree, a widget that uses a [GlobalKey] has at most one\nassociated element. The framework takes advantage of this property when\nmoving a widget with a global key from one location in the tree to another\nby grafting the (unique) subtree associated with that widget from the old\nlocation to the new location (instead of recreating the subtree at the new\nlocation). The [State] objects associated with [StatefulWidget] are grafted\nalong with the rest of the subtree, which means the [State] object is reused\n(instead of being recreated) in the new location. However, in order to be\neligible for grafting, the widget must be inserted into the new location in\nthe same animation frame in which it was removed from the old location.\n\n## Performance considerations\n\nThere are two primary categories of [StatefulWidget]s.\n\nThe first is one which allocates resources in [State.initState] and disposes\nof them in [State.dispose], but which does not depend on [InheritedWidget]s\nor call [State.setState]. Such widgets are commonly used at the root of an\napplication or page, and communicate with subwidgets via [ChangeNotifier]s,\n[Stream]s, or other such objects. Stateful widgets following such a pattern\nare relatively cheap (in terms of CPU and GPU cycles), because they are\nbuilt once then never update. They can, therefore, have somewhat complicated\nand deep build methods.\n\nThe second category is widgets that use [State.setState] or depend on\n[InheritedWidget]s. These will typically rebuild many times during the\napplication's lifetime, and it is therefore important to minimize the impact\nof rebuilding such a widget. (They may also use [State.initState] or\n[State.didChangeDependencies] and allocate resources, but the important part\nis that they rebuild.)\n\nThere are several techniques one can use to minimize the impact of\nrebuilding a stateful widget:\n\n * Push the state to the leaves. For example, if your page has a ticking\n clock, rather than putting the state at the top of the page and\n rebuilding the entire page each time the clock ticks, create a dedicated\n clock widget that only updates itself.\n\n * Minimize the number of nodes transitively created by the build method and\n any widgets it creates. Ideally, a stateful widget would only create a\n single widget, and that widget would be a [RenderObjectWidget].\n (Obviously this isn't always practical, but the closer a widget gets to\n this ideal, the more efficient it will be.)\n\n * If a subtree does not change, cache the widget that represents that\n subtree and re-use it each time it can be used. It is massively more\n efficient for a widget to be re-used than for a new (but\n identically-configured) widget to be created. Factoring out the stateful\n part into a widget that takes a child argument is a common way of doing\n this.\n\n * Use `const` widgets where possible. (This is equivalent to caching a\n widget and re-using it.)\n\n * Avoid changing the depth of any created subtrees or changing the type of\n any widgets in the subtree. For example, rather than returning either the\n child or the child wrapped in an [IgnorePointer], always wrap the child\n widget in an [IgnorePointer] and control the [IgnorePointer.ignoring]\n property. This is because changing the depth of the subtree requires\n rebuilding, laying out, and painting the entire subtree, whereas just\n changing the property will require the least possible change to the\n render tree (in the case of [IgnorePointer], for example, no layout or\n repaint is necessary at all).\n\n * If the depth must be changed for some reason, consider wrapping the\n common parts of the subtrees in widgets that have a [GlobalKey] that\n remains consistent for the life of the stateful widget. (The\n [KeyedSubtree] widget may be useful for this purpose if no other widget\n can conveniently be assigned the key.)\n\n\nThis is a skeleton of a stateful widget subclass called `YellowBird`.\n\nIn this example. the [State] has no actual state. State is normally\nrepresented as private member fields. Also, normally widgets have more\nconstructor arguments, each of which corresponds to a `final` property.\n\n```dart\nclass YellowBird extends StatefulWidget {\n const YellowBird({ Key key }) : super(key: key);\n\n @override\n _YellowBirdState createState() => _YellowBirdState();\n}\n\nclass _YellowBirdState extends State<YellowBird> {\n @override\n Widget build(BuildContext context) {\n return Container(color: const Color(0xFFFFE306));\n }\n}\n```\n\nThis example shows the more generic widget `Bird` which can be given a\ncolor and a child, and which has some internal state with a method that\ncan be called to mutate it:\n\n```dart\nclass Bird extends StatefulWidget {\n const Bird({\n Key key,\n this.color = const Color(0xFFFFE306),\n this.child,\n }) : super(key: key);\n\n final Color color;\n final Widget child;\n\n _BirdState createState() => _BirdState();\n}\n\nclass _BirdState extends State<Bird> {\n double _size = 1.0;\n\n void grow() {\n setState(() { _size += 0.1; });\n }\n\n @override\n Widget build(BuildContext context) {\n return Container(\n color: widget.color,\n transform: Matrix4.diagonal3Values(_size, _size, 1.0),\n child: widget.child,\n );\n }\n}\n```\n\nBy convention, widget constructors only use named arguments. Named arguments\ncan be marked as required using [@required]. Also by convention, the first\nargument is [key], and the last argument is `child`, `children`, or the\nequivalent.\n\nSee also:\n\n * [State], where the logic behind a [StatefulWidget] is hosted.\n * [StatelessWidget], for widgets that always build the same way given a\n particular configuration and ambient state.\n * [InheritedWidget], for widgets that introduce ambient state that can\n be read by descendant widgets.",
"detail": "",
"kind": 7,
"label": "StatefulWidget"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ListWheelChildListDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A delegate that supplies children for [ListWheelScrollView] using an\nexplicit list.\n\n[ListWheelScrollView] lazily constructs its children to avoid creating more\nchildren than are visible through the [Viewport]. This delegate provides\nchildren using an explicit list, which is convenient but reduces the benefit\nof building children lazily.\n\nIn general building all the widgets in advance is not efficient. It is\nbetter to create a delegate that builds them on demand using\n[ListWheelChildBuilderDelegate] or by subclassing [ListWheelChildDelegate]\ndirectly.\n\nThis class is provided for the cases where either the list of children is\nknown well in advance (ideally the children are themselves compile-time\nconstants, for example), and therefore will not be built each time the\ndelegate itself is created, or the list is small, such that it's likely\nalways visible (and thus there is nothing to be gained by building it on\ndemand). For example, the body of a dialog box might fit both of these\nconditions.",
"detail": "",
"kind": 7,
"label": "ListWheelChildListDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SliverChildDelegate",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A delegate that supplies children for slivers.\n\nMany slivers lazily construct their box children to avoid creating more\nchildren than are visible through the [Viewport]. Rather than receiving\ntheir children as an explicit [List], they receive their children using a\n[SliverChildDelegate].\n\nIt's uncommon to subclass [SliverChildDelegate]. Instead, consider using one\nof the existing subclasses that provide adaptors to builder callbacks or\nexplicit child lists.\n\n## Child elements' lifecycle\n\n### Creation\n\nWhile laying out the list, visible children's elements, states and render\nobjects will be created lazily based on existing widgets (such as in the\ncase of [SliverChildListDelegate]) or lazily provided ones (such as in the\ncase of [SliverChildBuilderDelegate]).\n\n### Destruction\n\nWhen a child is scrolled out of view, the associated element subtree, states\nand render objects are destroyed. A new child at the same position in the\nsliver will be lazily recreated along with new elements, states and render\nobjects when it is scrolled back.\n\n### Destruction mitigation\n\nIn order to preserve state as child elements are scrolled in and out of\nview, the following options are possible:\n\n * Moving the ownership of non-trivial UI-state-driving business logic\n out of the sliver child subtree. For instance, if a list contains posts\n with their number of upvotes coming from a cached network response, store\n the list of posts and upvote number in a data model outside the list. Let\n the sliver child UI subtree be easily recreate-able from the\n source-of-truth model object. Use [StatefulWidget]s in the child widget\n subtree to store instantaneous UI state only.\n\n * Letting [KeepAlive] be the root widget of the sliver child widget subtree\n that needs to be preserved. The [KeepAlive] widget marks the child\n subtree's top render object child for keep-alive. When the associated top\n render object is scrolled out of view, the sliver keeps the child's\n render object (and by extension, its associated elements and states) in a\n cache list instead of destroying them. When scrolled back into view, the\n render object is repainted as-is (if it wasn't marked dirty in the\n interim).\n\n This only works if the [SliverChildDelegate] subclasses don't wrap the\n child widget subtree with other widgets such as [AutomaticKeepAlive] and\n [RepaintBoundary] via `addAutomaticKeepAlives` and\n `addRepaintBoundaries`.\n\n * Using [AutomaticKeepAlive] widgets (inserted by default in\n [SliverChildListDelegate] or [SliverChildListDelegate]). Instead of\n unconditionally caching the child element subtree when scrolling\n off-screen like [KeepAlive], [AutomaticKeepAlive] can let whether to\n cache the subtree be determined by descendant logic in the subtree.\n\n As an example, the [EditableText] widget signals its sliver child element\n subtree to stay alive while its text field has input focus. If it doesn't\n have focus and no other descendants signaled for keep-alive via a\n [KeepAliveNotification], the sliver child element subtree will be\n destroyed when scrolled away.\n\n [AutomaticKeepAlive] descendants typically signal it to be kept alive by\n using the [AutomaticKeepAliveClientMixin], then implementing the\n [wantKeepAlive] getter and calling [updateKeepAlive].\n\nSee also:\n\n * [SliverChildBuilderDelegate], which is a delegate that uses a builder\n callback to construct the children.\n * [SliverChildListDelegate], which is a delegate that has an explicit list\n of children.",
"detail": "",
"kind": 7,
"label": "SliverChildDelegate"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DragEndDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Details object for callbacks that use [GestureDragEndCallback].\n\nSee also:\n\n * [DragGestureRecognizer.onEnd], which uses [GestureDragEndCallback].\n * [DragDownDetails], the details for [GestureDragDownCallback].\n * [DragStartDetails], the details for [GestureDragStartCallback].\n * [DragUpdateDetails], the details for [GestureDragUpdateCallback].",
"detail": "",
"kind": 7,
"label": "DragEndDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OverscrollIndicatorNotification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A notification that an [GlowingOverscrollIndicator] will start showing an\noverscroll indication.\n\nTo prevent the indicator from showing the indication, call [disallowGlow] on\nthe notification.\n\nSee also:\n\n * [GlowingOverscrollIndicator], which generates this type of notification.",
"detail": "",
"kind": 7,
"label": "OverscrollIndicatorNotification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "MultiFrameImageStreamCompleter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Manages the decoding and scheduling of image frames.\n\nNew frames will only be emitted while there are registered listeners to the\nstream (registered with [addListener]).\n\nThis class deals with 2 types of frames:\n\n * image frames - image frames of an animated image.\n * app frames - frames that the flutter engine is drawing to the screen to\n show the app GUI.\n\nFor single frame images the stream will only complete once.\n\nFor animated images, this class eagerly decodes the next image frame,\nand notifies the listeners that a new frame is ready on the first app frame\nthat is scheduled after the image frame duration has passed.\n\nScheduling new timers only from scheduled app frames, makes sure we pause\nthe animation when the app is not visible (as new app frames will not be\nscheduled).\n\nSee the following timeline example:\n\n | Time | Event | Comment |\n |------|--------------------------------------------|---------------------------|\n | t1 | App frame scheduled (image frame A posted) | |\n | t2 | App frame scheduled | |\n | t3 | App frame scheduled | |\n | t4 | Image frame B decoded | |\n | t5 | App frame scheduled | t5 - t1 < frameB_duration |\n | t6 | App frame scheduled (image frame B posted) | t6 - t1 > frameB_duration |\n",
"detail": "",
"kind": 7,
"label": "MultiFrameImageStreamCompleter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "OpenUpwardsPageTransitionsBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Used by [PageTransitionsTheme] to define a vertical [MaterialPageRoute] page\ntransition animation that looks like the default page transition\nused on Android P.\n\nSee also:\n\n * [FadeUpwardsPageTransitionsBuilder], which defines a default page transition.\n * [CupertinoPageTransitionsBuilder], which defines a horizontal page\n transition that matches native iOS page transitions.",
"detail": "",
"kind": 7,
"label": "OpenUpwardsPageTransitionsBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FloatingActionButtonAnimator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Provider of animations to move the [FloatingActionButton] between [FloatingActionButtonLocation]s.\n\nThe [Scaffold] uses [Scaffold.floatingActionButtonAnimator] to define:\n\n * The [Offset] of the [FloatingActionButton] between the old and new\n [FloatingActionButtonLocation]s as part of the transition animation.\n * An [Animation] to scale the [FloatingActionButton] during the transition.\n * An [Animation] to rotate the [FloatingActionButton] during the transition.\n * Where to start a new animation from if an animation is interrupted.\n\nSee also:\n\n * [FloatingActionButton], which is a circular button typically shown in the\n bottom right corner of the app.\n * [FloatingActionButtonLocation], which the [Scaffold] uses to place the\n [Scaffold.floatingActionButton] within the [Scaffold]'s layout.",
"detail": "",
"kind": 7,
"label": "FloatingActionButtonAnimator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "RefreshIndicator",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that supports the Material \"swipe to refresh\" idiom.\n\nWhen the child's [Scrollable] descendant overscrolls, an animated circular\nprogress indicator is faded into view. When the scroll ends, if the\nindicator has been dragged far enough for it to become completely opaque,\nthe [onRefresh] callback is called. The callback is expected to update the\nscrollable's contents and then complete the [Future] it returns. The refresh\nindicator disappears after the callback's [Future] has completed.\n\nIf the [Scrollable] might not have enough content to overscroll, consider\nsettings its `physics` property to [AlwaysScrollableScrollPhysics]:\n\n```dart\nListView(\n physics: const AlwaysScrollableScrollPhysics(),\n children: ...\n```\n\nUsing [AlwaysScrollableScrollPhysics] will ensure that the scroll view is\nalways scrollable and, therefore, can trigger the [RefreshIndicator].\n\nA [RefreshIndicator] can only be used with a vertical scroll view.\n\nSee also:\n\n * <https://material.io/design/platform-guidance/android-swipe-to-refresh.html>\n * [RefreshIndicatorState], can be used to programmatically show the refresh indicator.\n * [RefreshProgressIndicator], widget used by [RefreshIndicator] to show\n the inner circular progress spinner during refreshes.\n * [CupertinoSliverRefreshControl], an iOS equivalent of the pull-to-refresh pattern.\n Must be used as a sliver inside a [CustomScrollView] instead of wrapping\n around a [ScrollView] because it's a part of the scrollable instead of\n being overlaid on top of it.",
"detail": "",
"kind": 7,
"label": "RefreshIndicator"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ReorderCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The callback used by [ReorderableListView] to move an item to a new\nposition in a list.\n\nImplementations should remove the corresponding list item at [oldIndex]\nand reinsert it at [newIndex].\n\nIf [oldIndex] is before [newIndex], removing the item at [oldIndex] from the\nlist will reduce the list's length by one. Implementations used by\n[ReorderableListView] will need to account for this when inserting before\n[newIndex].\n\n\n```dart\nfinal List<MyDataObject> backingList = <MyDataObject>[/* ... */];\n\nvoid handleReorder(int oldIndex, int newIndex) {\n if (oldIndex < newIndex) {\n // removing the item at oldIndex will shorten the list by 1.\n newIndex -= 1;\n }\n final MyDataObject element = backingList.removeAt(oldIndex);\n backingList.insert(newIndex, element);\n}\n```",
"detail": "(int oldIndex, int newIndex) → void",
"kind": 7,
"label": "ReorderCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimationMin",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An animation that tracks the minimum of two other animations.\n\nThe [value] of this animation is the maximum of the values of\n[first] and [next].",
"detail": "",
"kind": 7,
"label": "AnimationMin"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LongPressStartDetails",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Details for callbacks that use [GestureLongPressStartCallback].\n\nSee also:\n\n * [LongPressGestureRecognizer.onLongPressStart], which uses [GestureLongPressStartCallback].\n * [LongPressMoveUpdateDetails], the details for [GestureLongPressMoveUpdateCallback]\n * [LongPressEndDetails], the details for [GestureLongPressEndCallback].",
"detail": "",
"kind": 7,
"label": "LongPressStartDetails"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollbarPainter",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [CustomPainter] for painting scrollbars.\n\nUnlike [CustomPainter]s that subclasses [CustomPainter] and only repaint\nwhen [shouldRepaint] returns true (which requires this [CustomPainter] to\nbe rebuilt), this painter has the added optimization of repainting and not\nrebuilding when:\n\n * the scroll position changes; and\n * when the scrollbar fades away.\n\nCalling [update] with the new [ScrollMetrics] will repaint the new scrollbar\nposition.\n\nUpdating the value on the provided [fadeoutOpacityAnimation] will repaint\nwith the new opacity.\n\nYou must call [dispose] on this [ScrollbarPainter] when it's no longer used.\n\nSee also:\n\n * [Scrollbar] for a widget showing a scrollbar around a [Scrollable] in the\n Material Design style.\n * [CupertinoScrollbar] for a widget showing a scrollbar around a\n [Scrollable] in the iOS style.",
"detail": "",
"kind": 7,
"label": "ScrollbarPainter"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "VertexMode",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Defines how a list of points is interpreted when drawing a set of triangles.\n\nUsed by [Canvas.drawVertices].",
"detail": "",
"kind": 13,
"label": "VertexMode"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FadeUpwardsPageTransitionsBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Used by [PageTransitionsTheme] to define a default [MaterialPageRoute] page\ntransition animation.\n\nThe default animation fades the new page in while translating it upwards,\nstarting from about 25% below the top of the screen.\n\nSee also:\n\n * [OpenUpwardsPageTransitionsBuilder], which defines a page transition\n that's similar to the one provided by Android P.\n * [CupertinoPageTransitionsBuilder], which defines a horizontal page\n transition that matches native iOS page transitions.",
"detail": "",
"kind": 7,
"label": "FadeUpwardsPageTransitionsBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TabBar",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design widget that displays a horizontal row of tabs.\n\nTypically created as the [AppBar.bottom] part of an [AppBar] and in\nconjunction with a [TabBarView].\n\nIf a [TabController] is not provided, then a [DefaultTabController] ancestor\nmust be provided instead. The tab controller's [TabController.length] must\nequal the length of the [tabs] list.\n\nRequires one of its ancestors to be a [Material] widget.\n\nUses values from [TabBarTheme] if it is set in the current context.\n\nSee also:\n\n * [TabBarView], which displays page views that correspond to each tab.",
"detail": "",
"kind": 7,
"label": "TabBar"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ElasticOutCurve",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An oscillating curve that shrinks in magnitude while overshooting its bounds.\n\nAn instance of this class using the default period of 0.4 is available as\n[Curves.elasticOut].\n",
"detail": "",
"kind": 7,
"label": "ElasticOutCurve"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedListItemBuilder",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for the builder callback used by [AnimatedList].",
"detail": "(BuildContext context, int index, Animation<double> animation) → Widget",
"kind": 7,
"label": "AnimatedListItemBuilder"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextSelectionControls",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface for building the selection UI, to be provided by the\nimplementor of the toolbar widget.\n\nOverride text operations such as [handleCut] if needed.",
"detail": "",
"kind": 7,
"label": "TextSelectionControls"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FadeTransition",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animates the opacity of a widget.\n\nFor a widget that automatically animates between the sizes of two children,\nfading between them, see [AnimatedCrossFade].\n\n\nHere's an illustration of the [FadeTransition] widget, with it's [opacity]\nanimated by a [CurvedAnimation] set to [Curves.fastOutSlowIn]:",
"detail": "",
"kind": 7,
"label": "FadeTransition"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "LocalKey",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A key that is not a [GlobalKey].\n\nKeys must be unique amongst the [Element]s with the same parent. By\ncontrast, [GlobalKey]s must be unique across the entire app.\n\nSee also the discussion at [Widget.key].",
"detail": "",
"kind": 7,
"label": "LocalKey"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Paint",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A description of the style to use when drawing on a [Canvas].\n\nMost APIs on [Canvas] take a [Paint] object to describe the style\nto use for that operation.",
"detail": "",
"kind": 7,
"label": "Paint"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "NotificationListener",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that listens for [Notification]s bubbling up the tree.\n\nNotifications will trigger the [onNotification] callback only if their\n[runtimeType] is a subtype of `T`.\n\nTo dispatch notifications, use the [Notification.dispatch] method.",
"detail": "",
"kind": 7,
"label": "NotificationListener"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PageScrollPhysics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Scroll physics used by a [PageView].\n\nThese physics cause the page view to snap to page boundaries.\n\nSee also:\n\n * [ScrollPhysics], the base class which defines the API for scrolling\n physics.\n * [PageView.physics], which can override the physics used by a page view.",
"detail": "",
"kind": 7,
"label": "PageScrollPhysics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FixedExtentMetrics",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Metrics for a [ScrollPosition] to a scroll view with fixed item sizes.\n\nThe metrics are available on [ScrollNotification]s generated from a scroll\nviews such as [ListWheelScrollView]s with a [FixedExtentScrollController] and\nexposes the current [itemIndex] and the scroll view's [itemExtent].\n\n`FixedExtent` refers to the fact that the scrollable items have the same size.\nThis is distinct from `Fixed` in the parent class name's [FixedScrollMetric]\nwhich refers to its immutability.",
"detail": "",
"kind": 7,
"label": "FixedExtentMetrics"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Shader",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Base class for objects such as [Gradient] and [ImageShader] which\ncorrespond to shaders as used by [Paint.shader].",
"detail": "",
"kind": 7,
"label": "Shader"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "GestureScaleEndCallback",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Signature for when the pointers are no longer in contact with the screen.",
"detail": "(ScaleEndDetails details) → void",
"kind": 7,
"label": "GestureScaleEndCallback"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "FontStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Whether to slant the glyphs in the font",
"detail": "",
"kind": 13,
"label": "FontStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "PathOperation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Strategies for combining paths.\n\nSee also:\n\n* [Path.combine], which uses this enum to decide how to combine two paths.",
"detail": "",
"kind": 13,
"label": "PathOperation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "CustomClipper",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An interface for providing custom clips.\n\nThis class is used by a number of clip widgets (e.g., [ClipRect] and\n[ClipPath]).\n\nThe [getClip] method is called whenever the custom clip needs to be updated.\n\nThe [shouldReclip] method is called when a new instance of the class\nis provided, to check if the new instance actually represents different\ninformation.\n\nThe most efficient way to update the clip provided by this class is to\nsupply a `reclip` argument to the constructor of the [CustomClipper]. The\ncustom object will listen to this animation and update the clip whenever the\nanimation ticks, avoiding both the build and layout phases of the pipeline.\n\nSee also:\n\n * [ClipRect], which can be customized with a [CustomClipper<Rect>].\n * [ClipRRect], which can be customized with a [CustomClipper<RRect>].\n * [ClipOval], which can be customized with a [CustomClipper<Rect>].\n * [ClipPath], which can be customized with a [CustomClipper<Path>].\n * [ShapeBorderClipper], for specifying a clip path using a [ShapeBorder].",
"detail": "",
"kind": 7,
"label": "CustomClipper"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TimeOfDay",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A value representing a time during the day, independent of the date that\nday might fall on or the time zone.\n\nThe time is represented by [hour] and [minute] pair. Once created, both\nvalues cannot be changed.\n\nYou can create TimeOfDay using the constructor which requires both hour and\nminute or using [DateTime] object.\nHours are specified between 0 and 23, as in a 24-hour clock.\n\n\n```dart\nTimeOfDay now = TimeOfDay.now();\nTimeOfDay releaseTime = TimeOfDay(hour: 15, minute: 0); // 3:00pm\nTimeOfDay roomBooked = TimeOfDay.fromDateTime(DateTime.parse('2018-10-20 16:30:04Z')); // 4:30pm\n```\n\nSee also:\n\n * [showTimePicker], which returns this type.\n * [MaterialLocalizations], which provides methods for formatting values of\n this type according to the chosen [Locale].\n * [DateTime], which represents date and time, and is subject to eras and\n time zones.",
"detail": "",
"kind": 7,
"label": "TimeOfDay"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedCrossFade",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that cross-fades between two given children and animates itself\nbetween their sizes.\n\nThe animation is controlled through the [crossFadeState] parameter.\n[firstCurve] and [secondCurve] represent the opacity curves of the two\nchildren. The [firstCurve] is inverted, i.e. it fades out when providing a\ngrowing curve like [Curves.linear]. The [sizeCurve] is the curve used to\nanimate between the size of the fading-out child and the size of the\nfading-in child.\n\nThis widget is intended to be used to fade a pair of widgets with the same\nwidth. In the case where the two children have different heights, the\nanimation crops overflowing children during the animation by aligning their\ntop edge, which means that the bottom will be clipped.\n\nThe animation is automatically triggered when an existing\n[AnimatedCrossFade] is rebuilt with a different value for the\n[crossFadeState] property.\n\n\nThis code fades between two representations of the Flutter logo. It depends\non a boolean field `_first`; when `_first` is true, the first logo is shown,\notherwise the second logo is shown. When the field changes state, the\n[AnimatedCrossFade] widget cross-fades between the two forms of the logo\nover three seconds.\n\n```dart\nAnimatedCrossFade(\n duration: const Duration(seconds: 3),\n firstChild: const FlutterLogo(style: FlutterLogoStyle.horizontal, size: 100.0),\n secondChild: const FlutterLogo(style: FlutterLogoStyle.stacked, size: 100.0),\n crossFadeState: _first ? CrossFadeState.showFirst : CrossFadeState.showSecond,\n)\n```\n\nSee also:\n\n * [AnimatedSize], the lower-level widget which [AnimatedCrossFade] uses to\n automatically change size.\n * [AnimatedSwitcher], which switches out a child for a new one with a\n customizable transition.",
"detail": "",
"kind": 7,
"label": "AnimatedCrossFade"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScriptCategory",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A characterization of the of a [TextTheme]'s glyphs that is used to define\nits localized [TextStyle] geometry for [ThemeData.textTheme].\n\nThe script category defines the overall geometry of a [TextTheme] for\nthe static [MaterialTextGeometry.localizedFor] method in terms of the\nthree language categories defined in <https://material.io/go/design-typography>.\n\nGenerally speaking, font sizes for [ScriptCategory.tall] and\n[ScriptCategory.dense] scripts - for text styles that are smaller than the\ntitle style - are one unit larger than they are for\n[ScriptCategory.englishLike] scripts.",
"detail": "",
"kind": 13,
"label": "ScriptCategory"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Tooltip",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A material design tooltip.\n\nTooltips provide text labels that help explain the function of a button or\nother user interface action. Wrap the button in a [Tooltip] widget to\nshow a label when the widget long pressed (or when the user takes some\nother appropriate action).\n\n\nMany widgets, such as [IconButton], [FloatingActionButton], and\n[PopupMenuButton] have a `tooltip` property that, when non-null, causes the\nwidget to include a [Tooltip] in its build.\n\nTooltips improve the accessibility of visual widgets by proving a textual\nrepresentation of the widget, which, for example, can be vocalized by a\nscreen reader.\n\nSee also:\n\n * <https://material.io/design/components/tooltips.html>",
"detail": "",
"kind": 7,
"label": "Tooltip"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "DrivenScrollActivity",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An activity that animates a scroll view based on animation parameters.\n\nFor example, a [DrivenScrollActivity] is used to implement\n[ScrollController.animateTo].\n\nSee also:\n\n * [BallisticScrollActivity], which animates a scroll view based on a\n physics [Simulation].",
"detail": "",
"kind": 7,
"label": "DrivenScrollActivity"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Spacer",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Spacer creates an adjustable, empty spacer that can be used to tune the\nspacing between widgets in a [Flex] container, like [Row] or [Column].\n\nThe [Spacer] widget will take up any available space, so setting the\n[Flex.mainAxisAlignment] on a flex container that contains a [Spacer] to\n[MainAxisAlignment.spaceAround], [MainAxisAlignment.spaceBetween], or\n[MainAxisAlignment.spaceEvenly] will not have any visible effect: the\n[Spacer] has taken up all of the additional space, therefore there is none\nleft to redistribute.\n\n\n```dart\nRow(\n children: <Widget>[\n Text('Begin'),\n Spacer(), // Defaults to a flex of one.\n Text('Middle'),\n // Gives twice the space between Middle and End than Begin and Middle.\n Spacer(flex: 2),\n Text('End'),\n ],\n)\n```\n\nSee also:\n\n * [Row] and [Column], which are the most common containers to use a Spacer\n in.\n * [SizedBox], to create a box with a specific size and an optional child.",
"detail": "",
"kind": 7,
"label": "Spacer"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ScrollStartNotification",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A notification that a [Scrollable] widget has started scrolling.\n\nSee also:\n\n * [ScrollEndNotification], which indicates that scrolling has stopped.\n * [ScrollNotification], which describes the notification lifecycle.",
"detail": "",
"kind": 7,
"label": "ScrollStartNotification"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "Simulation",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The base class for all simulations.\n\nA simulation models an object, in a one-dimensional space, on which particular\nforces are being applied, and exposes:\n\n * The object's position, [x]\n * The object's velocity, [dx]\n * Whether the simulation is \"done\", [isDone]\n\nA simulation is generally \"done\" if the object has, to a given [tolerance],\ncome to a complete rest.\n\nThe [x], [dx], and [isDone] functions take a time argument which specifies\nthe time for which they are to be evaluated. In principle, simulations can\nbe stateless, and thus can be queried with arbitrary times. In practice,\nhowever, some simulations are not, and calling any of these functions will\nadvance the simulation to the given time.\n\nAs a general rule, therefore, a simulation should only be queried using\ntimes that are equal to or greater than all times previously used for that\nsimulation.\n\nSimulations do not specify units for distance, velocity, and time. Client\nshould establish a convention and use that convention consistently with all\nrelated objects.",
"detail": "",
"kind": 7,
"label": "Simulation"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "KeepAliveHandle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A [Listenable] which can be manually triggered.\n\nUsed with [KeepAliveNotification] objects as their\n[KeepAliveNotification.handle].\n\nFor a more convenient way to interact with [AutomaticKeepAlive] widgets,\nconsider using [AutomaticKeepAliveClientMixin], which uses a\n[KeepAliveHandle] internally.",
"detail": "",
"kind": 7,
"label": "KeepAliveHandle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "SafeArea",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "A widget that insets its child by sufficient padding to avoid intrusions by\nthe operating system.\n\nFor example, this will indent the child by enough to avoid the status bar at\nthe top of the screen.\n\nIt will also indent the child by the amount necessary to avoid The Notch on\nthe iPhone X, or other similar creative physical features of the display.\n\nWhen a [minimum] padding is specified, the greater of the minimum padding\nor the safe area padding will be applied.\n\n\nSee also:\n\n * [SliverSafeArea], for insetting slivers to avoid operating system\n intrusions.\n * [Padding], for insetting widgets in general.\n * [MediaQuery], from which the window padding is obtained.\n * [dart:ui.Window.padding], which reports the padding from the operating\n system.",
"detail": "",
"kind": 7,
"label": "SafeArea"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "TextDecorationStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "The style in which to draw a text decoration",
"detail": "",
"kind": 13,
"label": "TextDecorationStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ListTileControlAffinity",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Where to place the control in widgets that use [ListTile] to position a\ncontrol next to a label.\n\nSee also:\n\n * [CheckboxListTile], which combines a [ListTile] with a [Checkbox].\n * [RadioListTile], which combines a [ListTile] with a [Radio] button.",
"detail": "",
"kind": 13,
"label": "ListTileControlAffinity"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "AnimatedDefaultTextStyle",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "Animated version of [DefaultTextStyle] which automatically transitions the\ndefault text style (the text style to apply to descendant [Text] widgets\nwithout explicit style) over a given duration whenever the given style\nchanges.\n\nThe [textAlign], [softWrap], [textOverflow], and [maxLines] properties are\nnot animated and take effect immediately when changed.\n\nHere's an illustration of what using this widget looks like, using a [curve]\nof [Curves.elasticInOut].",
"detail": "",
"kind": 7,
"label": "AnimatedDefaultTextStyle"
},
{
"data": {
"autoImportDisplayUri": "package:flutter/material.dart",
"libraryId": 433,
"offset": 2682,
"file": "/Users/s04407/OSS/flutter_compass/lib/main.dart"
},
"commitCharacters": [],
"additionalTextEdits": [],
"textEdit": {
"newText": "ComponentElement",
"range": {
"end": {
"character": 5,
"line": 96
},
"start": {
"character": 2,
"line": 96
}
}
},
"insertTextFormat": 1,
"sortText": "999993",
"preselect": null,
"documentation": "An [Element] that composes other [Element]s.\n\nRather than creating a [RenderObject] directly, a [ComponentElement] creates\n[RenderObject]s indirectly by creating other [Element]s.\n\nContrast with [RenderObjectElement].",
"detail": "",
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment