mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Spelling (#15229)
* spelling: accommodate * spelling: allotted * spelling: anonymous * spelling: artificial * spelling: associated * spelling: asset * spelling: button * spelling: canvas * spelling: compatibility * spelling: coverage * spelling: condition * spelling: decoration * spelling: deferring * spelling: diameter * spelling: direction * spelling: displacement * spelling: dropdown * spelling: needing * spelling: environment * spelling: exited * spelling: expansion * spelling: explore * spelling: families * spelling: horizontal * spelling: increment * spelling: indices * spelling: internationalization * spelling: labrador * spelling: localizations * spelling: midflight * spelling: milliseconds * spelling: minimum * spelling: multiple * spelling: multiplication * spelling: navigator * spelling: overridden * spelling: package * spelling: performance * spelling: platform * spelling: porsche * spelling: position * spelling: preceded * spelling: precede * spelling: precedence * spelling: print * spelling: property * spelling: readily * spelling: reproducibility * spelling: rounded * spelling: scroll * spelling: separate * spelling: separator * spelling: services * spelling: specific * spelling: specify * spelling: synchronously * spelling: through * spelling: timeout * spelling: triangle * spelling: trivial * spelling: unusual * spelling: then * spelling: vertically * spelling: visible * spelling: visited * spelling: voice
This commit is contained in:
parent
d0cbbd5394
commit
c5a5945e92
@ -44,7 +44,7 @@ public class MainActivity extends FlutterActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Outgoing ByteBuffer messages must be direct-allocated and payload placed between
|
// Outgoing ByteBuffer messages must be direct-allocated and payload placed between
|
||||||
// positon 0 and current position.
|
// position 0 and current position.
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private <T> T echo(T message) {
|
private <T> T echo(T message) {
|
||||||
if (message instanceof ByteBuffer) {
|
if (message instanceof ByteBuffer) {
|
||||||
|
@ -124,7 +124,7 @@ class _FuzzerState extends State<Fuzzer> with SingleTickerProviderStateMixin {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_random = new math.Random(widget.seed); // providing a seed is important for reproducability
|
_random = new math.Random(widget.seed); // providing a seed is important for reproducibility
|
||||||
_ticker = createTicker(_updateTextSpan)..start();
|
_ticker = createTicker(_updateTextSpan)..start();
|
||||||
_updateTextSpan(null);
|
_updateTextSpan(null);
|
||||||
}
|
}
|
||||||
@ -798,7 +798,7 @@ class _ZalgoState extends State<Zalgo> with SingleTickerProviderStateMixin {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_random = new math.Random(widget.seed); // providing a seed is important for reproducability
|
_random = new math.Random(widget.seed); // providing a seed is important for reproducibility
|
||||||
_ticker = createTicker(_update)..start();
|
_ticker = createTicker(_update)..start();
|
||||||
_update(null);
|
_update(null);
|
||||||
}
|
}
|
||||||
@ -865,7 +865,7 @@ class _ZalgoState extends State<Zalgo> with SingleTickerProviderStateMixin {
|
|||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_allowSpacing = value;
|
_allowSpacing = value;
|
||||||
_random = new math.Random(widget.seed); // reset for reproducability
|
_random = new math.Random(widget.seed); // reset for reproducibility
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -875,7 +875,7 @@ class _ZalgoState extends State<Zalgo> with SingleTickerProviderStateMixin {
|
|||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_varyBase = value;
|
_varyBase = value;
|
||||||
_random = new math.Random(widget.seed); // reset for reproducability
|
_random = new math.Random(widget.seed); // reset for reproducibility
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -905,7 +905,7 @@ class _PaintingState extends State<Painting> with SingleTickerProviderStateMixin
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_random = new math.Random(widget.seed); // providing a seed is important for reproducability
|
_random = new math.Random(widget.seed); // providing a seed is important for reproducibility
|
||||||
_ticker = createTicker(_update)..start();
|
_ticker = createTicker(_update)..start();
|
||||||
_update(null);
|
_update(null);
|
||||||
}
|
}
|
||||||
@ -1027,7 +1027,7 @@ class _PaintingState extends State<Painting> with SingleTickerProviderStateMixin
|
|||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_ellipsize = value;
|
_ellipsize = value;
|
||||||
_random = new math.Random(widget.seed); // reset for reproducability
|
_random = new math.Random(widget.seed); // reset for reproducibility
|
||||||
if (!_ticker.isActive)
|
if (!_ticker.isActive)
|
||||||
_update(null);
|
_update(null);
|
||||||
});
|
});
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
test('Trival test', () {
|
test('Trivial test', () {
|
||||||
expect(42, 42);
|
expect(42, 42);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ Future<Null> main(List<String> arguments) async {
|
|||||||
'--exclude-packages',
|
'--exclude-packages',
|
||||||
'analyzer,args,barback,cli_util,csslib,front_end,glob,html,http_multi_server,io,isolate,js,kernel,logging,mime,mockito,node_preamble,plugin,shelf,shelf_packages_handler,shelf_static,shelf_web_socket,utf,watcher,yaml',
|
'analyzer,args,barback,cli_util,csslib,front_end,glob,html,http_multi_server,io,isolate,js,kernel,logging,mime,mockito,node_preamble,plugin,shelf,shelf_packages_handler,shelf_static,shelf_web_socket,utf,watcher,yaml',
|
||||||
'--exclude',
|
'--exclude',
|
||||||
'package:Flutter/temp_doc.dart,package:http/browser_client.dart,package:intl/intl_browser.dart,package:matcher/mirror_matchers.dart,package:quiver/mirrors.dart,pacakge:quiver/io.dart,package:vm_service_client/vm_service_client.dart,package:web_socket_channel/html.dart',
|
'package:Flutter/temp_doc.dart,package:http/browser_client.dart,package:intl/intl_browser.dart,package:matcher/mirror_matchers.dart,package:quiver/mirrors.dart,package:quiver/io.dart,package:vm_service_client/vm_service_client.dart,package:web_socket_channel/html.dart',
|
||||||
'--favicon=favicon.ico',
|
'--favicon=favicon.ico',
|
||||||
'--use-categories',
|
'--use-categories',
|
||||||
'--category-order', 'flutter,Dart Core,flutter_test,flutter_driver',
|
'--category-order', 'flutter,Dart Core,flutter_test,flutter_driver',
|
||||||
|
@ -192,7 +192,7 @@ ProcessResult _runGit(String command) {
|
|||||||
|
|
||||||
void _reportGitFailureAndExit(ProcessResult result, String explanation) {
|
void _reportGitFailureAndExit(ProcessResult result, String explanation) {
|
||||||
if (result.exitCode != 0) {
|
if (result.exitCode != 0) {
|
||||||
print('Failed to $explanation. Git exitted with error code ${result.exitCode}.');
|
print('Failed to $explanation. Git exited with error code ${result.exitCode}.');
|
||||||
} else {
|
} else {
|
||||||
print('Failed to $explanation.');
|
print('Failed to $explanation.');
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ Summary: A basic AppBar with a title, actions, and an overflow dropdown menu.
|
|||||||
Description:
|
Description:
|
||||||
An app that displays one of a half dozen choices with an icon and a title.
|
An app that displays one of a half dozen choices with an icon and a title.
|
||||||
The two most common choices are available as action buttons and the remaining
|
The two most common choices are available as action buttons and the remaining
|
||||||
choices are included in the overflow dropdow menu.
|
choices are included in the overflow dropdown menu.
|
||||||
|
|
||||||
Classes: AppBar, IconButton, PopupMenuButton, Scaffold
|
Classes: AppBar, IconButton, PopupMenuButton, Scaffold
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ void main() {
|
|||||||
app_bar_bottom_sample.main();
|
app_bar_bottom_sample.main();
|
||||||
await tester.pump();
|
await tester.pump();
|
||||||
|
|
||||||
// Cycle throught the choices using the forward and backwards arrows.
|
// Cycle through the choices using the forward and backwards arrows.
|
||||||
|
|
||||||
final Finder nextChoice = find.byTooltip('Next choice');
|
final Finder nextChoice = find.byTooltip('Next choice');
|
||||||
for (int i = 0; i < choiceCount; i += 1) {
|
for (int i = 0; i < choiceCount; i += 1) {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||||
|
|
||||||
def parse_KV_file(file,seperator='=')
|
def parse_KV_file(file,separator='=')
|
||||||
file_abs_path = File.expand_path(file)
|
file_abs_path = File.expand_path(file)
|
||||||
if !File.exists? file_abs_path
|
if !File.exists? file_abs_path
|
||||||
return [];
|
return [];
|
||||||
@ -13,7 +13,7 @@ def parse_KV_file(file,seperator='=')
|
|||||||
skip_line_start_symbols = ["#", "/"]
|
skip_line_start_symbols = ["#", "/"]
|
||||||
File.foreach(file_abs_path) { |line|
|
File.foreach(file_abs_path) { |line|
|
||||||
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
|
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
|
||||||
plugin = line.split(pattern=seperator)
|
plugin = line.split(pattern=separator)
|
||||||
if plugin.length == 2
|
if plugin.length == 2
|
||||||
podname = plugin[0].strip()
|
podname = plugin[0].strip()
|
||||||
path = plugin[1].strip()
|
path = plugin[1].strip()
|
||||||
|
@ -284,7 +284,7 @@ class CalcExpression {
|
|||||||
final List<ExpressionToken> list = _list.toList();
|
final List<ExpressionToken> list = _list.toList();
|
||||||
// We obey order-of-operations by computing the sum of the 'terms',
|
// We obey order-of-operations by computing the sum of the 'terms',
|
||||||
// where a "term" is defined to be a sequence of numbers separated by
|
// where a "term" is defined to be a sequence of numbers separated by
|
||||||
// multiplcation or division symbols.
|
// multiplication or division symbols.
|
||||||
num currentTermValue = removeNextTerm(list);
|
num currentTermValue = removeNextTerm(list);
|
||||||
while (list.isNotEmpty) {
|
while (list.isNotEmpty) {
|
||||||
final OperationToken opToken = list.removeAt(0);
|
final OperationToken opToken = list.removeAt(0);
|
||||||
|
@ -24,7 +24,7 @@ const List<Color> coolColors = const <Color>[
|
|||||||
const List<String> coolColorNames = const <String>[
|
const List<String> coolColorNames = const <String>[
|
||||||
'Sarcoline', 'Coquelicot', 'Smaragdine', 'Mikado', 'Glaucous', 'Wenge',
|
'Sarcoline', 'Coquelicot', 'Smaragdine', 'Mikado', 'Glaucous', 'Wenge',
|
||||||
'Fulvous', 'Xanadu', 'Falu', 'Eburnean', 'Amaranth', 'Australien',
|
'Fulvous', 'Xanadu', 'Falu', 'Eburnean', 'Amaranth', 'Australien',
|
||||||
'Banan', 'Falu', 'Gingerline', 'Incarnadine', 'Labrabor', 'Nattier',
|
'Banan', 'Falu', 'Gingerline', 'Incarnadine', 'Labrador', 'Nattier',
|
||||||
'Pervenche', 'Sinoper', 'Verditer', 'Watchet', 'Zaffre',
|
'Pervenche', 'Sinoper', 'Verditer', 'Watchet', 'Zaffre',
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -678,7 +678,7 @@ List<Widget> buildTab2Conversation() {
|
|||||||
text: 'SJ',
|
text: 'SJ',
|
||||||
color: const Color(0xFF34CAD6),
|
color: const Color(0xFF34CAD6),
|
||||||
),
|
),
|
||||||
text: "We'll send you our\nnewest Labrabor too!",
|
text: "We'll send you our\nnewest Labrador too!",
|
||||||
),
|
),
|
||||||
const Tab2ConversationRow(
|
const Tab2ConversationRow(
|
||||||
text: 'Yay',
|
text: 'Yay',
|
||||||
|
@ -97,7 +97,7 @@ class TravelDestinationItem extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// description and share/expore buttons
|
// description and share/explore buttons
|
||||||
new Expanded(
|
new Expanded(
|
||||||
child: new Padding(
|
child: new Padding(
|
||||||
padding: const EdgeInsets.fromLTRB(16.0, 16.0, 16.0, 0.0),
|
padding: const EdgeInsets.fromLTRB(16.0, 16.0, 16.0, 0.0),
|
||||||
|
@ -16,7 +16,7 @@ enum DialogDemoAction {
|
|||||||
const String _alertWithoutTitleText = 'Discard draft?';
|
const String _alertWithoutTitleText = 'Discard draft?';
|
||||||
|
|
||||||
const String _alertWithTitleText =
|
const String _alertWithTitleText =
|
||||||
'Let Google help apps determine location. This means sending anyonmous location '
|
'Let Google help apps determine location. This means sending anonymous location '
|
||||||
'data to Google, even when no apps are running.';
|
'data to Google, even when no apps are running.';
|
||||||
|
|
||||||
class DialogDemoItem extends StatelessWidget {
|
class DialogDemoItem extends StatelessWidget {
|
||||||
|
@ -172,14 +172,14 @@ class DemoItem<T> {
|
|||||||
Widget build() => builder(this);
|
Widget build() => builder(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExpasionPanelsDemo extends StatefulWidget {
|
class ExpansionPanelsDemo extends StatefulWidget {
|
||||||
static const String routeName = '/material/expansion_panels';
|
static const String routeName = '/material/expansion_panels';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_ExpansionPanelsDemoState createState() => new _ExpansionPanelsDemoState();
|
_ExpansionPanelsDemoState createState() => new _ExpansionPanelsDemoState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ExpansionPanelsDemoState extends State<ExpasionPanelsDemo> {
|
class _ExpansionPanelsDemoState extends State<ExpansionPanelsDemo> {
|
||||||
List<DemoItem<dynamic>> _demoItems;
|
List<DemoItem<dynamic>> _demoItems;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -147,7 +147,7 @@ class LeaveBehindDemoState extends State<LeaveBehindDemo> {
|
|||||||
new CheckedPopupMenuItem<LeaveBehindDemoAction>(
|
new CheckedPopupMenuItem<LeaveBehindDemoAction>(
|
||||||
value: LeaveBehindDemoAction.horizontalSwipe,
|
value: LeaveBehindDemoAction.horizontalSwipe,
|
||||||
checked: _dismissDirection == DismissDirection.horizontal,
|
checked: _dismissDirection == DismissDirection.horizontal,
|
||||||
child: const Text('Hoizontal swipe')
|
child: const Text('Horizontal swipe')
|
||||||
),
|
),
|
||||||
new CheckedPopupMenuItem<LeaveBehindDemoAction>(
|
new CheckedPopupMenuItem<LeaveBehindDemoAction>(
|
||||||
value: LeaveBehindDemoAction.leftSwipe,
|
value: LeaveBehindDemoAction.leftSwipe,
|
||||||
|
@ -279,7 +279,7 @@ const List<Product> _allProducts = const <Product> [
|
|||||||
vendor: _stella,
|
vendor: _stella,
|
||||||
description:
|
description:
|
||||||
'Who says you can’t walk on water? With Surfboard, by Surfboard Supply, '
|
'Who says you can’t walk on water? With Surfboard, by Surfboard Supply, '
|
||||||
'you can fly on water. This beast is fast and handles like a porsche. '
|
'you can fly on water. This beast is fast and handles like a Porsche. '
|
||||||
'Hang Ten Bro!'
|
'Hang Ten Bro!'
|
||||||
)
|
)
|
||||||
];
|
];
|
||||||
|
@ -148,8 +148,8 @@ List<GalleryItem> _buildGalleryItems() {
|
|||||||
title: 'Expansion panels',
|
title: 'Expansion panels',
|
||||||
subtitle: 'List of expanding panels',
|
subtitle: 'List of expanding panels',
|
||||||
category: 'Material Components',
|
category: 'Material Components',
|
||||||
routeName: ExpasionPanelsDemo.routeName,
|
routeName: ExpansionPanelsDemo.routeName,
|
||||||
buildRoute: (BuildContext context) => new ExpasionPanelsDemo(),
|
buildRoute: (BuildContext context) => new ExpansionPanelsDemo(),
|
||||||
),
|
),
|
||||||
new GalleryItem(
|
new GalleryItem(
|
||||||
title: 'Floating action button',
|
title: 'Floating action button',
|
||||||
|
@ -30,7 +30,7 @@ void main() {
|
|||||||
await driver.tap(find.text('Components'));
|
await driver.tap(find.text('Components'));
|
||||||
await driver.tap(find.text('Style'));
|
await driver.tap(find.text('Style'));
|
||||||
|
|
||||||
// TODO(eseidel): These are very artifical scrolls, we should use better
|
// TODO(eseidel): These are very artificial scrolls, we should use better
|
||||||
// https://github.com/flutter/flutter/issues/3316
|
// https://github.com/flutter/flutter/issues/3316
|
||||||
// Scroll down
|
// Scroll down
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
|
@ -90,7 +90,7 @@
|
|||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NLS-lx-anZ" userLabel="Top">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NLS-lx-anZ" userLabel="Top">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="264"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="264"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Flutter button tapped 0 times." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PJ2-AA-Riy" userLabel="IncremetLabel">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Flutter button tapped 0 times." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PJ2-AA-Riy" userLabel="IncrementLabel">
|
||||||
<rect key="frame" x="73" y="122" width="229" height="21"/>
|
<rect key="frame" x="73" y="122" width="229" height="21"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
@ -86,7 +86,7 @@ class RenderDots extends RenderBox {
|
|||||||
void paint(PaintingContext context, Offset offset) {
|
void paint(PaintingContext context, Offset offset) {
|
||||||
final Canvas canvas = context.canvas;
|
final Canvas canvas = context.canvas;
|
||||||
// The "size" property indicates the size of that this render box was
|
// The "size" property indicates the size of that this render box was
|
||||||
// alotted during layout. Here we paint our bounds white. Notice that we're
|
// allotted during layout. Here we paint our bounds white. Notice that we're
|
||||||
// located at "offset" from the origin of the canvas' coordinate system.
|
// located at "offset" from the origin of the canvas' coordinate system.
|
||||||
// Passing offset during the render tree's paint walk is an optimization to
|
// Passing offset during the render tree's paint walk is an optimization to
|
||||||
// avoid having to change the origin of the canvas's coordinate system too
|
// avoid having to change the origin of the canvas's coordinate system too
|
||||||
|
@ -20,7 +20,7 @@ the [Flutter Setup](https://flutter.io/setup/) guide.
|
|||||||
|
|
||||||
The `flutter run --release` command both builds and installs the Flutter app.
|
The `flutter run --release` command both builds and installs the Flutter app.
|
||||||
|
|
||||||
## Interationalization
|
## Internationalization
|
||||||
|
|
||||||
This app has been internationalized (just enough to show how it's
|
This app has been internationalized (just enough to show how it's
|
||||||
done). It's an example of how one can do so with the
|
done). It's an example of how one can do so with the
|
||||||
@ -30,7 +30,7 @@ The [Flutter Internationalization Tutorial](https://flutter.io/tutorials/interna
|
|||||||
covers Flutter app internationalization in general.
|
covers Flutter app internationalization in general.
|
||||||
|
|
||||||
See [regenerate.md](lib/i18n/regenerate.md) for an explanation
|
See [regenerate.md](lib/i18n/regenerate.md) for an explanation
|
||||||
of how the Dart interationalization tools, like
|
of how the Dart internationalization tools, like
|
||||||
`intl_translation:generate_from_arb`, were used to generate
|
`intl_translation:generate_from_arb`, were used to generate
|
||||||
localizations for this app.
|
localizations for this app.
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ class AnimatedIcon extends StatelessWidget {
|
|||||||
///
|
///
|
||||||
/// If this is null, the ambient [Directionality] is used instead.
|
/// If this is null, the ambient [Directionality] is used instead.
|
||||||
///
|
///
|
||||||
/// If the text diection is [TextDirection.rtl], the icon will be mirrored
|
/// If the text direction is [TextDirection.rtl], the icon will be mirrored
|
||||||
/// horizontally (e.g back arrow will point right).
|
/// horizontally (e.g back arrow will point right).
|
||||||
final TextDirection textDirection;
|
final TextDirection textDirection;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ enum ButtonTextTheme {
|
|||||||
/// Used with [ButtonThemeData] to configure the color and geometry of buttons.
|
/// Used with [ButtonThemeData] to configure the color and geometry of buttons.
|
||||||
///
|
///
|
||||||
/// A button theme can be specified as part of the overall Material theme
|
/// A button theme can be specified as part of the overall Material theme
|
||||||
/// using [ThemeData.buttomTheme]. The Material theme's button theme data
|
/// using [ThemeData.buttonTheme]. The Material theme's button theme data
|
||||||
/// can be overridden with [ButtonTheme].
|
/// can be overridden with [ButtonTheme].
|
||||||
///
|
///
|
||||||
/// The actual appearance of buttons depends on the button theme, the
|
/// The actual appearance of buttons depends on the button theme, the
|
||||||
@ -139,7 +139,7 @@ class ButtonTheme extends InheritedWidget {
|
|||||||
/// Used with [ButtonTheme] to configure the color and geometry of buttons.
|
/// Used with [ButtonTheme] to configure the color and geometry of buttons.
|
||||||
///
|
///
|
||||||
/// A button theme can be specified as part of the overall Material theme
|
/// A button theme can be specified as part of the overall Material theme
|
||||||
/// using [ThemeData.buttomTheme]. The Material theme's button theme data
|
/// using [ThemeData.buttonTheme]. The Material theme's button theme data
|
||||||
/// can be overridden with [ButtonTheme].
|
/// can be overridden with [ButtonTheme].
|
||||||
class ButtonThemeData extends Diagnosticable {
|
class ButtonThemeData extends Diagnosticable {
|
||||||
/// Create a button theme object that can be used with [ButtonTheme]
|
/// Create a button theme object that can be used with [ButtonTheme]
|
||||||
|
@ -99,7 +99,7 @@ import 'material.dart';
|
|||||||
/// See also:
|
/// See also:
|
||||||
///
|
///
|
||||||
/// * [Container], a more generic form of this widget which paints itself,
|
/// * [Container], a more generic form of this widget which paints itself,
|
||||||
/// rather that defering to the nearest [Material] widget.
|
/// rather that deferring to the nearest [Material] widget.
|
||||||
/// * [InkDecoration], the [InkFeature] subclass used by this widget to paint
|
/// * [InkDecoration], the [InkFeature] subclass used by this widget to paint
|
||||||
/// on [Material] widgets.
|
/// on [Material] widgets.
|
||||||
/// * [InkWell] and [InkResponse], which also draw on [Material] widgets.
|
/// * [InkWell] and [InkResponse], which also draw on [Material] widgets.
|
||||||
|
@ -141,7 +141,7 @@ class InkRipple extends InteractiveInkFeature {
|
|||||||
_radiusController = new AnimationController(duration: _kUnconfirmedRippleDuration, vsync: controller.vsync)
|
_radiusController = new AnimationController(duration: _kUnconfirmedRippleDuration, vsync: controller.vsync)
|
||||||
..addListener(controller.markNeedsPaint)
|
..addListener(controller.markNeedsPaint)
|
||||||
..forward();
|
..forward();
|
||||||
// Initial splash diamater is 60% of the target diameter, final
|
// Initial splash diameter is 60% of the target diameter, final
|
||||||
// diameter is 10dps larger than the target diameter.
|
// diameter is 10dps larger than the target diameter.
|
||||||
_radius = new Tween<double>(
|
_radius = new Tween<double>(
|
||||||
begin: _targetRadius * 0.30,
|
begin: _targetRadius * 0.30,
|
||||||
@ -190,7 +190,7 @@ class InkRipple extends InteractiveInkFeature {
|
|||||||
_radiusController
|
_radiusController
|
||||||
..duration = _kRadiusDuration
|
..duration = _kRadiusDuration
|
||||||
..forward();
|
..forward();
|
||||||
// This confirm may have been preceeded by a cancel.
|
// This confirm may have been preceded by a cancel.
|
||||||
_fadeInController.forward();
|
_fadeInController.forward();
|
||||||
_fadeOutController
|
_fadeOutController
|
||||||
..animateTo(1.0, duration: _kFadeOutDuration);
|
..animateTo(1.0, duration: _kFadeOutDuration);
|
||||||
|
@ -315,13 +315,13 @@ class _MaterialState extends State<Material> with TickerProviderStateMixin {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// PhysicalModel has a temporary workaround for a perfomance issue that
|
// PhysicalModel has a temporary workaround for a performance issue that
|
||||||
// speeds up rectangular non transparent material (the workaround is to
|
// speeds up rectangular non transparent material (the workaround is to
|
||||||
// skip the call to ui.Canvas.saveLayer if the border radius is 0).
|
// skip the call to ui.Canvas.saveLayer if the border radius is 0).
|
||||||
// Until the saveLayer perfomance issue is resolved, we're keeping this
|
// Until the saveLayer performance issue is resolved, we're keeping this
|
||||||
// special case here for canvas material type that is using the default
|
// special case here for canvas material type that is using the default
|
||||||
// shape (rectangle). We could go down this fast path for explicitly
|
// shape (rectangle). We could go down this fast path for explicitly
|
||||||
// specified rectangles (e.g shape RoundeRectangleBorder with radius 0, but
|
// specified rectangles (e.g shape RoundedRectangleBorder with radius 0, but
|
||||||
// we choose not to as we want the change from the fast-path to the
|
// we choose not to as we want the change from the fast-path to the
|
||||||
// slow-path to be noticeable in the construction site of Material.
|
// slow-path to be noticeable in the construction site of Material.
|
||||||
if (widget.type == MaterialType.canvas && widget.shape == null && widget.borderRadius == null) {
|
if (widget.type == MaterialType.canvas && widget.shape == null && widget.borderRadius == null) {
|
||||||
|
@ -30,7 +30,7 @@ import 'typography.dart';
|
|||||||
// same directory), including a best guess as to the translation, e.g.
|
// same directory), including a best guess as to the translation, e.g.
|
||||||
// obtained by optimistic use of Google Translate
|
// obtained by optimistic use of Google Translate
|
||||||
// (https://translate.google.com/). After that you have to re-generate
|
// (https://translate.google.com/). After that you have to re-generate
|
||||||
// lib/src/l10n/localizaions.dart by running
|
// lib/src/l10n/localizations.dart by running
|
||||||
// `dart dev/tools/gen_localizations.dart --overwrite`. There is a README
|
// `dart dev/tools/gen_localizations.dart --overwrite`. There is a README
|
||||||
// file with further information in the lib/src/l10n/ directory.
|
// file with further information in the lib/src/l10n/ directory.
|
||||||
//
|
//
|
||||||
@ -137,7 +137,7 @@ abstract class MaterialLocalizations {
|
|||||||
/// [showTimePicker] is set to the minute picker mode.
|
/// [showTimePicker] is set to the minute picker mode.
|
||||||
String get timePickerMinuteModeAnnouncement;
|
String get timePickerMinuteModeAnnouncement;
|
||||||
|
|
||||||
/// Label read out by accessibility tools (TalkBack or VocieOver) for a modal
|
/// Label read out by accessibility tools (TalkBack or VoiceOver) for a modal
|
||||||
/// barrier to indicate that a tap dismisses the barrier.
|
/// barrier to indicate that a tap dismisses the barrier.
|
||||||
///
|
///
|
||||||
/// A modal barrier can for example be found behind a alert or popup to block
|
/// A modal barrier can for example be found behind a alert or popup to block
|
||||||
|
@ -238,7 +238,7 @@ class _LinearProgressIndicatorState extends State<LinearProgressIndicator> with
|
|||||||
class _CircularProgressIndicatorPainter extends CustomPainter {
|
class _CircularProgressIndicatorPainter extends CustomPainter {
|
||||||
static const double _kTwoPI = math.PI * 2.0;
|
static const double _kTwoPI = math.PI * 2.0;
|
||||||
static const double _kEpsilon = .001;
|
static const double _kEpsilon = .001;
|
||||||
// Canavs.drawArc(r, 0, 2*PI) doesn't draw anything, so just get close.
|
// Canvas.drawArc(r, 0, 2*PI) doesn't draw anything, so just get close.
|
||||||
static const double _kSweep = _kTwoPI - _kEpsilon;
|
static const double _kSweep = _kTwoPI - _kEpsilon;
|
||||||
static const double _kStartAngle = -math.PI / 2.0;
|
static const double _kStartAngle = -math.PI / 2.0;
|
||||||
|
|
||||||
@ -521,7 +521,7 @@ class _RefreshProgressIndicatorState extends _CircularProgressIndicatorState {
|
|||||||
return new Container(
|
return new Container(
|
||||||
width: _kIndicatorSize,
|
width: _kIndicatorSize,
|
||||||
height: _kIndicatorSize,
|
height: _kIndicatorSize,
|
||||||
margin: const EdgeInsets.all(4.0), // acommodate the shadow
|
margin: const EdgeInsets.all(4.0), // accommodate the shadow
|
||||||
child: new Material(
|
child: new Material(
|
||||||
type: MaterialType.circle,
|
type: MaterialType.circle,
|
||||||
color: widget.backgroundColor ?? Theme.of(context).canvasColor,
|
color: widget.backgroundColor ?? Theme.of(context).canvasColor,
|
||||||
|
@ -20,7 +20,7 @@ const double _kDragContainerExtentPercentage = 0.25;
|
|||||||
const double _kDragSizeFactorLimit = 1.5;
|
const double _kDragSizeFactorLimit = 1.5;
|
||||||
|
|
||||||
// When the scroll ends, the duration of the refresh indicator's animation
|
// When the scroll ends, the duration of the refresh indicator's animation
|
||||||
// to the RefreshIndicator's displacment.
|
// to the RefreshIndicator's displacement.
|
||||||
const Duration _kIndicatorSnapDuration = const Duration(milliseconds: 150);
|
const Duration _kIndicatorSnapDuration = const Duration(milliseconds: 150);
|
||||||
|
|
||||||
// The duration of the ScaleTransition that starts when the refresh action
|
// The duration of the ScaleTransition that starts when the refresh action
|
||||||
|
@ -769,7 +769,7 @@ class Scaffold extends StatefulWidget {
|
|||||||
/// callback should then be invoked from [State.deactivate].
|
/// callback should then be invoked from [State.deactivate].
|
||||||
///
|
///
|
||||||
/// If there was a previously set [ScaffoldGeometry.floatingActionButtonNotch]
|
/// If there was a previously set [ScaffoldGeometry.floatingActionButtonNotch]
|
||||||
/// it will be overriden.
|
/// it will be overridden.
|
||||||
static VoidCallback setFloatingActionButtonNotchFor(BuildContext context, ComputeNotch computeNotch) {
|
static VoidCallback setFloatingActionButtonNotchFor(BuildContext context, ComputeNotch computeNotch) {
|
||||||
final _ScaffoldScope scaffoldScope = context.inheritFromWidgetOfExactType(_ScaffoldScope);
|
final _ScaffoldScope scaffoldScope = context.inheritFromWidgetOfExactType(_ScaffoldScope);
|
||||||
if (scaffoldScope == null)
|
if (scaffoldScope == null)
|
||||||
|
@ -65,7 +65,7 @@ const Color _kCircleActiveDark = Colors.black87;
|
|||||||
const Color _kDisabledLight = Colors.black38;
|
const Color _kDisabledLight = Colors.black38;
|
||||||
const Color _kDisabledDark = Colors.white30;
|
const Color _kDisabledDark = Colors.white30;
|
||||||
const double _kStepSize = 24.0;
|
const double _kStepSize = 24.0;
|
||||||
const double _kTriangleHeight = _kStepSize * 0.866025; // Traingle height. sqrt(3.0) / 2.0
|
const double _kTriangleHeight = _kStepSize * 0.866025; // Triangle height. sqrt(3.0) / 2.0
|
||||||
|
|
||||||
/// A material step used in [Stepper]. The step can have a title and subtitle,
|
/// A material step used in [Stepper]. The step can have a title and subtitle,
|
||||||
/// an icon within its circle, some content and a state that governs its
|
/// an icon within its circle, some content and a state that governs its
|
||||||
|
@ -360,7 +360,7 @@ class ThemeData extends Diagnosticable {
|
|||||||
|
|
||||||
/// The default color of the [BottomAppBar].
|
/// The default color of the [BottomAppBar].
|
||||||
///
|
///
|
||||||
/// This can be overriden by specifying [BottomAppBar.color].
|
/// This can be overridden by specifying [BottomAppBar.color].
|
||||||
final Color bottomAppBarColor;
|
final Color bottomAppBarColor;
|
||||||
|
|
||||||
/// The color of [Material] when it is used as a [Card].
|
/// The color of [Material] when it is used as a [Card].
|
||||||
|
@ -71,7 +71,7 @@ AxisDirection applyGrowthDirectionToAxisDirection(AxisDirection axisDirection, G
|
|||||||
/// This function is useful in [RenderSliver] subclasses that are given both an
|
/// This function is useful in [RenderSliver] subclasses that are given both an
|
||||||
/// [ScrollDirection] and a [GrowthDirection] and wish to compute the
|
/// [ScrollDirection] and a [GrowthDirection] and wish to compute the
|
||||||
/// [ScrollDirection] in which growth will occur.
|
/// [ScrollDirection] in which growth will occur.
|
||||||
ScrollDirection applyGrowthDirecitonToScrollDirection(ScrollDirection scrollDirection, GrowthDirection growthDirection) {
|
ScrollDirection applyGrowthDirectionToScrollDirection(ScrollDirection scrollDirection, GrowthDirection growthDirection) {
|
||||||
assert(scrollDirection != null);
|
assert(scrollDirection != null);
|
||||||
assert(growthDirection != null);
|
assert(growthDirection != null);
|
||||||
switch (growthDirection) {
|
switch (growthDirection) {
|
||||||
|
@ -277,7 +277,7 @@ abstract class RenderViewportBase<ParentDataClass extends ContainerParentDataMix
|
|||||||
assert(scrollOffset >= 0.0);
|
assert(scrollOffset >= 0.0);
|
||||||
final double initialLayoutOffset = layoutOffset;
|
final double initialLayoutOffset = layoutOffset;
|
||||||
final ScrollDirection adjustedUserScrollDirection =
|
final ScrollDirection adjustedUserScrollDirection =
|
||||||
applyGrowthDirecitonToScrollDirection(offset.userScrollDirection, growthDirection);
|
applyGrowthDirectionToScrollDirection(offset.userScrollDirection, growthDirection);
|
||||||
assert(adjustedUserScrollDirection != null);
|
assert(adjustedUserScrollDirection != null);
|
||||||
double maxPaintOffset = layoutOffset + overlap;
|
double maxPaintOffset = layoutOffset + overlap;
|
||||||
while (child != null) {
|
while (child != null) {
|
||||||
@ -833,7 +833,7 @@ class RenderViewport extends RenderViewportBase<SliverPhysicalContainerParentDat
|
|||||||
'If this widget is always nested in a scrollable widget there '
|
'If this widget is always nested in a scrollable widget there '
|
||||||
'is no need to use a viewport because there will always be enough '
|
'is no need to use a viewport because there will always be enough '
|
||||||
'vertical space for the children. In this case, consider using a '
|
'vertical space for the children. In this case, consider using a '
|
||||||
'Column instead. Otherwise, consider using the "shrinkWrap" propery '
|
'Column instead. Otherwise, consider using the "shrinkWrap" property '
|
||||||
'(or a ShrinkWrappingViewport) to size the height of the viewport '
|
'(or a ShrinkWrappingViewport) to size the height of the viewport '
|
||||||
'to the sum of the heights of its children.'
|
'to the sum of the heights of its children.'
|
||||||
);
|
);
|
||||||
@ -859,7 +859,7 @@ class RenderViewport extends RenderViewportBase<SliverPhysicalContainerParentDat
|
|||||||
'If this widget is always nested in a scrollable widget there '
|
'If this widget is always nested in a scrollable widget there '
|
||||||
'is no need to use a viewport because there will always be enough '
|
'is no need to use a viewport because there will always be enough '
|
||||||
'horizontal space for the children. In this case, consider using a '
|
'horizontal space for the children. In this case, consider using a '
|
||||||
'Row instead. Otherwise, consider using the "shrinkWrap" propery '
|
'Row instead. Otherwise, consider using the "shrinkWrap" property '
|
||||||
'(or a ShrinkWrappingViewport) to size the width of the viewport '
|
'(or a ShrinkWrappingViewport) to size the width of the viewport '
|
||||||
'to the sum of the widths of its children.'
|
'to the sum of the widths of its children.'
|
||||||
);
|
);
|
||||||
|
@ -186,7 +186,7 @@ class SemanticsData extends Diagnosticable {
|
|||||||
/// * [ScrollPosition.maxScrollExtent], from where this value is usually taken.
|
/// * [ScrollPosition.maxScrollExtent], from where this value is usually taken.
|
||||||
final double scrollExtentMax;
|
final double scrollExtentMax;
|
||||||
|
|
||||||
/// Indicates the mimimum in-range value for [scrollPosition] if the node is
|
/// Indicates the minimum in-range value for [scrollPosition] if the node is
|
||||||
/// scrollable.
|
/// scrollable.
|
||||||
///
|
///
|
||||||
/// This value may be infinity if the scroll is unbound.
|
/// This value may be infinity if the scroll is unbound.
|
||||||
@ -1147,7 +1147,7 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin {
|
|||||||
double get scrollExtentMax => _scrollExtentMax;
|
double get scrollExtentMax => _scrollExtentMax;
|
||||||
double _scrollExtentMax;
|
double _scrollExtentMax;
|
||||||
|
|
||||||
/// Indicates the mimimum in-range value for [scrollPosition] if the node is
|
/// Indicates the minimum in-range value for [scrollPosition] if the node is
|
||||||
/// scrollable.
|
/// scrollable.
|
||||||
///
|
///
|
||||||
/// This value may be infinity if the scroll is unbound.
|
/// This value may be infinity if the scroll is unbound.
|
||||||
|
@ -467,7 +467,7 @@ typedef void _OnDragEnd(Velocity velocity, Offset offset, bool wasAccepted);
|
|||||||
// The lifetime of this object is a little dubious right now. Specifically, it
|
// The lifetime of this object is a little dubious right now. Specifically, it
|
||||||
// lives as long as the pointer is down. Arguably it should self-immolate if the
|
// lives as long as the pointer is down. Arguably it should self-immolate if the
|
||||||
// overlay goes away. _DraggableState has some delicate logic to continue
|
// overlay goes away. _DraggableState has some delicate logic to continue
|
||||||
// eeding this object pointer events even after it has been disposed.
|
// needing this object pointer events even after it has been disposed.
|
||||||
class _DragAvatar<T> extends Drag {
|
class _DragAvatar<T> extends Drag {
|
||||||
_DragAvatar({
|
_DragAvatar({
|
||||||
@required this.overlayState,
|
@required this.overlayState,
|
||||||
|
@ -3102,7 +3102,7 @@ abstract class Element extends DiagnosticableTree implements BuildContext {
|
|||||||
throw new FlutterError(
|
throw new FlutterError(
|
||||||
'Cannot get size without a render object.\n'
|
'Cannot get size without a render object.\n'
|
||||||
'In order for an element to have a valid size, the element must have '
|
'In order for an element to have a valid size, the element must have '
|
||||||
'an assoicated render object. This element does not have an associated '
|
'an associated render object. This element does not have an associated '
|
||||||
'render object, which typically means that the size getter was called '
|
'render object, which typically means that the size getter was called '
|
||||||
'too early in the pipeline (e.g., during the build phase) before the '
|
'too early in the pipeline (e.g., during the build phase) before the '
|
||||||
'framework has created the render tree.\n'
|
'framework has created the render tree.\n'
|
||||||
|
@ -433,7 +433,7 @@ typedef bool RoutePredicate(Route<dynamic> route);
|
|||||||
///
|
///
|
||||||
/// There are also widgets which create popup routes, like [PopupMenuButton] and
|
/// There are also widgets which create popup routes, like [PopupMenuButton] and
|
||||||
/// [DropdownButton]. These widgets create internal subclasses of PopupRoute
|
/// [DropdownButton]. These widgets create internal subclasses of PopupRoute
|
||||||
/// and use the Naviagator's push and pop methods to show and dismiss them.
|
/// and use the Navigator's push and pop methods to show and dismiss them.
|
||||||
///
|
///
|
||||||
/// ### Custom routes
|
/// ### Custom routes
|
||||||
///
|
///
|
||||||
|
@ -45,7 +45,7 @@ class OrientationBuilder extends StatelessWidget {
|
|||||||
Widget _buildWithConstraints(BuildContext context, BoxConstraints constraints) {
|
Widget _buildWithConstraints(BuildContext context, BoxConstraints constraints) {
|
||||||
// If the constraints are fully unbounded (i.e., maxWidth and maxHeight are
|
// If the constraints are fully unbounded (i.e., maxWidth and maxHeight are
|
||||||
// both infinite), we prefer Orientation.portrait because its more common to
|
// both infinite), we prefer Orientation.portrait because its more common to
|
||||||
// scroll vertially than horizontally.
|
// scroll vertically then horizontally.
|
||||||
final Orientation orientation = constraints.maxWidth > constraints.maxHeight ? Orientation.landscape : Orientation.portrait;
|
final Orientation orientation = constraints.maxWidth > constraints.maxHeight ? Orientation.landscape : Orientation.portrait;
|
||||||
return builder(context, orientation);
|
return builder(context, orientation);
|
||||||
}
|
}
|
||||||
|
@ -191,7 +191,7 @@ class ClampingScrollSimulation extends Simulation {
|
|||||||
//
|
//
|
||||||
// Algebra courtesy of Wolfram Alpha.
|
// Algebra courtesy of Wolfram Alpha.
|
||||||
//
|
//
|
||||||
// f(x) = scrollOffset, x is time in millseconds
|
// f(x) = scrollOffset, x is time in milliseconds
|
||||||
// f(x) = 3.60882×10^-6 x^3 - 0.00668009 x^2 + 4.29427 x - 3.15307
|
// f(x) = 3.60882×10^-6 x^3 - 0.00668009 x^2 + 4.29427 x - 3.15307
|
||||||
// f(x) = 3.60882×10^-6 x^3 - 0.00668009 x^2 + 4.29427 x, so f(0) is 0
|
// f(x) = 3.60882×10^-6 x^3 - 0.00668009 x^2 + 4.29427 x, so f(0) is 0
|
||||||
// f(686ms) = 961 pixels
|
// f(686ms) = 961 pixels
|
||||||
|
@ -247,7 +247,7 @@ void main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
expect(opacities, <double> [
|
expect(opacities, <double> [
|
||||||
1.0, // Smaller font title now visiblee
|
1.0, // Smaller font title now visible
|
||||||
0.0, // Larger font title invisible.
|
0.0, // Larger font title invisible.
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ void main() {
|
|||||||
expect(tester.getSize(find.widgetWithText(OverflowBox, 'Title')).height, 0.0);
|
expect(tester.getSize(find.widgetWithText(OverflowBox, 'Title')).height, 0.0);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('Small title can be overriden', (WidgetTester tester) async {
|
testWidgets('Small title can be overridden', (WidgetTester tester) async {
|
||||||
final ScrollController scrollController = new ScrollController();
|
final ScrollController scrollController = new ScrollController();
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
new WidgetsApp(
|
new WidgetsApp(
|
||||||
|
@ -23,7 +23,7 @@ void main() {
|
|||||||
|
|
||||||
final List<String> log = <String>[];
|
final List<String> log = <String>[];
|
||||||
|
|
||||||
horizontalDrag.onStart = (DragStartDetails details) { log.add('hoizontal-drag-start'); };
|
horizontalDrag.onStart = (DragStartDetails details) { log.add('horizontal-drag-start'); };
|
||||||
verticalDrag.onStart = (DragStartDetails details) { log.add('vertical-drag-start'); };
|
verticalDrag.onStart = (DragStartDetails details) { log.add('vertical-drag-start'); };
|
||||||
tap.onTap = () { log.add('tap'); };
|
tap.onTap = () { log.add('tap'); };
|
||||||
|
|
||||||
|
@ -450,7 +450,7 @@ void main() {
|
|||||||
|
|
||||||
testWidgets('Dropdown menus must fit within the screen', (WidgetTester tester) async {
|
testWidgets('Dropdown menus must fit within the screen', (WidgetTester tester) async {
|
||||||
|
|
||||||
// The dropdown menu isn't readaily accessible. To find it we're assuming that it
|
// The dropdown menu isn't readily accessible. To find it we're assuming that it
|
||||||
// contains a ListView and that it's an instance of _DropdownMenu.
|
// contains a ListView and that it's an instance of _DropdownMenu.
|
||||||
Rect getMenuRect() {
|
Rect getMenuRect() {
|
||||||
Rect menuRect;
|
Rect menuRect;
|
||||||
|
@ -381,7 +381,7 @@ void main() {
|
|||||||
matches(getBorderRadius(tester, 1), RadiusType.Round, RadiusType.Round);
|
matches(getBorderRadius(tester, 1), RadiusType.Round, RadiusType.Round);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('MergeableMaterial separate merge seaparate', (WidgetTester tester) async {
|
testWidgets('MergeableMaterial separate merge separate', (WidgetTester tester) async {
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
new MaterialApp(
|
new MaterialApp(
|
||||||
home: new Scaffold(
|
home: new Scaffold(
|
||||||
|
@ -179,8 +179,8 @@ void main() {
|
|||||||
final TestGesture gesture1 = await tester.startGesture(tester.getCenter(find.text('label1')));
|
final TestGesture gesture1 = await tester.startGesture(tester.getCenter(find.text('label1')));
|
||||||
|
|
||||||
// Splashes start on tapDown.
|
// Splashes start on tapDown.
|
||||||
// If the timeout is less than kPressTimout the recognizer will just trigger
|
// If the timeout is less than kPressTimeout the recognizer will just trigger
|
||||||
// the onTapCancel callback. If the timeout is greater or equal to kPressTimout
|
// the onTapCancel callback. If the timeout is greater or equal to kPressTimeout
|
||||||
// and less than kLongPressTimeout then onTapDown, onCancel will be called.
|
// and less than kLongPressTimeout then onTapDown, onCancel will be called.
|
||||||
await tester.pump(kPressTimeout);
|
await tester.pump(kPressTimeout);
|
||||||
|
|
||||||
|
@ -182,11 +182,11 @@ void main() {
|
|||||||
expect(onChangedCalled, isTrue);
|
expect(onChangedCalled, isTrue);
|
||||||
boxPainter.paint(canvas, Offset.zero, imageConfiguration);
|
boxPainter.paint(canvas, Offset.zero, imageConfiguration);
|
||||||
|
|
||||||
// We expect a clip to preceed the drawImageRect call.
|
// We expect a clip to precede the drawImageRect call.
|
||||||
final List<Invocation> commands = canvas.invocations.where((Invocation invocation) {
|
final List<Invocation> commands = canvas.invocations.where((Invocation invocation) {
|
||||||
return invocation.memberName == #clipPath || invocation.memberName == #drawImageRect;
|
return invocation.memberName == #clipPath || invocation.memberName == #drawImageRect;
|
||||||
}).toList();
|
}).toList();
|
||||||
if (expectClip) { // We expect a clip to preceed the drawImageRect call.
|
if (expectClip) { // We expect a clip to precede the drawImageRect call.
|
||||||
expect(commands.length, 2);
|
expect(commands.length, 2);
|
||||||
expect(commands[0].memberName, equals(#clipPath));
|
expect(commands[0].memberName, equals(#clipPath));
|
||||||
expect(commands[1].memberName, equals(#drawImageRect));
|
expect(commands[1].memberName, equals(#drawImageRect));
|
||||||
|
@ -67,15 +67,15 @@ void main() {
|
|||||||
children: <RenderBox>[child1, child2, child3],
|
children: <RenderBox>[child1, child2, child3],
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<RenderObject> vistedChildren = <RenderObject>[];
|
final List<RenderObject> visitedChildren = <RenderObject>[];
|
||||||
final RenderObjectVisitor visitor = (RenderObject child) {
|
final RenderObjectVisitor visitor = (RenderObject child) {
|
||||||
vistedChildren.add(child);
|
visitedChildren.add(child);
|
||||||
};
|
};
|
||||||
|
|
||||||
stack.visitChildrenForSemantics(visitor);
|
stack.visitChildrenForSemantics(visitor);
|
||||||
|
|
||||||
expect(vistedChildren, hasLength(1));
|
expect(visitedChildren, hasLength(1));
|
||||||
expect(vistedChildren.first, child2);
|
expect(visitedChildren.first, child2);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -123,7 +123,7 @@ Future<Null> flingElement(WidgetTester tester, Finder finder, { @required AxisDi
|
|||||||
Future<Null> flingElementFromZero(WidgetTester tester, Finder finder, { @required AxisDirection gestureDirection }) async {
|
Future<Null> flingElementFromZero(WidgetTester tester, Finder finder, { @required AxisDirection gestureDirection }) async {
|
||||||
// This is a special case where we drag in one direction, then fling back so
|
// This is a special case where we drag in one direction, then fling back so
|
||||||
// that at the point of release, we're at exactly the point at which we
|
// that at the point of release, we're at exactly the point at which we
|
||||||
// started, but with velocity. This is needed to check a boundary coundition
|
// started, but with velocity. This is needed to check a boundary condition
|
||||||
// in the flinging behavior.
|
// in the flinging behavior.
|
||||||
await flingElement(tester, finder, gestureDirection: gestureDirection, initialOffsetFactor: -1.0);
|
await flingElement(tester, finder, gestureDirection: gestureDirection, initialOffsetFactor: -1.0);
|
||||||
}
|
}
|
||||||
|
@ -66,8 +66,8 @@ Widget buildListView(Axis scrollDirection, { bool reverse: false, bool shrinkWra
|
|||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|
||||||
group('SingleChildScollView', () {
|
group('SingleChildScrollView', () {
|
||||||
testWidgets('SingleChildScollView ensureVisible Axis.vertical', (WidgetTester tester) async {
|
testWidgets('SingleChildScrollView ensureVisible Axis.vertical', (WidgetTester tester) async {
|
||||||
BuildContext findContext(int i) => tester.element(findKey(i));
|
BuildContext findContext(int i) => tester.element(findKey(i));
|
||||||
|
|
||||||
await tester.pumpWidget(buildSingleChildScrollView(Axis.vertical));
|
await tester.pumpWidget(buildSingleChildScrollView(Axis.vertical));
|
||||||
@ -94,7 +94,7 @@ void main() {
|
|||||||
expect(tester.getTopLeft(findKey(3)).dy, equals(100.0));
|
expect(tester.getTopLeft(findKey(3)).dy, equals(100.0));
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('SingleChildScollView ensureVisible Axis.horizontal', (WidgetTester tester) async {
|
testWidgets('SingleChildScrollView ensureVisible Axis.horizontal', (WidgetTester tester) async {
|
||||||
BuildContext findContext(int i) => tester.element(findKey(i));
|
BuildContext findContext(int i) => tester.element(findKey(i));
|
||||||
|
|
||||||
await tester.pumpWidget(buildSingleChildScrollView(Axis.horizontal));
|
await tester.pumpWidget(buildSingleChildScrollView(Axis.horizontal));
|
||||||
@ -121,7 +121,7 @@ void main() {
|
|||||||
expect(tester.getTopLeft(findKey(3)).dx, equals(100.0));
|
expect(tester.getTopLeft(findKey(3)).dx, equals(100.0));
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('SingleChildScollView ensureVisible Axis.vertical reverse', (WidgetTester tester) async {
|
testWidgets('SingleChildScrollView ensureVisible Axis.vertical reverse', (WidgetTester tester) async {
|
||||||
BuildContext findContext(int i) => tester.element(findKey(i));
|
BuildContext findContext(int i) => tester.element(findKey(i));
|
||||||
|
|
||||||
await tester.pumpWidget(buildSingleChildScrollView(Axis.vertical, reverse: true));
|
await tester.pumpWidget(buildSingleChildScrollView(Axis.vertical, reverse: true));
|
||||||
@ -148,7 +148,7 @@ void main() {
|
|||||||
expect(tester.getBottomRight(findKey(3)).dy, equals(500.0));
|
expect(tester.getBottomRight(findKey(3)).dy, equals(500.0));
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('SingleChildScollView ensureVisible Axis.horizontal reverse', (WidgetTester tester) async {
|
testWidgets('SingleChildScrollView ensureVisible Axis.horizontal reverse', (WidgetTester tester) async {
|
||||||
BuildContext findContext(int i) => tester.element(findKey(i));
|
BuildContext findContext(int i) => tester.element(findKey(i));
|
||||||
|
|
||||||
await tester.pumpWidget(buildSingleChildScrollView(Axis.horizontal, reverse: true));
|
await tester.pumpWidget(buildSingleChildScrollView(Axis.horizontal, reverse: true));
|
||||||
@ -175,7 +175,7 @@ void main() {
|
|||||||
expect(tester.getBottomRight(findKey(3)).dx, equals(700.0));
|
expect(tester.getBottomRight(findKey(3)).dx, equals(700.0));
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('SingleChildScollView ensureVisible rotated child', (WidgetTester tester) async {
|
testWidgets('SingleChildScrollView ensureVisible rotated child', (WidgetTester tester) async {
|
||||||
BuildContext findContext(int i) => tester.element(findKey(i));
|
BuildContext findContext(int i) => tester.element(findKey(i));
|
||||||
|
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
|
@ -288,7 +288,7 @@ void main() {
|
|||||||
// called; onTap should never be called.
|
// called; onTap should never be called.
|
||||||
Future<Null> dragOut(Duration timeout) async {
|
Future<Null> dragOut(Duration timeout) async {
|
||||||
final TestGesture gesture = await tester.startGesture(const Offset(400.0, 50.0));
|
final TestGesture gesture = await tester.startGesture(const Offset(400.0, 50.0));
|
||||||
// If the timeout is less than kPressTimout the recognizer will just trigger
|
// If the timeout is less than kPressTimeout the recognizer will just trigger
|
||||||
// the onTapCancel callback. If the timeout is greater than kLongPressTimeout
|
// the onTapCancel callback. If the timeout is greater than kLongPressTimeout
|
||||||
// then onTapDown, onLongPress, and onCancel will be called.
|
// then onTapDown, onLongPress, and onCancel will be called.
|
||||||
await tester.pump(timeout);
|
await tester.pump(timeout);
|
||||||
|
@ -677,7 +677,7 @@ void main() {
|
|||||||
expect(midflightHeight, lessThan(finalHeight));
|
expect(midflightHeight, lessThan(finalHeight));
|
||||||
expect(midflightHeight, greaterThan(100.0));
|
expect(midflightHeight, greaterThan(100.0));
|
||||||
|
|
||||||
// Remove the destination hero midlfight
|
// Remove the destination hero midflight
|
||||||
heroCardSetState(() {
|
heroCardSetState(() {
|
||||||
routeIncludesHero = false;
|
routeIncludesHero = false;
|
||||||
});
|
});
|
||||||
|
@ -40,7 +40,7 @@ void main() {
|
|||||||
package: 'test_package',
|
package: 'test_package',
|
||||||
);
|
);
|
||||||
assert(imageWidget.image is ExactAssetImage);
|
assert(imageWidget.image is ExactAssetImage);
|
||||||
final ExactAssetImage asssetImage = imageWidget.image;
|
final ExactAssetImage assetImage = imageWidget.image;
|
||||||
expect(asssetImage.keyName, 'packages/test_package/assets/image.png');
|
expect(assetImage.keyName, 'packages/test_package/assets/image.png');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -221,7 +221,7 @@ void main() {
|
|||||||
expect(find.text('19'), findsOneWidget);
|
expect(find.text('19'), findsOneWidget);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('didFinishLayout has correct indicies', (WidgetTester tester) async {
|
testWidgets('didFinishLayout has correct indices', (WidgetTester tester) async {
|
||||||
final TestSliverChildListDelegate delegate = new TestSliverChildListDelegate(
|
final TestSliverChildListDelegate delegate = new TestSliverChildListDelegate(
|
||||||
new List<Widget>.generate(20, (int i) {
|
new List<Widget>.generate(20, (int i) {
|
||||||
return new Container(
|
return new Container(
|
||||||
|
@ -235,8 +235,8 @@ void main() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
DecoratedBox widget = tester.firstWidget(find.byType(DecoratedBox));
|
DecoratedBox widget = tester.firstWidget(find.byType(DecoratedBox));
|
||||||
BoxDecoration decoraton = widget.decoration;
|
BoxDecoration decoration = widget.decoration;
|
||||||
expect(decoraton.color, equals(Colors.blue[500]));
|
expect(decoration.color, equals(Colors.blue[500]));
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
themeData = new ThemeData(primarySwatch: Colors.green);
|
themeData = new ThemeData(primarySwatch: Colors.green);
|
||||||
@ -245,8 +245,8 @@ void main() {
|
|||||||
await tester.pump();
|
await tester.pump();
|
||||||
|
|
||||||
widget = tester.firstWidget(find.byType(DecoratedBox));
|
widget = tester.firstWidget(find.byType(DecoratedBox));
|
||||||
decoraton = widget.decoration;
|
decoration = widget.decoration;
|
||||||
expect(decoraton.color, equals(Colors.green[500]));
|
expect(decoration.color, equals(Colors.green[500]));
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('ListView padding', (WidgetTester tester) async {
|
testWidgets('ListView padding', (WidgetTester tester) async {
|
||||||
|
@ -158,7 +158,7 @@ class FlutterDriver {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect to Dart VM servcies
|
// Connect to Dart VM services
|
||||||
_log.info('Connecting to Flutter application at $dartVmServiceUrl');
|
_log.info('Connecting to Flutter application at $dartVmServiceUrl');
|
||||||
final VMServiceClientConnection connection = await vmServiceConnectFunction(dartVmServiceUrl);
|
final VMServiceClientConnection connection = await vmServiceConnectFunction(dartVmServiceUrl);
|
||||||
final VMServiceClient client = connection.client;
|
final VMServiceClient client = connection.client;
|
||||||
|
@ -31,7 +31,7 @@ regional translations have names that include the locale's regional
|
|||||||
suffix. For example `material_en_GB.arb` contains additional English
|
suffix. For example `material_en_GB.arb` contains additional English
|
||||||
translations that are specific to Great Britain.
|
translations that are specific to Great Britain.
|
||||||
|
|
||||||
There is one language-specifc .arb file for each supported locale. If
|
There is one language-specific .arb file for each supported locale. If
|
||||||
an additional file with a regional suffix is present, the regional
|
an additional file with a regional suffix is present, the regional
|
||||||
localizations are automatically merged with the language-specific ones.
|
localizations are automatically merged with the language-specific ones.
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ If you have feedback about the translations please
|
|||||||
### See Also
|
### See Also
|
||||||
|
|
||||||
The [Internationalizing Flutter Apps](https://flutter.io/tutorials/internationalization/)
|
The [Internationalizing Flutter Apps](https://flutter.io/tutorials/internationalization/)
|
||||||
tutorial describes how to use the internationlization APIs in an
|
tutorial describes how to use the internationalization APIs in an
|
||||||
ordinary Flutter app.
|
ordinary Flutter app.
|
||||||
|
|
||||||
[Application Resource Bundle](https://code.google.com/p/arb/wiki/ApplicationResourceBundleSpecification)
|
[Application Resource Bundle](https://code.google.com/p/arb/wiki/ApplicationResourceBundleSpecification)
|
||||||
|
@ -178,7 +178,7 @@ void main() {
|
|||||||
await tester.tap(find.text('CANCEL'));
|
await tester.tap(find.text('CANCEL'));
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('textDirection parameter takes precendence over locale parameter', (WidgetTester tester) async {
|
testWidgets('textDirection parameter takes precedence over locale parameter', (WidgetTester tester) async {
|
||||||
await tester.pumpWidget(new MaterialApp(
|
await tester.pumpWidget(new MaterialApp(
|
||||||
locale: const Locale('en', 'US'),
|
locale: const Locale('en', 'US'),
|
||||||
supportedLocales: const <Locale>[
|
supportedLocales: const <Locale>[
|
||||||
|
@ -302,7 +302,7 @@ void main() {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// All localizations were loaded synchonously
|
// All localizations were loaded synchronously
|
||||||
expect(find.text('A: en_US'), findsOneWidget);
|
expect(find.text('A: en_US'), findsOneWidget);
|
||||||
expect(find.text('B: en_US'), findsOneWidget);
|
expect(find.text('B: en_US'), findsOneWidget);
|
||||||
});
|
});
|
||||||
@ -337,7 +337,7 @@ void main() {
|
|||||||
expect(find.text('B: en_US'), findsOneWidget);
|
expect(find.text('B: en_US'), findsOneWidget);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('Muliple Localizations', (WidgetTester tester) async {
|
testWidgets('Multiple Localizations', (WidgetTester tester) async {
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
buildFrame(
|
buildFrame(
|
||||||
delegates: <LocalizationsDelegate<dynamic>>[
|
delegates: <LocalizationsDelegate<dynamic>>[
|
||||||
|
@ -244,7 +244,7 @@ ThinAppFrameworks() {
|
|||||||
# TODO(cbracken) improve error handling, then enable set -e
|
# TODO(cbracken) improve error handling, then enable set -e
|
||||||
|
|
||||||
if [[ $# == 0 ]]; then
|
if [[ $# == 0 ]]; then
|
||||||
# Backwards-comptibility: if no args are provided, build.
|
# Backwards-compatibility: if no args are provided, build.
|
||||||
BuildApp
|
BuildApp
|
||||||
else
|
else
|
||||||
case $1 in
|
case $1 in
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
<component name="ProjectRunConfigurationManager">
|
||||||
<configuration default="false" name="plaform_view" type="FlutterRunConfigurationType" factoryName="Flutter">
|
<configuration default="false" name="platform_view" type="FlutterRunConfigurationType" factoryName="Flutter">
|
||||||
<option name="filePath" value="$PROJECT_DIR$/examples/platform_view/lib/main.dart" />
|
<option name="filePath" value="$PROJECT_DIR$/examples/platform_view/lib/main.dart" />
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -25,7 +25,7 @@ class ConfigCommand extends FlutterCommand {
|
|||||||
argParser.addFlag('machine',
|
argParser.addFlag('machine',
|
||||||
negatable: false,
|
negatable: false,
|
||||||
hide: !verboseHelp,
|
hide: !verboseHelp,
|
||||||
help: 'Pring config values as json.');
|
help: 'Print config values as json.');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -50,7 +50,7 @@ class FuchsiaReloadCommand extends FlutterCommand {
|
|||||||
help: 'On-device name of the application binary.');
|
help: 'On-device name of the application binary.');
|
||||||
argParser.addOption('isolate-number',
|
argParser.addOption('isolate-number',
|
||||||
abbr: 'i',
|
abbr: 'i',
|
||||||
help: 'To reload only one instance, speficy the isolate number, e.g. '
|
help: 'To reload only one instance, specify the isolate number, e.g. '
|
||||||
'the number in foo\$main-###### given by --list.');
|
'the number in foo\$main-###### given by --list.');
|
||||||
argParser.addOption('target',
|
argParser.addOption('target',
|
||||||
abbr: 't',
|
abbr: 't',
|
||||||
|
@ -51,7 +51,7 @@ class TestCommand extends FlutterCommand {
|
|||||||
argParser.addFlag('merge-coverage',
|
argParser.addFlag('merge-coverage',
|
||||||
defaultsTo: false,
|
defaultsTo: false,
|
||||||
negatable: false,
|
negatable: false,
|
||||||
help: 'Whether to merge converage data with "coverage/lcov.base.info".\n'
|
help: 'Whether to merge coverage data with "coverage/lcov.base.info".\n'
|
||||||
'Implies collecting coverage data. (Requires lcov)'
|
'Implies collecting coverage data. (Requires lcov)'
|
||||||
);
|
);
|
||||||
argParser.addFlag('ipv6',
|
argParser.addFlag('ipv6',
|
||||||
|
@ -31,7 +31,7 @@ void main() {
|
|||||||
final MockProcessManager processMock = context.getVariable(ProcessManager);
|
final MockProcessManager processMock = context.getVariable(ProcessManager);
|
||||||
|
|
||||||
new FakeAsync().run((FakeAsync time) {
|
new FakeAsync().run((FakeAsync time) {
|
||||||
expect(processMock.lastPubEnvironmment, isNull);
|
expect(processMock.lastPubEnvironment, isNull);
|
||||||
expect(testLogger.statusText, '');
|
expect(testLogger.statusText, '');
|
||||||
pubGet(context: PubContext.flutterTests, checkLastModified: false).then((Null value) {
|
pubGet(context: PubContext.flutterTests, checkLastModified: false).then((Null value) {
|
||||||
error = 'test completed unexpectedly';
|
error = 'test completed unexpectedly';
|
||||||
@ -43,7 +43,7 @@ void main() {
|
|||||||
'Running "flutter packages get" in /...\n'
|
'Running "flutter packages get" in /...\n'
|
||||||
'pub get failed (69) -- attempting retry 1 in 1 second...\n'
|
'pub get failed (69) -- attempting retry 1 in 1 second...\n'
|
||||||
);
|
);
|
||||||
expect(processMock.lastPubEnvironmment, contains('flutter_cli:flutter_tests'));
|
expect(processMock.lastPubEnvironment, contains('flutter_cli:flutter_tests'));
|
||||||
expect(processMock.lastPubCache, isNull);
|
expect(processMock.lastPubCache, isNull);
|
||||||
time.elapse(const Duration(milliseconds: 500));
|
time.elapse(const Duration(milliseconds: 500));
|
||||||
expect(testLogger.statusText,
|
expect(testLogger.statusText,
|
||||||
@ -101,7 +101,7 @@ void main() {
|
|||||||
|
|
||||||
new FakeAsync().run((FakeAsync time) {
|
new FakeAsync().run((FakeAsync time) {
|
||||||
MockDirectory.findCache = true;
|
MockDirectory.findCache = true;
|
||||||
expect(processMock.lastPubEnvironmment, isNull);
|
expect(processMock.lastPubEnvironment, isNull);
|
||||||
expect(processMock.lastPubCache, isNull);
|
expect(processMock.lastPubCache, isNull);
|
||||||
pubGet(context: PubContext.flutterTests, checkLastModified: false).then((Null value) {
|
pubGet(context: PubContext.flutterTests, checkLastModified: false).then((Null value) {
|
||||||
error = 'test completed unexpectedly';
|
error = 'test completed unexpectedly';
|
||||||
@ -127,7 +127,7 @@ void main() {
|
|||||||
|
|
||||||
new FakeAsync().run((FakeAsync time) {
|
new FakeAsync().run((FakeAsync time) {
|
||||||
MockDirectory.findCache = true;
|
MockDirectory.findCache = true;
|
||||||
expect(processMock.lastPubEnvironmment, isNull);
|
expect(processMock.lastPubEnvironment, isNull);
|
||||||
expect(processMock.lastPubCache, isNull);
|
expect(processMock.lastPubCache, isNull);
|
||||||
pubGet(context: PubContext.flutterTests, checkLastModified: false).then((Null value) {
|
pubGet(context: PubContext.flutterTests, checkLastModified: false).then((Null value) {
|
||||||
error = 'test completed unexpectedly';
|
error = 'test completed unexpectedly';
|
||||||
@ -154,7 +154,7 @@ class MockProcessManager implements ProcessManager {
|
|||||||
|
|
||||||
final int fakeExitCode;
|
final int fakeExitCode;
|
||||||
|
|
||||||
String lastPubEnvironmment;
|
String lastPubEnvironment;
|
||||||
String lastPubCache;
|
String lastPubCache;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -166,7 +166,7 @@ class MockProcessManager implements ProcessManager {
|
|||||||
bool runInShell: false,
|
bool runInShell: false,
|
||||||
ProcessStartMode mode: ProcessStartMode.NORMAL,
|
ProcessStartMode mode: ProcessStartMode.NORMAL,
|
||||||
}) {
|
}) {
|
||||||
lastPubEnvironmment = environment['PUB_ENVIRONMENT'];
|
lastPubEnvironment = environment['PUB_ENVIRONMENT'];
|
||||||
lastPubCache = environment['PUB_CACHE'];
|
lastPubCache = environment['PUB_CACHE'];
|
||||||
return new Future<Process>.value(new MockProcess(fakeExitCode));
|
return new Future<Process>.value(new MockProcess(fakeExitCode));
|
||||||
}
|
}
|
||||||
|
@ -123,9 +123,9 @@ void main() {
|
|||||||
FileSystem: () => fs,
|
FileSystem: () => fs,
|
||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('add new file to local file system and preserve unusal file name casing', () async {
|
testUsingContext('add new file to local file system and preserve unusual file name casing', () async {
|
||||||
final String filePathWithUnusalCasing = fs.path.join('FooBar', 'TEST.txt');
|
final String filePathWithUnusualCasing = fs.path.join('FooBar', 'TEST.txt');
|
||||||
final File file = fs.file(fs.path.join(basePath, filePathWithUnusalCasing));
|
final File file = fs.file(fs.path.join(basePath, filePathWithUnusualCasing));
|
||||||
await file.parent.create(recursive: true);
|
await file.parent.create(recursive: true);
|
||||||
file.writeAsBytesSync(<int>[1, 2, 3, 4, 5, 6, 7]);
|
file.writeAsBytesSync(<int>[1, 2, 3, 4, 5, 6, 7]);
|
||||||
final int bytes = await devFS.update();
|
final int bytes = await devFS.update();
|
||||||
|
@ -240,7 +240,7 @@ flutter:
|
|||||||
expect(barFontAsset1.style, 'italic');
|
expect(barFontAsset1.style, 'italic');
|
||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('has only one of two font familes when one declaration is missing the "family" option', () async {
|
testUsingContext('has only one of two font families when one declaration is missing the "family" option', () async {
|
||||||
const String manifest = '''
|
const String manifest = '''
|
||||||
name: test
|
name: test
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -285,7 +285,7 @@ flutter:
|
|||||||
expect(fooFontAsset1.style, 'italic');
|
expect(fooFontAsset1.style, 'italic');
|
||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('has only one of two font familes when one declaration is missing the "fonts" option', () async {
|
testUsingContext('has only one of two font families when one declaration is missing the "fonts" option', () async {
|
||||||
const String manifest = '''
|
const String manifest = '''
|
||||||
name: test
|
name: test
|
||||||
dependencies:
|
dependencies:
|
||||||
|
Loading…
Reference in New Issue
Block a user