mirror of
https://github.com/flutter/flutter
synced 2024-10-12 11:12:54 +00:00
parent
14a15dedbe
commit
fda9ecfef7
|
@ -35,7 +35,6 @@ linter:
|
|||
- always_declare_return_types
|
||||
- always_put_control_body_on_new_line
|
||||
# - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219
|
||||
- always_require_non_null_named_parameters
|
||||
- always_specify_types
|
||||
# - always_use_package_imports # we do this commonly
|
||||
- annotate_overrides
|
||||
|
@ -64,8 +63,6 @@ linter:
|
|||
- avoid_relative_lib_imports
|
||||
- avoid_renaming_method_parameters
|
||||
- avoid_return_types_on_setters
|
||||
- avoid_returning_null
|
||||
- avoid_returning_null_for_future
|
||||
- avoid_returning_null_for_void
|
||||
# - avoid_returning_this # there are enough valid reasons to return `this` that this lint ends up with too many false positives
|
||||
- avoid_setters_without_getters
|
||||
|
@ -103,7 +100,6 @@ linter:
|
|||
- empty_catches
|
||||
- empty_constructor_bodies
|
||||
- empty_statements
|
||||
- enable_null_safety
|
||||
- eol_at_end_of_file
|
||||
- exhaustive_cases
|
||||
- file_names
|
||||
|
@ -201,6 +197,7 @@ linter:
|
|||
# - unawaited_futures # too many false positives, especially with the way AnimationController works
|
||||
- unnecessary_await_in_return
|
||||
- unnecessary_brace_in_string_interps
|
||||
- unnecessary_breaks
|
||||
- unnecessary_const
|
||||
- unnecessary_constructor_name
|
||||
# - unnecessary_final # conflicts with prefer_final_locals
|
||||
|
|
|
@ -115,7 +115,6 @@ class _FilteredChildAnimationPageState extends State<FilteredChildAnimationPage>
|
|||
opacity: (_controller.value * 2.0 - 1.0).abs(),
|
||||
child: child,
|
||||
);
|
||||
break;
|
||||
case FilterType.rotateTransform:
|
||||
builder = (BuildContext context, Widget? child) => Transform(
|
||||
transform: Matrix4.rotationZ(_controller.value * 2.0 * pi),
|
||||
|
@ -123,7 +122,6 @@ class _FilteredChildAnimationPageState extends State<FilteredChildAnimationPage>
|
|||
filterQuality: FilterQuality.low,
|
||||
child: child,
|
||||
);
|
||||
break;
|
||||
case FilterType.rotateFilter:
|
||||
builder = (BuildContext context, Widget? child) => ImageFiltered(
|
||||
imageFilter: ImageFilter.matrix((
|
||||
|
@ -134,7 +132,6 @@ class _FilteredChildAnimationPageState extends State<FilteredChildAnimationPage>
|
|||
).storage),
|
||||
child: child,
|
||||
);
|
||||
break;
|
||||
}
|
||||
return RepaintBoundary(
|
||||
child: AnimatedBuilder(
|
||||
|
|
|
@ -22,14 +22,12 @@ Future<void> main() async {
|
|||
await Future<void>.delayed(const Duration(seconds: 20));
|
||||
});
|
||||
}
|
||||
break;
|
||||
case 'TargetPlatform.android':
|
||||
{
|
||||
// Just run for 20 seconds to collect memory usage. The widget itself
|
||||
// animates during this time.
|
||||
await Future<void>.delayed(const Duration(seconds: 20));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw UnsupportedError('Unsupported platform $targetPlatform');
|
||||
}
|
||||
|
|
|
@ -16,31 +16,22 @@ List<Object?> _makeTestBuffer(int size) {
|
|||
switch (i % 9) {
|
||||
case 0:
|
||||
answer.add(1);
|
||||
break;
|
||||
case 1:
|
||||
answer.add(math.pow(2, 65));
|
||||
break;
|
||||
case 2:
|
||||
answer.add(1234.0);
|
||||
break;
|
||||
case 3:
|
||||
answer.add(null);
|
||||
break;
|
||||
case 4:
|
||||
answer.add(<int>[1234]);
|
||||
break;
|
||||
case 5:
|
||||
answer.add(<String, int>{'hello': 1234});
|
||||
break;
|
||||
case 6:
|
||||
answer.add('this is a test');
|
||||
break;
|
||||
case 7:
|
||||
answer.add(true);
|
||||
break;
|
||||
case 8:
|
||||
answer.add(Uint8List(64));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return answer;
|
||||
|
|
|
@ -94,19 +94,15 @@ class StockHomeState extends State<StockHome> {
|
|||
setState(() {
|
||||
_autorefresh = !_autorefresh;
|
||||
});
|
||||
break;
|
||||
case _StockMenuItem.refresh:
|
||||
showDialog<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) => const _NotImplementedDialog(),
|
||||
);
|
||||
break;
|
||||
case _StockMenuItem.speedUp:
|
||||
timeDilation /= 5.0;
|
||||
break;
|
||||
case _StockMenuItem.speedDown:
|
||||
timeDilation *= 5.0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,6 @@ class StockSettingsState extends State<StockSettings> {
|
|||
switch (widget.configuration.stockMode) {
|
||||
case StockMode.optimistic:
|
||||
_handleOptimismChanged(false);
|
||||
break;
|
||||
case StockMode.pessimistic:
|
||||
showDialog<bool>(
|
||||
context: context,
|
||||
|
@ -88,7 +87,6 @@ class StockSettingsState extends State<StockSettings> {
|
|||
);
|
||||
},
|
||||
).then<void>(_handleOptimismChanged);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1148,7 +1148,6 @@ Future<void> _runInteractive({
|
|||
if (!busy) {
|
||||
rerun();
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
Watcher(file.absolute.path).events.listen((_) => rerun());
|
||||
|
|
|
@ -113,7 +113,6 @@ Future<Command> startCommand(String executable, List<String> arguments, {
|
|||
switch (outputMode) {
|
||||
case OutputMode.print:
|
||||
print(line);
|
||||
break;
|
||||
case OutputMode.capture:
|
||||
break;
|
||||
}
|
||||
|
@ -127,7 +126,6 @@ Future<Command> startCommand(String executable, List<String> arguments, {
|
|||
switch (outputMode) {
|
||||
case OutputMode.print:
|
||||
print(line);
|
||||
break;
|
||||
case OutputMode.capture:
|
||||
break;
|
||||
}
|
||||
|
@ -188,7 +186,6 @@ Future<CommandResult> runCommand(String executable, List<String> arguments, {
|
|||
case OutputMode.capture:
|
||||
print(result.flattenedStdout);
|
||||
print(result.flattenedStderr);
|
||||
break;
|
||||
}
|
||||
String allOutput;
|
||||
if (failureMessage == null) {
|
||||
|
|
|
@ -107,25 +107,18 @@ String _testTypeToIndexFile(ServiceWorkerTestType type) {
|
|||
switch (type) {
|
||||
case ServiceWorkerTestType.blockedServiceWorkers:
|
||||
indexFile = 'index_with_blocked_service_workers.html';
|
||||
break;
|
||||
case ServiceWorkerTestType.withFlutterJs:
|
||||
indexFile = 'index_with_flutterjs.html';
|
||||
break;
|
||||
case ServiceWorkerTestType.withoutFlutterJs:
|
||||
indexFile = 'index_without_flutterjs.html';
|
||||
break;
|
||||
case ServiceWorkerTestType.withFlutterJsShort:
|
||||
indexFile = 'index_with_flutterjs_short.html';
|
||||
break;
|
||||
case ServiceWorkerTestType.withFlutterJsEntrypointLoadedEvent:
|
||||
indexFile = 'index_with_flutterjs_entrypoint_loaded.html';
|
||||
break;
|
||||
case ServiceWorkerTestType.withFlutterJsTrustedTypesOn:
|
||||
indexFile = 'index_with_flutterjs_el_tt_on.html';
|
||||
break;
|
||||
case ServiceWorkerTestType.generatedEntrypoint:
|
||||
indexFile = 'generated_entrypoint.html';
|
||||
break;
|
||||
}
|
||||
return indexFile;
|
||||
}
|
||||
|
|
|
@ -160,12 +160,10 @@ String getNewPrLink({
|
|||
candidateBranch = state.framework.candidateBranch;
|
||||
workingBranch = state.framework.workingBranch;
|
||||
repoLabel = 'Framework';
|
||||
break;
|
||||
case 'engine':
|
||||
candidateBranch = state.engine.candidateBranch;
|
||||
workingBranch = state.engine.workingBranch;
|
||||
repoLabel = 'Engine';
|
||||
break;
|
||||
default:
|
||||
throw ConductorException('Expected repoName to be one of flutter or engine but got $repoName.');
|
||||
}
|
||||
|
|
|
@ -141,7 +141,6 @@ class NextContext extends Context {
|
|||
}
|
||||
|
||||
await pushWorkingBranch(engine, state.engine);
|
||||
break;
|
||||
case pb.ReleasePhase.CODESIGN_ENGINE_BINARIES:
|
||||
stdio.printStatus(<String>[
|
||||
'You must validate pre-submit CI for your engine PR, merge it, and codesign',
|
||||
|
@ -158,7 +157,6 @@ class NextContext extends Context {
|
|||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case pb.ReleasePhase.APPLY_FRAMEWORK_CHERRYPICKS:
|
||||
final Remote engineUpstreamRemote = Remote(
|
||||
name: RemoteName.upstream,
|
||||
|
@ -251,7 +249,6 @@ class NextContext extends Context {
|
|||
}
|
||||
|
||||
await pushWorkingBranch(framework, state.framework);
|
||||
break;
|
||||
case pb.ReleasePhase.PUBLISH_VERSION:
|
||||
stdio.printStatus('Please ensure that you have merged your framework PR and that');
|
||||
stdio.printStatus('post-submit CI has finished successfully.\n');
|
||||
|
@ -292,7 +289,6 @@ class NextContext extends Context {
|
|||
}
|
||||
await framework.tag(frameworkHead, state.releaseVersion, frameworkUpstream.name);
|
||||
await engine.tag(engineHead, state.releaseVersion, engineUpstream.name);
|
||||
break;
|
||||
case pb.ReleasePhase.PUBLISH_CHANNEL:
|
||||
final Remote upstream = Remote(
|
||||
name: RemoteName.upstream,
|
||||
|
@ -331,7 +327,6 @@ class NextContext extends Context {
|
|||
remote: state.framework.upstream.url,
|
||||
force: force,
|
||||
);
|
||||
break;
|
||||
case pb.ReleasePhase.VERIFY_RELEASE:
|
||||
stdio.printStatus(
|
||||
'The current status of packaging builds can be seen at:\n'
|
||||
|
@ -346,7 +341,6 @@ class NextContext extends Context {
|
|||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case pb.ReleasePhase.RELEASE_COMPLETED:
|
||||
throw ConductorException('This release is finished.');
|
||||
}
|
||||
|
|
|
@ -394,16 +394,12 @@ class StartContext extends Context {
|
|||
z: 0,
|
||||
type: VersionType.stable,
|
||||
);
|
||||
break;
|
||||
case ReleaseType.STABLE_HOTFIX:
|
||||
nextVersion = Version.increment(lastVersion, 'z');
|
||||
break;
|
||||
case ReleaseType.BETA_INITIAL:
|
||||
nextVersion = Version.fromCandidateBranch(candidateBranch);
|
||||
break;
|
||||
case ReleaseType.BETA_HOTFIX:
|
||||
nextVersion = Version.increment(lastVersion, 'n');
|
||||
break;
|
||||
}
|
||||
return nextVersion;
|
||||
}
|
||||
|
|
|
@ -54,20 +54,16 @@ class Version {
|
|||
assert(m == null);
|
||||
assert(n == null);
|
||||
assert(commits == null);
|
||||
break;
|
||||
case VersionType.development:
|
||||
assert(m != null);
|
||||
assert(n != null);
|
||||
assert(commits == null);
|
||||
break;
|
||||
case VersionType.latest:
|
||||
assert(m != null);
|
||||
assert(n != null);
|
||||
assert(commits != null);
|
||||
break;
|
||||
case VersionType.gitDescribe:
|
||||
assert(commits != null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -182,19 +178,15 @@ class Version {
|
|||
nextM = 0;
|
||||
nextN = 0;
|
||||
}
|
||||
break;
|
||||
case 'z':
|
||||
// Hotfix to stable release.
|
||||
assert(previousVersion.type == VersionType.stable);
|
||||
nextZ += 1;
|
||||
break;
|
||||
case 'm':
|
||||
assert(false, "Do not increment 'm' via Version.increment, use instead Version.fromCandidateBranch()");
|
||||
break;
|
||||
case 'n':
|
||||
// Hotfix to internal roll.
|
||||
nextN = nextN! + 1;
|
||||
break;
|
||||
default:
|
||||
throw Exception('Unknown increment level $increment.');
|
||||
}
|
||||
|
|
|
@ -114,14 +114,11 @@ class ABTest {
|
|||
switch (aligns[column]) {
|
||||
case FieldJustification.LEFT:
|
||||
value = value.padRight(len);
|
||||
break;
|
||||
case FieldJustification.RIGHT:
|
||||
value = value.padLeft(len);
|
||||
break;
|
||||
case FieldJustification.CENTER:
|
||||
value = value.padLeft((len + value.length) ~/2);
|
||||
value = value.padRight(len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (column > 0) {
|
||||
|
|
|
@ -685,7 +685,6 @@ class StartupTest {
|
|||
'--target=$target',
|
||||
]);
|
||||
applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk';
|
||||
break;
|
||||
case DeviceOperatingSystem.androidArm:
|
||||
await flutter('build', options: <String>[
|
||||
'apk',
|
||||
|
@ -695,7 +694,6 @@ class StartupTest {
|
|||
'--target=$target',
|
||||
]);
|
||||
applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk';
|
||||
break;
|
||||
case DeviceOperatingSystem.androidArm64:
|
||||
await flutter('build', options: <String>[
|
||||
'apk',
|
||||
|
@ -705,7 +703,6 @@ class StartupTest {
|
|||
'--target=$target',
|
||||
]);
|
||||
applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk';
|
||||
break;
|
||||
case DeviceOperatingSystem.fake:
|
||||
case DeviceOperatingSystem.fuchsia:
|
||||
case DeviceOperatingSystem.linux:
|
||||
|
@ -720,7 +717,6 @@ class StartupTest {
|
|||
]);
|
||||
final String buildRoot = path.join(testDirectory, 'build');
|
||||
applicationBinaryPath = _findDarwinAppInBuildDirectory(buildRoot);
|
||||
break;
|
||||
case DeviceOperatingSystem.windows:
|
||||
await flutter('build', options: <String>[
|
||||
'windows',
|
||||
|
@ -737,7 +733,6 @@ class StartupTest {
|
|||
'Profile',
|
||||
'$basename.exe'
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
const int maxFailures = 3;
|
||||
|
@ -824,7 +819,6 @@ class DevtoolsStartupTest {
|
|||
'--target-platform=android-arm,android-arm64',
|
||||
]);
|
||||
applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk';
|
||||
break;
|
||||
case DeviceOperatingSystem.androidArm:
|
||||
await flutter('build', options: <String>[
|
||||
'apk',
|
||||
|
@ -833,7 +827,6 @@ class DevtoolsStartupTest {
|
|||
'--target-platform=android-arm',
|
||||
]);
|
||||
applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk';
|
||||
break;
|
||||
case DeviceOperatingSystem.androidArm64:
|
||||
await flutter('build', options: <String>[
|
||||
'apk',
|
||||
|
@ -842,7 +835,6 @@ class DevtoolsStartupTest {
|
|||
'--target-platform=android-arm64',
|
||||
]);
|
||||
applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk';
|
||||
break;
|
||||
case DeviceOperatingSystem.ios:
|
||||
await flutter('build', options: <String>[
|
||||
'ios',
|
||||
|
@ -850,7 +842,6 @@ class DevtoolsStartupTest {
|
|||
'--profile',
|
||||
]);
|
||||
applicationBinaryPath = _findDarwinAppInBuildDirectory('$testDirectory/build/ios/iphoneos');
|
||||
break;
|
||||
case DeviceOperatingSystem.fake:
|
||||
case DeviceOperatingSystem.fuchsia:
|
||||
case DeviceOperatingSystem.linux:
|
||||
|
@ -1383,7 +1374,6 @@ class CompileTest {
|
|||
);
|
||||
metrics.addAll(sizeMetrics);
|
||||
}
|
||||
break;
|
||||
case DeviceOperatingSystem.android:
|
||||
case DeviceOperatingSystem.androidArm:
|
||||
options.insert(0, 'apk');
|
||||
|
@ -1399,7 +1389,6 @@ class CompileTest {
|
|||
if (reportPackageContentSizes) {
|
||||
metrics.addAll(await getSizesFromApk(apkPath));
|
||||
}
|
||||
break;
|
||||
case DeviceOperatingSystem.androidArm64:
|
||||
options.insert(0, 'apk');
|
||||
options.add('--target-platform=android-arm64');
|
||||
|
@ -1414,7 +1403,6 @@ class CompileTest {
|
|||
if (reportPackageContentSizes) {
|
||||
metrics.addAll(await getSizesFromApk(apkPath));
|
||||
}
|
||||
break;
|
||||
case DeviceOperatingSystem.fake:
|
||||
throw Exception('Unsupported option for fake devices');
|
||||
case DeviceOperatingSystem.fuchsia:
|
||||
|
@ -1442,7 +1430,6 @@ class CompileTest {
|
|||
// rather a directory containing an .exe and .dll files.
|
||||
// The release size is set to the size of the produced .exe file
|
||||
releaseSizeInBytes = exe.lengthSync();
|
||||
break;
|
||||
}
|
||||
|
||||
metrics.addAll(<String, dynamic>{
|
||||
|
@ -1470,16 +1457,13 @@ class CompileTest {
|
|||
switch (deviceOperatingSystem) {
|
||||
case DeviceOperatingSystem.ios:
|
||||
options.insert(0, 'ios');
|
||||
break;
|
||||
case DeviceOperatingSystem.android:
|
||||
case DeviceOperatingSystem.androidArm:
|
||||
options.insert(0, 'apk');
|
||||
options.add('--target-platform=android-arm');
|
||||
break;
|
||||
case DeviceOperatingSystem.androidArm64:
|
||||
options.insert(0, 'apk');
|
||||
options.add('--target-platform=android-arm64');
|
||||
break;
|
||||
case DeviceOperatingSystem.fake:
|
||||
throw Exception('Unsupported option for fake devices');
|
||||
case DeviceOperatingSystem.fuchsia:
|
||||
|
@ -1489,11 +1473,9 @@ class CompileTest {
|
|||
case DeviceOperatingSystem.macos:
|
||||
unawaited(stderr.flush());
|
||||
options.insert(0, 'macos');
|
||||
break;
|
||||
case DeviceOperatingSystem.windows:
|
||||
unawaited(stderr.flush());
|
||||
options.insert(0, 'windows');
|
||||
break;
|
||||
}
|
||||
watch.start();
|
||||
await flutter('build', options: options);
|
||||
|
@ -1521,7 +1503,6 @@ class CompileTest {
|
|||
'Flutter.framework',
|
||||
'Flutter',
|
||||
));
|
||||
break;
|
||||
case DeviceOperatingSystem.macos:
|
||||
frameworkDirectory = path.join(
|
||||
appPath,
|
||||
|
@ -1533,7 +1514,6 @@ class CompileTest {
|
|||
'FlutterMacOS.framework',
|
||||
'FlutterMacOS',
|
||||
)); // https://github.com/flutter/flutter/issues/70413
|
||||
break;
|
||||
case DeviceOperatingSystem.android:
|
||||
case DeviceOperatingSystem.androidArm:
|
||||
case DeviceOperatingSystem.androidArm64:
|
||||
|
|
|
@ -262,7 +262,6 @@ public class $pluginClass: NSObject, FlutterPlugin {
|
|||
) != 0) {
|
||||
throw TaskResult.failure('Platform unit tests failed');
|
||||
}
|
||||
break;
|
||||
case 'ios':
|
||||
await testWithNewIOSSimulator('TestNativeUnitTests', (String deviceId) async {
|
||||
if (!await runXcodeTests(
|
||||
|
@ -275,7 +274,6 @@ public class $pluginClass: NSObject, FlutterPlugin {
|
|||
throw TaskResult.failure('Platform unit tests failed');
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 'linux':
|
||||
if (await exec(
|
||||
path.join(rootPath, 'build', 'linux', 'x64', 'release', 'plugins', 'plugintest', 'plugintest_test'),
|
||||
|
@ -284,7 +282,6 @@ public class $pluginClass: NSObject, FlutterPlugin {
|
|||
) != 0) {
|
||||
throw TaskResult.failure('Platform unit tests failed');
|
||||
}
|
||||
break;
|
||||
case 'macos':
|
||||
if (!await runXcodeTests(
|
||||
platformDirectory: path.join(rootPath, 'macos'),
|
||||
|
@ -295,7 +292,6 @@ public class $pluginClass: NSObject, FlutterPlugin {
|
|||
)) {
|
||||
throw TaskResult.failure('Platform unit tests failed');
|
||||
}
|
||||
break;
|
||||
case 'windows':
|
||||
if (await exec(
|
||||
path.join(rootPath, 'build', 'windows', 'plugins', 'plugintest', 'Release', 'plugintest_test.exe'),
|
||||
|
@ -304,7 +300,6 @@ public class $pluginClass: NSObject, FlutterPlugin {
|
|||
) != 0) {
|
||||
throw TaskResult.failure('Platform unit tests failed');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -50,14 +50,12 @@ Widget builds: $_widgetBuilds''';
|
|||
_state = FrameState.slow;
|
||||
_icon = Icons.stop;
|
||||
channel.invokeMethod<void>('start', _flutterFrameRate ~/ 2);
|
||||
break;
|
||||
case FrameState.slow:
|
||||
debugPrint('Stopping .5x speed test...');
|
||||
await channel.invokeMethod<void>('stop');
|
||||
await _summarizeStats();
|
||||
_icon = Icons.fast_forward;
|
||||
_state = FrameState.afterSlow;
|
||||
break;
|
||||
case FrameState.afterSlow:
|
||||
debugPrint('Starting 2x speed test...');
|
||||
_widgetBuilds = 0;
|
||||
|
@ -65,20 +63,17 @@ Widget builds: $_widgetBuilds''';
|
|||
_state = FrameState.fast;
|
||||
_icon = Icons.stop;
|
||||
channel.invokeMethod<void>('start', (_flutterFrameRate * 2).toInt());
|
||||
break;
|
||||
case FrameState.fast:
|
||||
debugPrint('Stopping 2x speed test...');
|
||||
await channel.invokeMethod<void>('stop');
|
||||
await _summarizeStats();
|
||||
_state = FrameState.afterFast;
|
||||
_icon = Icons.replay;
|
||||
break;
|
||||
case FrameState.afterFast:
|
||||
debugPrint('Test complete.');
|
||||
_summary = 'Press play to start again';
|
||||
_state = FrameState.initial;
|
||||
_icon = Icons.play_arrow;
|
||||
break;
|
||||
}
|
||||
setState(() {});
|
||||
}
|
||||
|
|
|
@ -155,22 +155,18 @@ class CalcExpression {
|
|||
case ExpressionState.Start:
|
||||
// Start a new number with digit.
|
||||
newToken = IntToken('$digit');
|
||||
break;
|
||||
case ExpressionState.LeadingNeg:
|
||||
// Replace the leading neg with a negative number starting with digit.
|
||||
outList.removeLast();
|
||||
newToken = IntToken('-$digit');
|
||||
break;
|
||||
case ExpressionState.Number:
|
||||
final ExpressionToken last = outList.removeLast()!;
|
||||
newToken = IntToken('${last.stringRep}$digit');
|
||||
break;
|
||||
case ExpressionState.Point:
|
||||
case ExpressionState.NumberWithPoint:
|
||||
final ExpressionToken last = outList.removeLast()!;
|
||||
newState = ExpressionState.NumberWithPoint;
|
||||
newToken = FloatToken('${last.stringRep}$digit');
|
||||
break;
|
||||
case ExpressionState.Result:
|
||||
// Cannot enter a number now
|
||||
return null;
|
||||
|
@ -188,13 +184,11 @@ class CalcExpression {
|
|||
switch (state) {
|
||||
case ExpressionState.Start:
|
||||
newToken = FloatToken('.');
|
||||
break;
|
||||
case ExpressionState.LeadingNeg:
|
||||
case ExpressionState.Number:
|
||||
final ExpressionToken last = outList.removeLast()!;
|
||||
final String value = last.stringRep!;
|
||||
newToken = FloatToken('$value.');
|
||||
break;
|
||||
case ExpressionState.Point:
|
||||
case ExpressionState.NumberWithPoint:
|
||||
case ExpressionState.Result:
|
||||
|
@ -292,10 +286,8 @@ class CalcExpression {
|
|||
switch (opToken.operation) {
|
||||
case Operation.Addition:
|
||||
currentTermValue += nextTermValue;
|
||||
break;
|
||||
case Operation.Subtraction:
|
||||
currentTermValue -= nextTermValue;
|
||||
break;
|
||||
case Operation.Multiplication:
|
||||
case Operation.Division:
|
||||
// Logic error.
|
||||
|
|
|
@ -603,11 +603,9 @@ class Tab2ConversationBubble extends StatelessWidget {
|
|||
case Tab2ConversationBubbleColor.gray:
|
||||
backgroundColor = CupertinoDynamicColor.resolve(CupertinoColors.systemFill, context);
|
||||
foregroundColor = CupertinoDynamicColor.resolve(CupertinoColors.label, context);
|
||||
break;
|
||||
case Tab2ConversationBubbleColor.blue:
|
||||
backgroundColor = CupertinoTheme.of(context).primaryColor;
|
||||
foregroundColor = CupertinoColors.white;
|
||||
break;
|
||||
case null:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -34,13 +34,10 @@ class _BannerDemoState extends State<BannerDemo> {
|
|||
_displayBanner = true;
|
||||
_showMultipleActions = true;
|
||||
_showLeading = true;
|
||||
break;
|
||||
case BannerDemoAction.showMultipleActions:
|
||||
_showMultipleActions = !_showMultipleActions;
|
||||
break;
|
||||
case BannerDemoAction.showLeading:
|
||||
_showLeading = !_showLeading;
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -382,13 +382,10 @@ class _CardsDemoState extends State<CardsDemo> {
|
|||
switch (destination.type) {
|
||||
case CardDemoType.standard:
|
||||
child = TravelDestinationItem(destination: destination, shape: _shape);
|
||||
break;
|
||||
case CardDemoType.tappable:
|
||||
child = TappableTravelDestinationItem(destination: destination, shape: _shape);
|
||||
break;
|
||||
case CardDemoType.selectable:
|
||||
child = SelectableTravelDestinationItem(destination: destination, shape: _shape);
|
||||
break;
|
||||
}
|
||||
|
||||
return Container(
|
||||
|
|
|
@ -68,19 +68,14 @@ class LeaveBehindDemoState extends State<LeaveBehindDemo> {
|
|||
switch (action) {
|
||||
case LeaveBehindDemoAction.reset:
|
||||
initListItems();
|
||||
break;
|
||||
case LeaveBehindDemoAction.horizontalSwipe:
|
||||
_dismissDirection = DismissDirection.horizontal;
|
||||
break;
|
||||
case LeaveBehindDemoAction.leftSwipe:
|
||||
_dismissDirection = DismissDirection.endToStart;
|
||||
break;
|
||||
case LeaveBehindDemoAction.rightSwipe:
|
||||
_dismissDirection = DismissDirection.startToEnd;
|
||||
break;
|
||||
case LeaveBehindDemoAction.confirmDismiss:
|
||||
_confirmDismiss = !_confirmDismiss;
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -212,13 +212,10 @@ class _ListDemoState extends State<ListDemo> {
|
|||
case _MaterialListType.oneLine:
|
||||
case _MaterialListType.oneLineWithAvatar:
|
||||
itemTypeText = 'Single-line';
|
||||
break;
|
||||
case _MaterialListType.twoLine:
|
||||
itemTypeText = 'Two-line';
|
||||
break;
|
||||
case _MaterialListType.threeLine:
|
||||
itemTypeText = 'Three-line';
|
||||
break;
|
||||
case null:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -57,11 +57,9 @@ class _ProgressIndicatorDemoState extends State<ProgressIndicatorDemo> with Sing
|
|||
case AnimationStatus.dismissed:
|
||||
case AnimationStatus.forward:
|
||||
_controller.forward();
|
||||
break;
|
||||
case AnimationStatus.reverse:
|
||||
case AnimationStatus.completed:
|
||||
_controller.reverse();
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -143,7 +143,6 @@ class _ListDemoState extends State<ReorderableListDemo> {
|
|||
subtitle: secondary,
|
||||
secondary: const Icon(Icons.drag_handle),
|
||||
);
|
||||
break;
|
||||
case _ReorderableListType.horizontalAvatar:
|
||||
case _ReorderableListType.verticalAvatar:
|
||||
listTile = SizedBox(
|
||||
|
@ -155,12 +154,10 @@ class _ListDemoState extends State<ReorderableListDemo> {
|
|||
child: Text(item.value),
|
||||
),
|
||||
);
|
||||
break;
|
||||
case null:
|
||||
listTile = Container(
|
||||
key: Key(item.value),
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
return listTile;
|
||||
|
|
|
@ -86,26 +86,20 @@ class _CustomRangeThumbShape extends RangeSliderThumbShape {
|
|||
switch (thumb) {
|
||||
case Thumb.start:
|
||||
thumbPath = _rightTriangle(size, center);
|
||||
break;
|
||||
case Thumb.end:
|
||||
thumbPath = _leftTriangle(size, center);
|
||||
break;
|
||||
case null:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
switch (thumb) {
|
||||
case Thumb.start:
|
||||
thumbPath = _leftTriangle(size, center);
|
||||
break;
|
||||
case Thumb.end:
|
||||
thumbPath = _rightTriangle(size, center);
|
||||
break;
|
||||
case null:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case null:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -208,7 +208,6 @@ class MotionEventsBodyState extends State<MotionEventsBody> {
|
|||
flutterViewEvents.removeLast();
|
||||
}
|
||||
setState(() {});
|
||||
break;
|
||||
}
|
||||
return Future<dynamic>.value();
|
||||
}
|
||||
|
@ -222,7 +221,6 @@ class MotionEventsBodyState extends State<MotionEventsBody> {
|
|||
embeddedViewEvents.removeLast();
|
||||
}
|
||||
setState(() {});
|
||||
break;
|
||||
}
|
||||
return Future<dynamic>.value();
|
||||
}
|
||||
|
|
|
@ -236,13 +236,10 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||
switch (widget.setup) {
|
||||
case Setup.none:
|
||||
imageWidget = Container();
|
||||
break;
|
||||
case Setup.image:
|
||||
imageWidget = Image.memory(base64Decode(_displayP3Logo));
|
||||
break;
|
||||
case Setup.canvasSaveLayer:
|
||||
imageWidget = CustomPaint(painter: _SaveLayerDrawer(_image));
|
||||
break;
|
||||
case Setup.blur:
|
||||
imageWidget = Stack(
|
||||
children: <Widget>[
|
||||
|
@ -258,7 +255,6 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||
child: Image.memory(base64Decode(_displayP3Logo))),
|
||||
],
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
|
|
|
@ -286,19 +286,15 @@ class CardCollectionState extends State<CardCollection> {
|
|||
switch (_dismissDirection) {
|
||||
case DismissDirection.horizontal:
|
||||
backgroundMessage = 'Swipe in either direction';
|
||||
break;
|
||||
case DismissDirection.endToStart:
|
||||
backgroundMessage = 'Swipe left to dismiss';
|
||||
break;
|
||||
case DismissDirection.startToEnd:
|
||||
backgroundMessage = 'Swipe right to dismiss';
|
||||
break;
|
||||
case DismissDirection.vertical:
|
||||
case DismissDirection.up:
|
||||
case DismissDirection.down:
|
||||
case DismissDirection.none:
|
||||
backgroundMessage = 'Unsupported dismissDirection';
|
||||
break;
|
||||
}
|
||||
|
||||
// This icon is wrong in RTL.
|
||||
|
|
|
@ -160,12 +160,10 @@ class _PointDemoState extends State<_PointDemo> {
|
|||
setState(() {
|
||||
_begin = _begin! + details.delta;
|
||||
});
|
||||
break;
|
||||
case _DragTarget.end:
|
||||
setState(() {
|
||||
_end = _end! + details.delta;
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -322,12 +320,10 @@ class _RectangleDemoState extends State<_RectangleDemo> {
|
|||
setState(() {
|
||||
_begin = _begin?.shift(details.delta);
|
||||
});
|
||||
break;
|
||||
case _DragTarget.end:
|
||||
setState(() {
|
||||
_end = _end?.shift(details.delta);
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -481,13 +481,10 @@ class _TestMenusState extends State<_TestMenus> {
|
|||
switch (checkboxState) {
|
||||
case false:
|
||||
checkboxState = true;
|
||||
break;
|
||||
case true:
|
||||
checkboxState = null;
|
||||
break;
|
||||
case null:
|
||||
checkboxState = false;
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -506,10 +503,8 @@ class _TestMenusState extends State<_TestMenus> {
|
|||
case TestMenu.radioMenu2:
|
||||
case TestMenu.radioMenu3:
|
||||
shortcuts[item.shortcut!] = VoidCallbackIntent(() => _setRadio(item));
|
||||
break;
|
||||
case TestMenu.subMenu1:
|
||||
shortcuts[item.shortcut!] = VoidCallbackIntent(() => _setCheck(item));
|
||||
break;
|
||||
case TestMenu.mainMenu1:
|
||||
case TestMenu.mainMenu2:
|
||||
case TestMenu.mainMenu3:
|
||||
|
@ -529,7 +524,6 @@ class _TestMenusState extends State<_TestMenus> {
|
|||
case TestMenu.standaloneMenu1:
|
||||
case TestMenu.standaloneMenu2:
|
||||
shortcuts[item.shortcut!] = VoidCallbackIntent(() => _itemSelected(item));
|
||||
break;
|
||||
}
|
||||
}
|
||||
_shortcutsEntry = ShortcutRegistry.of(context).addAll(shortcuts);
|
||||
|
|
|
@ -170,8 +170,7 @@ class _FuzzerState extends State<Fuzzer> with SingleTickerProviderStateMixin {
|
|||
case 0:
|
||||
return const TextStyle();
|
||||
case 1:
|
||||
style = const TextStyle();
|
||||
break; // and mutate it below
|
||||
style = const TextStyle(); // is mutated below
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@ -211,7 +210,6 @@ class _FuzzerState extends State<Fuzzer> with SingleTickerProviderStateMixin {
|
|||
case 3:
|
||||
return value.withBlue(value.blue + _random.nextInt(10) - 5);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
return null;
|
||||
}
|
||||
|
@ -322,10 +320,8 @@ class _FuzzerState extends State<Fuzzer> with SingleTickerProviderStateMixin {
|
|||
case 3:
|
||||
case 4:
|
||||
children.insert(_random.nextInt(children.length + 1), _createRandomTextSpan());
|
||||
break;
|
||||
case 10:
|
||||
children = children.reversed.toList();
|
||||
break;
|
||||
case 20:
|
||||
if (children.isEmpty) {
|
||||
break;
|
||||
|
@ -337,7 +333,6 @@ class _FuzzerState extends State<Fuzzer> with SingleTickerProviderStateMixin {
|
|||
if (depthOf(children[index]) < 3) {
|
||||
children.removeAt(index);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (children.isEmpty && _random.nextBool()) {
|
||||
return null;
|
||||
|
|
|
@ -405,10 +405,8 @@ String generateType(Map<String, dynamic>? attributes) {
|
|||
switch (attributes['x-flutter-type'] as String?) {
|
||||
case 'icuShortTimePattern':
|
||||
type = 'TimeOfDayFormat';
|
||||
break;
|
||||
case 'scriptCategory':
|
||||
type = 'ScriptCategory';
|
||||
break;
|
||||
}
|
||||
}
|
||||
return type + (optional ? '?' : '');
|
||||
|
|
|
@ -71,12 +71,10 @@ class LocaleInfo implements Comparable<LocaleInfo> {
|
|||
case 'CN':
|
||||
case 'SG':
|
||||
scriptCode = 'Hans';
|
||||
break;
|
||||
case 'TW':
|
||||
case 'HK':
|
||||
case 'MO':
|
||||
scriptCode = 'Hant';
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -339,13 +337,10 @@ void precacheLanguageAndRegionTags() {
|
|||
switch (type) {
|
||||
case 'language':
|
||||
_languages[subtag] = description;
|
||||
break;
|
||||
case 'region':
|
||||
_regions[subtag] = description;
|
||||
break;
|
||||
case 'script':
|
||||
_scripts[subtag] = description;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -156,16 +156,12 @@ class PathCommandAnimation {
|
|||
switch (type) {
|
||||
case 'M':
|
||||
dartCommandClass = '_PathMoveTo';
|
||||
break;
|
||||
case 'C':
|
||||
dartCommandClass = '_PathCubicTo';
|
||||
break;
|
||||
case 'L':
|
||||
dartCommandClass = '_PathLineTo';
|
||||
break;
|
||||
case 'Z':
|
||||
dartCommandClass = '_PathClose';
|
||||
break;
|
||||
default:
|
||||
throw Exception('unsupported path command: $type');
|
||||
}
|
||||
|
|
|
@ -80,10 +80,8 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
|
|||
curve: Curves.easeOut,
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
showModal(context);
|
||||
break;
|
||||
}
|
||||
setState(
|
||||
() {
|
||||
|
|
|
@ -178,22 +178,17 @@ class _MyCascadingMenuState extends State<MyCascadingMenu> {
|
|||
applicationName: 'MenuBar Sample',
|
||||
applicationVersion: '1.0.0',
|
||||
);
|
||||
break;
|
||||
case MenuEntry.hideMessage:
|
||||
case MenuEntry.showMessage:
|
||||
showingMessage = !showingMessage;
|
||||
break;
|
||||
case MenuEntry.colorMenu:
|
||||
break;
|
||||
case MenuEntry.colorRed:
|
||||
backgroundColor = Colors.red;
|
||||
break;
|
||||
case MenuEntry.colorGreen:
|
||||
backgroundColor = Colors.green;
|
||||
break;
|
||||
case MenuEntry.colorBlue:
|
||||
backgroundColor = Colors.blue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -169,22 +169,17 @@ class _MyContextMenuState extends State<MyContextMenu> {
|
|||
applicationName: 'MenuBar Sample',
|
||||
applicationVersion: '1.0.0',
|
||||
);
|
||||
break;
|
||||
case MenuEntry.showMessage:
|
||||
case MenuEntry.hideMessage:
|
||||
showingMessage = !showingMessage;
|
||||
break;
|
||||
case MenuEntry.colorMenu:
|
||||
break;
|
||||
case MenuEntry.colorRed:
|
||||
backgroundColor = Colors.red;
|
||||
break;
|
||||
case MenuEntry.colorGreen:
|
||||
backgroundColor = Colors.green;
|
||||
break;
|
||||
case MenuEntry.colorBlue:
|
||||
backgroundColor = Colors.blue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -46,12 +46,10 @@ class _PlatformMenuBarExampleState extends State<PlatformMenuBarExample> {
|
|||
applicationName: 'MenuBar Sample',
|
||||
applicationVersion: '1.0.0',
|
||||
);
|
||||
break;
|
||||
case MenuSelection.showMessage:
|
||||
setState(() {
|
||||
_showMessage = !_showMessage;
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -185,15 +185,12 @@ class _RenderSelectableAdapter extends RenderProxyBox with Selectable, Selection
|
|||
_end = adjustedPoint;
|
||||
}
|
||||
result = SelectionUtils.getResultBasedOnRect(renderObjectRect, point);
|
||||
break;
|
||||
case SelectionEventType.clear:
|
||||
_start = _end = null;
|
||||
break;
|
||||
case SelectionEventType.selectAll:
|
||||
case SelectionEventType.selectWord:
|
||||
_start = Offset.zero;
|
||||
_end = Offset.infinite;
|
||||
break;
|
||||
case SelectionEventType.granularlyExtendSelection:
|
||||
result = SelectionResult.end;
|
||||
final GranularlyExtendSelectionEvent extendSelectionEvent = event as GranularlyExtendSelectionEvent;
|
||||
|
@ -218,7 +215,6 @@ class _RenderSelectableAdapter extends RenderProxyBox with Selectable, Selection
|
|||
}
|
||||
_start = newOffset;
|
||||
}
|
||||
break;
|
||||
case SelectionEventType.directionallyExtendSelection:
|
||||
result = SelectionResult.end;
|
||||
final DirectionallyExtendSelectionEvent extendSelectionEvent = event as DirectionallyExtendSelectionEvent;
|
||||
|
@ -240,7 +236,6 @@ class _RenderSelectableAdapter extends RenderProxyBox with Selectable, Selection
|
|||
} else {
|
||||
newOffset = Offset.infinite;
|
||||
}
|
||||
break;
|
||||
case SelectionExtendDirection.nextLine:
|
||||
case SelectionExtendDirection.forward:
|
||||
forward = true;
|
||||
|
@ -254,7 +249,6 @@ class _RenderSelectableAdapter extends RenderProxyBox with Selectable, Selection
|
|||
} else {
|
||||
newOffset = Offset.zero;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (extendSelectionEvent.isEnd) {
|
||||
if (newOffset == _end) {
|
||||
|
@ -267,7 +261,6 @@ class _RenderSelectableAdapter extends RenderProxyBox with Selectable, Selection
|
|||
}
|
||||
_start = newOffset;
|
||||
}
|
||||
break;
|
||||
}
|
||||
_updateGeometry();
|
||||
return result;
|
||||
|
|
|
@ -87,7 +87,6 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
|
|||
child: Text('Select a lot'),
|
||||
),
|
||||
];
|
||||
break;
|
||||
case ConnectionState.waiting:
|
||||
children = const <Widget>[
|
||||
SizedBox(
|
||||
|
@ -100,7 +99,6 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
|
|||
child: Text('Awaiting bids...'),
|
||||
),
|
||||
];
|
||||
break;
|
||||
case ConnectionState.active:
|
||||
children = <Widget>[
|
||||
const Icon(
|
||||
|
@ -113,7 +111,6 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
|
|||
child: Text('\$${snapshot.data}'),
|
||||
),
|
||||
];
|
||||
break;
|
||||
case ConnectionState.done:
|
||||
children = <Widget>[
|
||||
const Icon(
|
||||
|
@ -126,7 +123,6 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
|
|||
child: Text('\$${snapshot.data} (closed)'),
|
||||
),
|
||||
];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,6 @@ class _CascadeLayoutDelegate extends MultiChildLayoutDelegate {
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
childPosition += Offset(size.width, 0);
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
break;
|
||||
}
|
||||
|
@ -66,11 +65,9 @@ class _CascadeLayoutDelegate extends MultiChildLayoutDelegate {
|
|||
case TextDirection.rtl:
|
||||
positionChild(color, childPosition - Offset(currentSize.width, 0));
|
||||
childPosition += Offset(-currentSize.width, currentSize.height - overlap);
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
positionChild(color, childPosition);
|
||||
childPosition += Offset(currentSize.width, currentSize.height - overlap);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,7 +105,6 @@ class SignUpPage extends StatelessWidget {
|
|||
// Assume CollectPersonalInfoPage collects personal info and then
|
||||
// navigates to 'signup/choose_credentials'.
|
||||
builder = (BuildContext context) => const CollectPersonalInfoPage();
|
||||
break;
|
||||
case 'signup/choose_credentials':
|
||||
// Assume ChooseCredentialsPage collects new credentials and then
|
||||
// invokes 'onSignupComplete()'.
|
||||
|
@ -119,7 +118,6 @@ class SignUpPage extends StatelessWidget {
|
|||
Navigator.of(context).pop();
|
||||
},
|
||||
);
|
||||
break;
|
||||
default:
|
||||
throw Exception('Invalid route: ${settings.name}');
|
||||
}
|
||||
|
|
|
@ -32,18 +32,14 @@ void main() {
|
|||
switch (defaultTargetPlatform) {
|
||||
case TargetPlatform.iOS:
|
||||
expect(find.byType(CupertinoTextSelectionToolbarButton), findsAtLeastNWidgets(1));
|
||||
break;
|
||||
case TargetPlatform.android:
|
||||
case TargetPlatform.fuchsia:
|
||||
expect(find.byType(TextSelectionToolbarTextButton), findsAtLeastNWidgets(1));
|
||||
break;
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.windows:
|
||||
expect(find.byType(DesktopTextSelectionToolbarButton), findsAtLeastNWidgets(1));
|
||||
break;
|
||||
case TargetPlatform.macOS:
|
||||
expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsAtLeastNWidgets(1));
|
||||
break;
|
||||
}
|
||||
expect(find.text('Copy'), findsNothing);
|
||||
expect(find.text('Cut'), findsNothing);
|
||||
|
|
|
@ -23,18 +23,14 @@ void main() {
|
|||
switch (platform) {
|
||||
case TargetPlatform.iOS:
|
||||
expect(theme.builders[platform], isA<CupertinoPageTransitionsBuilder>());
|
||||
break;
|
||||
case TargetPlatform.linux:
|
||||
expect(theme.builders[platform], isA<OpenUpwardsPageTransitionsBuilder>());
|
||||
break;
|
||||
case TargetPlatform.macOS:
|
||||
expect(theme.builders[platform], isA<FadeUpwardsPageTransitionsBuilder>());
|
||||
break;
|
||||
case TargetPlatform.android:
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.windows:
|
||||
expect(theme.builders[platform], isNull);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,14 +25,12 @@ void main() {
|
|||
expect(theme.builders[platform], isA<ZoomPageTransitionsBuilder>());
|
||||
final ZoomPageTransitionsBuilder builder = theme.builders[platform]! as ZoomPageTransitionsBuilder;
|
||||
expect(builder.allowSnapshotting, isFalse);
|
||||
break;
|
||||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.macOS:
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.windows:
|
||||
expect(theme.builders[platform], isNull);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -576,7 +576,6 @@ class AnimationController extends Animation<double>
|
|||
// pattern of an eternally repeating animation might cause an endless loop if it weren't delayed
|
||||
// for at least one frame.
|
||||
scale = 0.05;
|
||||
break;
|
||||
case AnimationBehavior.preserve:
|
||||
break;
|
||||
}
|
||||
|
@ -696,7 +695,6 @@ class AnimationController extends Animation<double>
|
|||
switch (behavior) {
|
||||
case AnimationBehavior.normal:
|
||||
scale = 200.0; // This is arbitrary (it was chosen because it worked for the drawer widget).
|
||||
break;
|
||||
case AnimationBehavior.preserve:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -424,13 +424,10 @@ class CurvedAnimation extends Animation<double> with AnimationWithParentMixin<do
|
|||
case AnimationStatus.dismissed:
|
||||
case AnimationStatus.completed:
|
||||
_curveDirection = null;
|
||||
break;
|
||||
case AnimationStatus.forward:
|
||||
_curveDirection ??= AnimationStatus.forward;
|
||||
break;
|
||||
case AnimationStatus.reverse:
|
||||
_curveDirection ??= AnimationStatus.reverse;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -571,10 +568,8 @@ class TrainHoppingAnimation extends Animation<double>
|
|||
switch (_mode!) {
|
||||
case _TrainHoppingMode.minimize:
|
||||
hop = _nextTrain!.value <= _currentTrain!.value;
|
||||
break;
|
||||
case _TrainHoppingMode.maximize:
|
||||
hop = _nextTrain!.value >= _currentTrain!.value;
|
||||
break;
|
||||
}
|
||||
if (hop) {
|
||||
_currentTrain!
|
||||
|
|
|
@ -1041,20 +1041,15 @@ class CupertinoDynamicColor extends Color with Diagnosticable {
|
|||
switch (level) {
|
||||
case CupertinoUserInterfaceLevelData.base:
|
||||
resolved = isHighContrastEnabled ? highContrastColor : color;
|
||||
break;
|
||||
case CupertinoUserInterfaceLevelData.elevated:
|
||||
resolved = isHighContrastEnabled ? highContrastElevatedColor : elevatedColor;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Brightness.dark:
|
||||
switch (level) {
|
||||
case CupertinoUserInterfaceLevelData.base:
|
||||
resolved = isHighContrastEnabled ? darkHighContrastColor : darkColor;
|
||||
break;
|
||||
case CupertinoUserInterfaceLevelData.elevated:
|
||||
resolved = isHighContrastEnabled ? darkHighContrastElevatedColor : darkElevatedColor;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -564,7 +564,6 @@ class _CupertinoContextMenuState extends State<CupertinoContextMenu> with Ticker
|
|||
}
|
||||
_lastOverlayEntry?.remove();
|
||||
_lastOverlayEntry = null;
|
||||
break;
|
||||
|
||||
case AnimationStatus.completed:
|
||||
setState(() {
|
||||
|
@ -580,7 +579,6 @@ class _CupertinoContextMenuState extends State<CupertinoContextMenu> with Ticker
|
|||
_lastOverlayEntry = null;
|
||||
_openController.reset();
|
||||
});
|
||||
break;
|
||||
|
||||
case AnimationStatus.forward:
|
||||
case AnimationStatus.reverse:
|
||||
|
|
|
@ -428,7 +428,6 @@ class CupertinoDatePicker extends StatefulWidget {
|
|||
longestText = date;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case _PickerColumnType.hour:
|
||||
for (int i = 0; i < 24; i++) {
|
||||
final String hour = localizations.datePickerHour(i);
|
||||
|
@ -436,7 +435,6 @@ class CupertinoDatePicker extends StatefulWidget {
|
|||
longestText = hour;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case _PickerColumnType.minute:
|
||||
for (int i = 0; i < 60; i++) {
|
||||
final String minute = localizations.datePickerMinute(i);
|
||||
|
@ -444,13 +442,11 @@ class CupertinoDatePicker extends StatefulWidget {
|
|||
longestText = minute;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case _PickerColumnType.dayPeriod:
|
||||
longestText =
|
||||
localizations.anteMeridiemAbbreviation.length > localizations.postMeridiemAbbreviation.length
|
||||
? localizations.anteMeridiemAbbreviation
|
||||
: localizations.postMeridiemAbbreviation;
|
||||
break;
|
||||
case _PickerColumnType.dayOfMonth:
|
||||
int longestDayOfMonth = 1;
|
||||
for (int i = 1; i <=31; i++) {
|
||||
|
@ -468,7 +464,6 @@ class CupertinoDatePicker extends StatefulWidget {
|
|||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case _PickerColumnType.month:
|
||||
for (int i = 1; i <=12; i++) {
|
||||
final String month = localizations.datePickerMonth(i);
|
||||
|
@ -476,10 +471,8 @@ class CupertinoDatePicker extends StatefulWidget {
|
|||
longestText = month;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case _PickerColumnType.year:
|
||||
longestText = localizations.datePickerYear(2018);
|
||||
break;
|
||||
}
|
||||
|
||||
assert(longestText != '', 'column type is not appropriate');
|
||||
|
@ -1400,7 +1393,6 @@ class _CupertinoDatePickerDateState extends State<CupertinoDatePicker> {
|
|||
estimatedColumnWidths[_PickerColumnType.dayOfMonth.index]!,
|
||||
estimatedColumnWidths[_PickerColumnType.year.index]!,
|
||||
];
|
||||
break;
|
||||
case DatePickerDateOrder.dmy:
|
||||
pickerBuilders = <_ColumnBuilder>[_buildDayPicker, _buildMonthPicker, _buildYearPicker];
|
||||
columnWidths = <double>[
|
||||
|
@ -1408,7 +1400,6 @@ class _CupertinoDatePickerDateState extends State<CupertinoDatePicker> {
|
|||
estimatedColumnWidths[_PickerColumnType.month.index]!,
|
||||
estimatedColumnWidths[_PickerColumnType.year.index]!,
|
||||
];
|
||||
break;
|
||||
case DatePickerDateOrder.ymd:
|
||||
pickerBuilders = <_ColumnBuilder>[_buildYearPicker, _buildMonthPicker, _buildDayPicker];
|
||||
columnWidths = <double>[
|
||||
|
@ -1416,7 +1407,6 @@ class _CupertinoDatePickerDateState extends State<CupertinoDatePicker> {
|
|||
estimatedColumnWidths[_PickerColumnType.month.index]!,
|
||||
estimatedColumnWidths[_PickerColumnType.dayOfMonth.index]!,
|
||||
];
|
||||
break;
|
||||
case DatePickerDateOrder.ydm:
|
||||
pickerBuilders = <_ColumnBuilder>[_buildYearPicker, _buildDayPicker, _buildMonthPicker];
|
||||
columnWidths = <double>[
|
||||
|
@ -1424,7 +1414,6 @@ class _CupertinoDatePickerDateState extends State<CupertinoDatePicker> {
|
|||
estimatedColumnWidths[_PickerColumnType.dayOfMonth.index]!,
|
||||
estimatedColumnWidths[_PickerColumnType.month.index]!,
|
||||
];
|
||||
break;
|
||||
}
|
||||
|
||||
final List<Widget> pickers = <Widget>[];
|
||||
|
@ -2099,7 +2088,6 @@ class _CupertinoTimerPickerState extends State<CupertinoTimerPicker> {
|
|||
_endSelectionOverlay,
|
||||
),
|
||||
];
|
||||
break;
|
||||
case CupertinoTimerPickerMode.ms:
|
||||
final double secondLabelContentWidth = baseLabelContentWidth + secondLabelWidth;
|
||||
double secondColumnEndPadding =
|
||||
|
@ -2130,7 +2118,6 @@ class _CupertinoTimerPickerState extends State<CupertinoTimerPicker> {
|
|||
_endSelectionOverlay,
|
||||
),
|
||||
];
|
||||
break;
|
||||
case CupertinoTimerPickerMode.hms:
|
||||
final double hourColumnEndPadding =
|
||||
pickerColumnWidth - baseLabelContentWidth - hourLabelWidth - _kTimerPickerMinHorizontalPadding;
|
||||
|
@ -2162,7 +2149,6 @@ class _CupertinoTimerPickerState extends State<CupertinoTimerPicker> {
|
|||
_endSelectionOverlay,
|
||||
),
|
||||
];
|
||||
break;
|
||||
}
|
||||
final CupertinoThemeData themeData = CupertinoTheme.of(context);
|
||||
return MediaQuery(
|
||||
|
|
|
@ -898,10 +898,8 @@ class _CupertinoDialogRenderElement extends RenderObjectElement {
|
|||
switch (slot) {
|
||||
case _AlertDialogSections.contentSection:
|
||||
renderObject.contentSection = child as RenderBox;
|
||||
break;
|
||||
case _AlertDialogSections.actionsSection:
|
||||
renderObject.actionsSection = child as RenderBox;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -420,10 +420,8 @@ class CupertinoListSection extends StatelessWidget {
|
|||
switch (type) {
|
||||
case CupertinoListSectionType.insetGrouped:
|
||||
childrenGroupBorderRadius = _kDefaultInsetGroupedBorderRadius;
|
||||
break;
|
||||
case CupertinoListSectionType.base:
|
||||
childrenGroupBorderRadius = BorderRadius.zero;
|
||||
break;
|
||||
}
|
||||
|
||||
// Refactored the decorate children group in one place to avoid repeating it
|
||||
|
|
|
@ -292,10 +292,8 @@ class _CupertinoListTileState extends State<CupertinoListTile> {
|
|||
switch (widget._type) {
|
||||
case _CupertinoListTileType.base:
|
||||
padding = widget.subtitle == null ? _kPadding : _kPaddingWithSubtitle;
|
||||
break;
|
||||
case _CupertinoListTileType.notched:
|
||||
padding = widget.leading == null ? _kNotchedPaddingWithoutLeading : _kNotchedPadding;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -331,10 +329,8 @@ class _CupertinoListTileState extends State<CupertinoListTile> {
|
|||
switch (widget._type) {
|
||||
case _CupertinoListTileType.base:
|
||||
minHeight = subtitle == null ? _kMinHeight : _kMinHeightWithSubtitle;
|
||||
break;
|
||||
case _CupertinoListTileType.notched:
|
||||
minHeight = widget.leading == null ? _kNotchedMinHeightWithoutLeading : _kNotchedMinHeight;
|
||||
break;
|
||||
}
|
||||
|
||||
final Widget child = Container(
|
||||
|
|
|
@ -144,10 +144,8 @@ Widget _wrapWithBackground({
|
|||
switch (newBrightness) {
|
||||
case Brightness.dark:
|
||||
overlayStyle = SystemUiOverlayStyle.light;
|
||||
break;
|
||||
case Brightness.light:
|
||||
overlayStyle = SystemUiOverlayStyle.dark;
|
||||
break;
|
||||
}
|
||||
// [SystemUiOverlayStyle.light] and [SystemUiOverlayStyle.dark] set some system
|
||||
// navigation bar properties,
|
||||
|
@ -1544,7 +1542,6 @@ class _BackChevron extends StatelessWidget {
|
|||
transformHitTests: false,
|
||||
child: iconWidget,
|
||||
);
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -237,14 +237,12 @@ class _CupertinoPickerState extends State<CupertinoPicker> {
|
|||
switch (defaultTargetPlatform) {
|
||||
case TargetPlatform.iOS:
|
||||
hasSuitableHapticHardware = true;
|
||||
break;
|
||||
case TargetPlatform.android:
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.macOS:
|
||||
case TargetPlatform.windows:
|
||||
hasSuitableHapticHardware = false;
|
||||
break;
|
||||
}
|
||||
if (hasSuitableHapticHardware && index != _lastHapticIndex) {
|
||||
_lastHapticIndex = index;
|
||||
|
|
|
@ -533,7 +533,6 @@ class _CupertinoSliverRefreshControlState extends State<CupertinoSliverRefreshCo
|
|||
} else {
|
||||
nextState = RefreshIndicatorMode.inactive;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return nextState;
|
||||
|
|
|
@ -948,11 +948,9 @@ class _CupertinoEdgeShadowPainter extends BoxPainter {
|
|||
case TextDirection.rtl:
|
||||
start = offset.dx + configuration.size!.width;
|
||||
shadowDirection = 1;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
start = offset.dx;
|
||||
shadowDirection = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
int bandColorIndex = 0;
|
||||
|
|
|
@ -188,10 +188,8 @@ class _CupertinoScrollbarState extends RawScrollbarState<CupertinoScrollbar> {
|
|||
switch (direction) {
|
||||
case Axis.vertical:
|
||||
_pressStartAxisPosition = localPosition.dy;
|
||||
break;
|
||||
case Axis.horizontal:
|
||||
_pressStartAxisPosition = localPosition.dx;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -220,13 +218,11 @@ class _CupertinoScrollbarState extends RawScrollbarState<CupertinoScrollbar> {
|
|||
(localPosition.dy - _pressStartAxisPosition).abs() > 0) {
|
||||
HapticFeedback.mediumImpact();
|
||||
}
|
||||
break;
|
||||
case Axis.horizontal:
|
||||
if (velocity.pixelsPerSecond.dx.abs() < 10 &&
|
||||
(localPosition.dx - _pressStartAxisPosition).abs() > 0) {
|
||||
HapticFeedback.mediumImpact();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -657,14 +657,12 @@ class _RenderSegmentedControl<T> extends RenderBox
|
|||
lastChild,
|
||||
firstChild,
|
||||
);
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
_layoutRects(
|
||||
childAfter,
|
||||
firstChild,
|
||||
lastChild,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
size = _computeOverallSizeFromChildSize(childSize);
|
||||
|
|
|
@ -456,10 +456,8 @@ class _RenderCupertinoSlider extends RenderConstrainedBox implements MouseTracke
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
visualPosition = 1.0 - _value;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
visualPosition = _value;
|
||||
break;
|
||||
}
|
||||
return lerpDouble(_trackLeft + CupertinoThumbPainter.radius, _trackRight - CupertinoThumbPainter.radius, visualPosition)!;
|
||||
}
|
||||
|
@ -475,10 +473,8 @@ class _RenderCupertinoSlider extends RenderConstrainedBox implements MouseTracke
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
_currentDragValue -= valueDelta;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
_currentDragValue += valueDelta;
|
||||
break;
|
||||
}
|
||||
onChanged!(_discretizedCurrentDragValue);
|
||||
}
|
||||
|
@ -522,12 +518,10 @@ class _RenderCupertinoSlider extends RenderConstrainedBox implements MouseTracke
|
|||
visualPosition = 1.0 - _position.value;
|
||||
leftColor = _activeColor;
|
||||
rightColor = trackColor;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
visualPosition = _position.value;
|
||||
leftColor = trackColor;
|
||||
rightColor = _activeColor;
|
||||
break;
|
||||
}
|
||||
|
||||
final double trackCenter = offset.dy + size.height / 2.0;
|
||||
|
|
|
@ -498,7 +498,6 @@ class _SegmentedControlState<T> extends State<CupertinoSlidingSegmentedControl<T
|
|||
break;
|
||||
case TextDirection.rtl:
|
||||
index = numOfChildren - 1 - index;
|
||||
break;
|
||||
}
|
||||
|
||||
return widget.children.keys.elementAt(index);
|
||||
|
@ -682,7 +681,6 @@ class _SegmentedControlState<T> extends State<CupertinoSlidingSegmentedControl<T
|
|||
if (highlightedIndex != null) {
|
||||
highlightedIndex = index - 1 - highlightedIndex;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return UnconstrainedBox(
|
||||
|
|
|
@ -303,10 +303,8 @@ class _CupertinoSwitchState extends State<CupertinoSwitch> with TickerProviderSt
|
|||
switch (Directionality.of(context)) {
|
||||
case TextDirection.rtl:
|
||||
_positionController.value -= delta;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
_positionController.value += delta;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -325,7 +323,6 @@ class _CupertinoSwitchState extends State<CupertinoSwitch> with TickerProviderSt
|
|||
switch (defaultTargetPlatform) {
|
||||
case TargetPlatform.iOS:
|
||||
HapticFeedback.lightImpact();
|
||||
break;
|
||||
case TargetPlatform.android:
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.linux:
|
||||
|
@ -609,10 +606,8 @@ class _RenderCupertinoSwitch extends RenderConstrainedBox {
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
visualPosition = 1.0 - currentValue;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
visualPosition = currentValue;
|
||||
break;
|
||||
}
|
||||
|
||||
final Paint paint = Paint()
|
||||
|
|
|
@ -1005,7 +1005,6 @@ class _CupertinoTextFieldState extends State<CupertinoTextField> with Restoratio
|
|||
if (cause == SelectionChangedCause.longPress) {
|
||||
_editableText.bringIntoView(selection.extent);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (defaultTargetPlatform) {
|
||||
|
@ -1019,7 +1018,6 @@ class _CupertinoTextFieldState extends State<CupertinoTextField> with Restoratio
|
|||
if (cause == SelectionChangedCause.drag) {
|
||||
_editableText.hideToolbar();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1186,7 +1184,6 @@ class _CupertinoTextFieldState extends State<CupertinoTextField> with Restoratio
|
|||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.linux:
|
||||
textSelectionControls ??= cupertinoTextSelectionHandleControls;
|
||||
break;
|
||||
|
||||
case TargetPlatform.macOS:
|
||||
case TargetPlatform.windows:
|
||||
|
@ -1197,7 +1194,6 @@ class _CupertinoTextFieldState extends State<CupertinoTextField> with Restoratio
|
|||
_effectiveFocusNode.requestFocus();
|
||||
}
|
||||
};
|
||||
break;
|
||||
}
|
||||
|
||||
final bool enabled = widget.enabled ?? true;
|
||||
|
|
|
@ -587,13 +587,10 @@ class _CupertinoTextSelectionToolbarItemsElement extends RenderObjectElement {
|
|||
switch (slot) {
|
||||
case _CupertinoTextSelectionToolbarItemsSlot.backButton:
|
||||
renderObject.backButton = child;
|
||||
break;
|
||||
case _CupertinoTextSelectionToolbarItemsSlot.nextButton:
|
||||
renderObject.nextButton = child;
|
||||
break;
|
||||
case _CupertinoTextSelectionToolbarItemsSlot.nextButtonDisabled:
|
||||
renderObject.nextButtonDisabled = child;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -76,13 +76,10 @@ mixin ToggleableStateMixin<S extends StatefulWidget> on TickerProviderStateMixin
|
|||
switch (value) {
|
||||
case false:
|
||||
onChanged!(true);
|
||||
break;
|
||||
case true:
|
||||
onChanged!(tristate ? null : false);
|
||||
break;
|
||||
case null:
|
||||
onChanged!(false);
|
||||
break;
|
||||
}
|
||||
context.findRenderObject()!.sendSemanticsEvent(const TapSemanticEvent());
|
||||
}
|
||||
|
|
|
@ -566,22 +566,16 @@ abstract class BindingBase {
|
|||
switch (parameters['value']) {
|
||||
case 'android':
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.android;
|
||||
break;
|
||||
case 'fuchsia':
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
|
||||
break;
|
||||
case 'iOS':
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
|
||||
break;
|
||||
case 'linux':
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.linux;
|
||||
break;
|
||||
case 'macOS':
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.macOS;
|
||||
break;
|
||||
case 'windows':
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.windows;
|
||||
break;
|
||||
case 'default':
|
||||
default:
|
||||
debugDefaultTargetPlatformOverride = null;
|
||||
|
@ -607,10 +601,8 @@ abstract class BindingBase {
|
|||
switch (parameters['value']) {
|
||||
case 'Brightness.light':
|
||||
debugBrightnessOverride = ui.Brightness.light;
|
||||
break;
|
||||
case 'Brightness.dark':
|
||||
debugBrightnessOverride = ui.Brightness.dark;
|
||||
break;
|
||||
default:
|
||||
debugBrightnessOverride = null;
|
||||
}
|
||||
|
|
|
@ -65,12 +65,10 @@ Future<Uint8List> consolidateHttpClientResponseBytes(
|
|||
// We need to un-compress the bytes as they come in.
|
||||
sink = gzip.decoder.startChunkedConversion(output);
|
||||
}
|
||||
break;
|
||||
case HttpClientResponseCompressionState.decompressed:
|
||||
// response.contentLength will not match our bytes stream, so we declare
|
||||
// that we don't know the expected content length.
|
||||
expectedContentLength = null;
|
||||
break;
|
||||
case HttpClientResponseCompressionState.notCompressed:
|
||||
// Fall-through.
|
||||
break;
|
||||
|
|
|
@ -907,13 +907,11 @@ class _PrefixedStringBuilder {
|
|||
}
|
||||
lastWordStart = index;
|
||||
mode = _WordWrapParseMode.inWord;
|
||||
break;
|
||||
case _WordWrapParseMode.inWord: // looking for a good break point. Treat all text
|
||||
while ((index < message.length) && (message[index] != ' ' || noWrap(index))) {
|
||||
index += 1;
|
||||
}
|
||||
mode = _WordWrapParseMode.atBreak;
|
||||
break;
|
||||
case _WordWrapParseMode.atBreak: // at start of break point
|
||||
if ((index - startForLengthCalculations > width) || (index == message.length)) {
|
||||
// we are over the width line, so break
|
||||
|
@ -953,7 +951,6 @@ class _PrefixedStringBuilder {
|
|||
// skip to the end of this break point
|
||||
mode = _WordWrapParseMode.inSpace;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -176,12 +176,10 @@ class LicenseEntryWithLineBreaks extends LicenseEntry {
|
|||
lineStart = currentPosition + 1;
|
||||
currentLineIndent += 1;
|
||||
state = _LicenseEntryWithLineBreaksParserState.beforeParagraph;
|
||||
break;
|
||||
case '\t':
|
||||
lineStart = currentPosition + 1;
|
||||
currentLineIndent += 8;
|
||||
state = _LicenseEntryWithLineBreaksParserState.beforeParagraph;
|
||||
break;
|
||||
case '\r':
|
||||
case '\n':
|
||||
case '\f':
|
||||
|
@ -197,7 +195,6 @@ class LicenseEntryWithLineBreaks extends LicenseEntry {
|
|||
currentParagraphIndentation = null;
|
||||
lineStart = currentPosition + 1;
|
||||
state = _LicenseEntryWithLineBreaksParserState.beforeParagraph;
|
||||
break;
|
||||
case '[':
|
||||
// This is a bit of a hack for the LGPL 2.1, which does something like this:
|
||||
//
|
||||
|
@ -224,7 +221,6 @@ class LicenseEntryWithLineBreaks extends LicenseEntry {
|
|||
}
|
||||
state = _LicenseEntryWithLineBreaksParserState.inParagraph;
|
||||
}
|
||||
break;
|
||||
case _LicenseEntryWithLineBreaksParserState.inParagraph:
|
||||
switch (text[currentPosition]) {
|
||||
case '\n':
|
||||
|
@ -233,7 +229,6 @@ class LicenseEntryWithLineBreaks extends LicenseEntry {
|
|||
currentLineIndent = 0;
|
||||
lineStart = currentPosition + 1;
|
||||
state = _LicenseEntryWithLineBreaksParserState.beforeParagraph;
|
||||
break;
|
||||
case '\f':
|
||||
addLine();
|
||||
result.add(getParagraph());
|
||||
|
@ -242,11 +237,9 @@ class LicenseEntryWithLineBreaks extends LicenseEntry {
|
|||
currentParagraphIndentation = null;
|
||||
lineStart = currentPosition + 1;
|
||||
state = _LicenseEntryWithLineBreaksParserState.beforeParagraph;
|
||||
break;
|
||||
default:
|
||||
state = _LicenseEntryWithLineBreaksParserState.inParagraph;
|
||||
}
|
||||
break;
|
||||
}
|
||||
currentPosition += 1;
|
||||
}
|
||||
|
@ -255,11 +248,9 @@ class LicenseEntryWithLineBreaks extends LicenseEntry {
|
|||
if (lines.isNotEmpty) {
|
||||
result.add(getParagraph());
|
||||
}
|
||||
break;
|
||||
case _LicenseEntryWithLineBreaksParserState.inParagraph:
|
||||
addLine();
|
||||
result.add(getParagraph());
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -136,13 +136,11 @@ Iterable<String> debugWordWrap(String message, int width, { String wrapIndent =
|
|||
}
|
||||
lastWordStart = index;
|
||||
mode = _WordWrapParseMode.inWord;
|
||||
break;
|
||||
case _WordWrapParseMode.inWord: // looking for a good break point
|
||||
while ((index < message.length) && (message[index] != ' ')) {
|
||||
index += 1;
|
||||
}
|
||||
mode = _WordWrapParseMode.atBreak;
|
||||
break;
|
||||
case _WordWrapParseMode.atBreak: // at start of break point
|
||||
if ((index - startForLengthCalculations > width) || (index == message.length)) {
|
||||
// we are over the width line, so break
|
||||
|
@ -184,7 +182,6 @@ Iterable<String> debugWordWrap(String message, int width, { String wrapIndent =
|
|||
// skip to the end of this break point
|
||||
mode = _WordWrapParseMode.inSpace;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -580,7 +580,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
onLongPressUp == null) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryLongPressDown == null &&
|
||||
onSecondaryLongPressCancel == null &&
|
||||
|
@ -591,7 +590,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
onSecondaryLongPressUp == null) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryLongPressDown == null &&
|
||||
onTertiaryLongPressCancel == null &&
|
||||
|
@ -602,7 +600,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
onTertiaryLongPressUp == null) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
@ -669,17 +666,14 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onLongPressDown != null) {
|
||||
invokeCallback<void>('onLongPressDown', () => onLongPressDown!(details));
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryLongPressDown != null) {
|
||||
invokeCallback<void>('onSecondaryLongPressDown', () => onSecondaryLongPressDown!(details));
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryLongPressDown != null) {
|
||||
invokeCallback<void>('onTertiaryLongPressDown', () => onTertiaryLongPressDown!(details));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(false, 'Unhandled button $_initialButtons');
|
||||
}
|
||||
|
@ -692,17 +686,14 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onLongPressCancel != null) {
|
||||
invokeCallback<void>('onLongPressCancel', onLongPressCancel!);
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryLongPressCancel != null) {
|
||||
invokeCallback<void>('onSecondaryLongPressCancel', onSecondaryLongPressCancel!);
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryLongPressCancel != null) {
|
||||
invokeCallback<void>('onTertiaryLongPressCancel', onTertiaryLongPressCancel!);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(false, 'Unhandled button $_initialButtons');
|
||||
}
|
||||
|
@ -722,7 +713,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onLongPress != null) {
|
||||
invokeCallback<void>('onLongPress', onLongPress!);
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryLongPressStart != null) {
|
||||
final LongPressStartDetails details = LongPressStartDetails(
|
||||
|
@ -734,7 +724,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onSecondaryLongPress != null) {
|
||||
invokeCallback<void>('onSecondaryLongPress', onSecondaryLongPress!);
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryLongPressStart != null) {
|
||||
final LongPressStartDetails details = LongPressStartDetails(
|
||||
|
@ -746,7 +735,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onTertiaryLongPress != null) {
|
||||
invokeCallback<void>('onTertiaryLongPress', onTertiaryLongPress!);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(false, 'Unhandled button $_initialButtons');
|
||||
}
|
||||
|
@ -764,17 +752,14 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onLongPressMoveUpdate != null) {
|
||||
invokeCallback<void>('onLongPressMoveUpdate', () => onLongPressMoveUpdate!(details));
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryLongPressMoveUpdate != null) {
|
||||
invokeCallback<void>('onSecondaryLongPressMoveUpdate', () => onSecondaryLongPressMoveUpdate!(details));
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryLongPressMoveUpdate != null) {
|
||||
invokeCallback<void>('onTertiaryLongPressMoveUpdate', () => onTertiaryLongPressMoveUpdate!(details));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(false, 'Unhandled button $_initialButtons');
|
||||
}
|
||||
|
@ -800,7 +785,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onLongPressUp != null) {
|
||||
invokeCallback<void>('onLongPressUp', onLongPressUp!);
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryLongPressEnd != null) {
|
||||
invokeCallback<void>('onSecondaryLongPressEnd', () => onSecondaryLongPressEnd!(details));
|
||||
|
@ -808,7 +792,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onSecondaryLongPressUp != null) {
|
||||
invokeCallback<void>('onSecondaryLongPressUp', onSecondaryLongPressUp!);
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryLongPressEnd != null) {
|
||||
invokeCallback<void>('onTertiaryLongPressEnd', () => onTertiaryLongPressEnd!(details));
|
||||
|
@ -816,7 +799,6 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
|
|||
if (onTertiaryLongPressUp != null) {
|
||||
invokeCallback<void>('onTertiaryLongPressUp', onTertiaryLongPressUp!);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(false, 'Unhandled button $_initialButtons');
|
||||
}
|
||||
|
|
|
@ -411,10 +411,8 @@ abstract class DragGestureRecognizer extends OneSequenceGestureRecognizer {
|
|||
case DragStartBehavior.start:
|
||||
_initialPosition = _initialPosition + delta;
|
||||
localUpdateDelta = Offset.zero;
|
||||
break;
|
||||
case DragStartBehavior.down:
|
||||
localUpdateDelta = _getDeltaForDetails(delta.local);
|
||||
break;
|
||||
}
|
||||
_pendingDragOffset = OffsetPair.zero;
|
||||
_lastPendingEventTimestamp = null;
|
||||
|
@ -460,11 +458,9 @@ abstract class DragGestureRecognizer extends OneSequenceGestureRecognizer {
|
|||
case _DragState.possible:
|
||||
resolve(GestureDisposition.rejected);
|
||||
_checkCancel();
|
||||
break;
|
||||
|
||||
case _DragState.accepted:
|
||||
_checkEnd(pointer);
|
||||
break;
|
||||
}
|
||||
_velocityTrackers.clear();
|
||||
_initialButtons = null;
|
||||
|
|
|
@ -762,15 +762,12 @@ class ScaleGestureRecognizer extends OneSequenceGestureRecognizer {
|
|||
switch (_state) {
|
||||
case _ScaleState.possible:
|
||||
resolve(GestureDisposition.rejected);
|
||||
break;
|
||||
case _ScaleState.ready:
|
||||
assert(false); // We should have not seen a pointer yet
|
||||
break;
|
||||
case _ScaleState.accepted:
|
||||
break;
|
||||
case _ScaleState.started:
|
||||
assert(false); // We should be in the accepted state when user is done
|
||||
break;
|
||||
}
|
||||
_state = _ScaleState.ready;
|
||||
}
|
||||
|
|
|
@ -593,7 +593,6 @@ class TapGestureRecognizer extends BaseTapGestureRecognizer {
|
|||
onTapCancel == null) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryTap == null &&
|
||||
onSecondaryTapDown == null &&
|
||||
|
@ -601,14 +600,12 @@ class TapGestureRecognizer extends BaseTapGestureRecognizer {
|
|||
onSecondaryTapCancel == null) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryTapDown == null &&
|
||||
onTertiaryTapUp == null &&
|
||||
onTertiaryTapCancel == null) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
@ -628,17 +625,14 @@ class TapGestureRecognizer extends BaseTapGestureRecognizer {
|
|||
if (onTapDown != null) {
|
||||
invokeCallback<void>('onTapDown', () => onTapDown!(details));
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryTapDown != null) {
|
||||
invokeCallback<void>('onSecondaryTapDown', () => onSecondaryTapDown!(details));
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryTapDown != null) {
|
||||
invokeCallback<void>('onTertiaryTapDown', () => onTertiaryTapDown!(details));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
@ -659,7 +653,6 @@ class TapGestureRecognizer extends BaseTapGestureRecognizer {
|
|||
if (onTap != null) {
|
||||
invokeCallback<void>('onTap', onTap!);
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryTapUp != null) {
|
||||
invokeCallback<void>('onSecondaryTapUp', () => onSecondaryTapUp!(details));
|
||||
|
@ -667,12 +660,10 @@ class TapGestureRecognizer extends BaseTapGestureRecognizer {
|
|||
if (onSecondaryTap != null) {
|
||||
invokeCallback<void>('onSecondaryTap', () => onSecondaryTap!());
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryTapUp != null) {
|
||||
invokeCallback<void>('onTertiaryTapUp', () => onTertiaryTapUp!(details));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
@ -686,17 +677,14 @@ class TapGestureRecognizer extends BaseTapGestureRecognizer {
|
|||
if (onTapCancel != null) {
|
||||
invokeCallback<void>('${note}onTapCancel', onTapCancel!);
|
||||
}
|
||||
break;
|
||||
case kSecondaryButton:
|
||||
if (onSecondaryTapCancel != null) {
|
||||
invokeCallback<void>('${note}onSecondaryTapCancel', onSecondaryTapCancel!);
|
||||
}
|
||||
break;
|
||||
case kTertiaryButton:
|
||||
if (onTertiaryTapCancel != null) {
|
||||
invokeCallback<void>('${note}onTertiaryTapCancel', onTertiaryTapCancel!);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,14 +105,12 @@ class _ActionIcon extends StatelessWidget {
|
|||
switch (defaultTargetPlatform) {
|
||||
case TargetPlatform.android:
|
||||
semanticsLabel = getAndroidSemanticsLabel(MaterialLocalizations.of(context));
|
||||
break;
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.windows:
|
||||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.macOS:
|
||||
semanticsLabel = null;
|
||||
break;
|
||||
}
|
||||
|
||||
return Icon(data, semanticLabel: semanticsLabel);
|
||||
|
|
|
@ -766,10 +766,8 @@ class _AppBarState extends State<AppBar> {
|
|||
case AxisDirection.up:
|
||||
// Scroll view is reversed
|
||||
_scrolledUnder = metrics.extentAfter > 0;
|
||||
break;
|
||||
case AxisDirection.down:
|
||||
_scrolledUnder = metrics.extentBefore > 0;
|
||||
break;
|
||||
case AxisDirection.right:
|
||||
case AxisDirection.left:
|
||||
// Scrolled under is only supported in the vertical axis, and should
|
||||
|
@ -955,7 +953,6 @@ class _AppBarState extends State<AppBar> {
|
|||
case TargetPlatform.linux:
|
||||
case TargetPlatform.windows:
|
||||
namesRoute = true;
|
||||
break;
|
||||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.macOS:
|
||||
break;
|
||||
|
@ -2121,10 +2118,8 @@ class _ScrollUnderFlexibleSpace extends StatelessWidget {
|
|||
switch (variant) {
|
||||
case _ScrollUnderFlexibleVariant.medium:
|
||||
config = _MediumScrollUnderFlexibleConfig(context);
|
||||
break;
|
||||
case _ScrollUnderFlexibleVariant.large:
|
||||
config = _LargeScrollUnderFlexibleConfig(context);
|
||||
break;
|
||||
}
|
||||
|
||||
late final Widget? collapsedTitle;
|
||||
|
|
|
@ -516,10 +516,8 @@ class _BottomNavigationTile extends StatelessWidget {
|
|||
switch (type) {
|
||||
case BottomNavigationBarType.fixed:
|
||||
size = 1;
|
||||
break;
|
||||
case BottomNavigationBarType.shifting:
|
||||
size = (flex! * 1000.0).round();
|
||||
break;
|
||||
}
|
||||
|
||||
Widget result = InkResponse(
|
||||
|
@ -862,7 +860,6 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
_backgroundColor = circle.color;
|
||||
circle.dispose();
|
||||
});
|
||||
break;
|
||||
case AnimationStatus.dismissed:
|
||||
case AnimationStatus.forward:
|
||||
case AnimationStatus.reverse:
|
||||
|
@ -890,7 +887,6 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
break;
|
||||
case BottomNavigationBarType.shifting:
|
||||
_pushCircle(widget.currentIndex);
|
||||
break;
|
||||
}
|
||||
_controllers[oldWidget.currentIndex].reverse();
|
||||
_controllers[widget.currentIndex].forward();
|
||||
|
@ -928,10 +924,8 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
switch (themeData.brightness) {
|
||||
case Brightness.light:
|
||||
themeColor = themeData.colorScheme.primary;
|
||||
break;
|
||||
case Brightness.dark:
|
||||
themeColor = themeData.colorScheme.secondary;
|
||||
break;
|
||||
}
|
||||
|
||||
final TextStyle effectiveSelectedLabelStyle =
|
||||
|
@ -979,7 +973,6 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
?? widget.fixedColor
|
||||
?? themeColor,
|
||||
);
|
||||
break;
|
||||
case BottomNavigationBarType.shifting:
|
||||
colorTween = ColorTween(
|
||||
begin: widget.unselectedItemColor
|
||||
|
@ -989,7 +982,6 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
?? bottomTheme.selectedItemColor
|
||||
?? themeData.colorScheme.surface,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
final ColorTween labelColorTween;
|
||||
|
@ -1006,7 +998,6 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
?? widget.fixedColor
|
||||
?? themeColor,
|
||||
);
|
||||
break;
|
||||
case BottomNavigationBarType.shifting:
|
||||
labelColorTween = ColorTween(
|
||||
begin: effectiveUnselectedLabelStyle.color
|
||||
|
@ -1018,7 +1009,6 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
?? bottomTheme.selectedItemColor
|
||||
?? themeColor,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
final ColorTween iconColorTween;
|
||||
|
@ -1035,7 +1025,6 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
?? widget.fixedColor
|
||||
?? themeColor,
|
||||
);
|
||||
break;
|
||||
case BottomNavigationBarType.shifting:
|
||||
iconColorTween = ColorTween(
|
||||
begin: effectiveUnselectedIconTheme.color
|
||||
|
@ -1047,7 +1036,6 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
?? bottomTheme.selectedItemColor
|
||||
?? themeColor,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
final List<Widget> tiles = <Widget>[];
|
||||
|
@ -1104,10 +1092,8 @@ class _BottomNavigationBarState extends State<BottomNavigationBar> with TickerPr
|
|||
switch (_effectiveType) {
|
||||
case BottomNavigationBarType.fixed:
|
||||
backgroundColor = widget.backgroundColor ?? bottomTheme.backgroundColor;
|
||||
break;
|
||||
case BottomNavigationBarType.shifting:
|
||||
backgroundColor = _backgroundColor;
|
||||
break;
|
||||
}
|
||||
|
||||
return Semantics(
|
||||
|
@ -1277,10 +1263,8 @@ class _RadialPainter extends CustomPainter {
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
leftFraction = 1.0 - circle.horizontalLeadingOffset;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
leftFraction = circle.horizontalLeadingOffset;
|
||||
break;
|
||||
}
|
||||
final Offset center = Offset(leftFraction * size.width, size.height / 2.0);
|
||||
final Tween<double> radiusTween = Tween<double>(
|
||||
|
|
|
@ -415,10 +415,8 @@ class _RawMaterialButtonState extends State<RawMaterialButton> with MaterialStat
|
|||
);
|
||||
assert(minSize.width >= 0.0);
|
||||
assert(minSize.height >= 0.0);
|
||||
break;
|
||||
case MaterialTapTargetSize.shrinkWrap:
|
||||
minSize = Size.zero;
|
||||
break;
|
||||
}
|
||||
|
||||
return Semantics(
|
||||
|
|
|
@ -357,10 +357,8 @@ class _RenderButtonBarRow extends RenderFlex {
|
|||
switch (verticalDirection) {
|
||||
case VerticalDirection.down:
|
||||
child = firstChild;
|
||||
break;
|
||||
case VerticalDirection.up:
|
||||
child = lastChild;
|
||||
break;
|
||||
}
|
||||
|
||||
while (child != null) {
|
||||
|
@ -380,44 +378,34 @@ class _RenderButtonBarRow extends RenderFlex {
|
|||
case MainAxisAlignment.center:
|
||||
final double midpoint = (constraints.maxWidth - child.size.width) / 2.0;
|
||||
childParentData.offset = Offset(midpoint, currentHeight);
|
||||
break;
|
||||
case MainAxisAlignment.end:
|
||||
childParentData.offset = Offset(constraints.maxWidth - child.size.width, currentHeight);
|
||||
break;
|
||||
case MainAxisAlignment.spaceAround:
|
||||
case MainAxisAlignment.spaceBetween:
|
||||
case MainAxisAlignment.spaceEvenly:
|
||||
case MainAxisAlignment.start:
|
||||
childParentData.offset = Offset(0, currentHeight);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TextDirection.rtl:
|
||||
switch (mainAxisAlignment) {
|
||||
case MainAxisAlignment.center:
|
||||
final double midpoint = constraints.maxWidth / 2.0 - child.size.width / 2.0;
|
||||
childParentData.offset = Offset(midpoint, currentHeight);
|
||||
break;
|
||||
case MainAxisAlignment.end:
|
||||
childParentData.offset = Offset(0, currentHeight);
|
||||
break;
|
||||
case MainAxisAlignment.spaceAround:
|
||||
case MainAxisAlignment.spaceBetween:
|
||||
case MainAxisAlignment.spaceEvenly:
|
||||
case MainAxisAlignment.start:
|
||||
childParentData.offset = Offset(constraints.maxWidth - child.size.width, currentHeight);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
currentHeight += child.size.height;
|
||||
switch (verticalDirection) {
|
||||
case VerticalDirection.down:
|
||||
child = childParentData.nextSibling;
|
||||
break;
|
||||
case VerticalDirection.up:
|
||||
child = childParentData.previousSibling;
|
||||
break;
|
||||
}
|
||||
|
||||
if (overflowButtonSpacing != null && child != null) {
|
||||
|
|
|
@ -419,10 +419,8 @@ class _ButtonStyleState extends State<ButtonStyleButton> with TickerProviderStat
|
|||
);
|
||||
assert(minSize.width >= 0.0);
|
||||
assert(minSize.height >= 0.0);
|
||||
break;
|
||||
case MaterialTapTargetSize.shrinkWrap:
|
||||
minSize = Size.zero;
|
||||
break;
|
||||
}
|
||||
|
||||
return Semantics(
|
||||
|
|
|
@ -201,7 +201,6 @@ class _CalendarDatePickerState extends State<CalendarDatePicker> {
|
|||
case TargetPlatform.linux:
|
||||
case TargetPlatform.windows:
|
||||
HapticFeedback.vibrate();
|
||||
break;
|
||||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.macOS:
|
||||
break;
|
||||
|
|
|
@ -425,10 +425,8 @@ class _CheckboxState extends State<Checkbox> with TickerProviderStateMixin, Togg
|
|||
switch (effectiveMaterialTapTargetSize) {
|
||||
case MaterialTapTargetSize.padded:
|
||||
size = const Size(kMinInteractiveDimension, kMinInteractiveDimension);
|
||||
break;
|
||||
case MaterialTapTargetSize.shrinkWrap:
|
||||
size = const Size(kMinInteractiveDimension - 8.0, kMinInteractiveDimension - 8.0);
|
||||
break;
|
||||
}
|
||||
size += effectiveVisualDensity.baseSizeAdjustment;
|
||||
|
||||
|
|
|
@ -411,13 +411,10 @@ class CheckboxListTile extends StatelessWidget {
|
|||
switch (value) {
|
||||
case false:
|
||||
onChanged!(true);
|
||||
break;
|
||||
case true:
|
||||
onChanged!(tristate ? null : false);
|
||||
break;
|
||||
case null:
|
||||
onChanged!(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -445,12 +442,10 @@ class CheckboxListTile extends StatelessWidget {
|
|||
case ListTileControlAffinity.leading:
|
||||
leading = control;
|
||||
trailing = secondary;
|
||||
break;
|
||||
case ListTileControlAffinity.trailing:
|
||||
case ListTileControlAffinity.platform:
|
||||
leading = secondary;
|
||||
trailing = control;
|
||||
break;
|
||||
}
|
||||
final ThemeData theme = Theme.of(context);
|
||||
final CheckboxThemeData checkboxTheme = CheckboxTheme.of(context);
|
||||
|
|
|
@ -1295,10 +1295,8 @@ class _RawChipState extends State<RawChip> with MaterialStateMixin, TickerProvid
|
|||
minWidth: kMinInteractiveDimension + densityAdjustment.dx,
|
||||
minHeight: kMinInteractiveDimension + densityAdjustment.dy,
|
||||
);
|
||||
break;
|
||||
case MaterialTapTargetSize.shrinkWrap:
|
||||
constraints = const BoxConstraints();
|
||||
break;
|
||||
}
|
||||
result = _ChipRedirectingHitDetectionWidget(
|
||||
constraints: constraints,
|
||||
|
@ -1842,7 +1840,6 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
|
|||
} else {
|
||||
_pressRect = Rect.zero;
|
||||
}
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
double start = left;
|
||||
if (theme.showCheckmark || theme.showAvatar) {
|
||||
|
@ -1875,7 +1872,6 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
|
|||
} else {
|
||||
_deleteButtonRect = Rect.zero;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Center the label vertically.
|
||||
labelOffset = labelOffset +
|
||||
|
@ -1919,13 +1915,11 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
|
|||
begin: Colors.white.withAlpha(_kDisabledAlpha),
|
||||
end: Colors.white,
|
||||
);
|
||||
break;
|
||||
case Brightness.dark:
|
||||
enableTween = ColorTween(
|
||||
begin: Colors.black.withAlpha(_kDisabledAlpha),
|
||||
end: Colors.black,
|
||||
);
|
||||
break;
|
||||
}
|
||||
return enableTween.evaluate(enableAnimation)!;
|
||||
}
|
||||
|
@ -1938,10 +1932,8 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
|
|||
switch (theme.brightness) {
|
||||
case Brightness.light:
|
||||
paintColor = theme.showAvatar ? Colors.white : Colors.black.withAlpha(_kCheckmarkAlpha);
|
||||
break;
|
||||
case Brightness.dark:
|
||||
paintColor = theme.showAvatar ? Colors.black : Colors.white.withAlpha(_kCheckmarkAlpha);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -207,19 +207,15 @@ class CircleAvatar extends StatelessWidget {
|
|||
switch (ThemeData.estimateBrightnessForColor(textStyle.color!)) {
|
||||
case Brightness.dark:
|
||||
effectiveBackgroundColor = theme.primaryColorLight;
|
||||
break;
|
||||
case Brightness.light:
|
||||
effectiveBackgroundColor = theme.primaryColorDark;
|
||||
break;
|
||||
}
|
||||
} else if (effectiveForegroundColor == null) {
|
||||
switch (ThemeData.estimateBrightnessForColor(backgroundColor!)) {
|
||||
case Brightness.dark:
|
||||
textStyle = textStyle.copyWith(color: theme.primaryColorLight);
|
||||
break;
|
||||
case Brightness.light:
|
||||
textStyle = textStyle.copyWith(color: theme.primaryColorDark);
|
||||
break;
|
||||
}
|
||||
}
|
||||
final double minDiameter = _minDiameter;
|
||||
|
|
|
@ -205,10 +205,8 @@ class ColorScheme with Diagnosticable {
|
|||
switch (brightness) {
|
||||
case Brightness.light:
|
||||
scheme = Scheme.light(seedColor.value);
|
||||
break;
|
||||
case Brightness.dark:
|
||||
scheme = Scheme.dark(seedColor.value);
|
||||
break;
|
||||
}
|
||||
return ColorScheme(
|
||||
primary: primary ?? Color(scheme.primary),
|
||||
|
@ -1067,10 +1065,8 @@ class ColorScheme with Diagnosticable {
|
|||
switch (brightness) {
|
||||
case Brightness.light:
|
||||
scheme = Scheme.light(baseColor.value);
|
||||
break;
|
||||
case Brightness.dark:
|
||||
scheme = Scheme.dark(baseColor.value);
|
||||
break;
|
||||
}
|
||||
|
||||
return ColorScheme(primary: primary ?? Color(scheme.primary),
|
||||
|
|
|
@ -421,16 +421,13 @@ class _DatePickerDialogState extends State<DatePickerDialog> with RestorationMix
|
|||
_autovalidateMode.value = AutovalidateMode.disabled;
|
||||
_entryMode.value = DatePickerEntryMode.input;
|
||||
_handleOnDatePickerModeChange();
|
||||
break;
|
||||
case DatePickerEntryMode.input:
|
||||
_formKey.currentState!.save();
|
||||
_entryMode.value = DatePickerEntryMode.calendar;
|
||||
_handleOnDatePickerModeChange();
|
||||
break;
|
||||
case DatePickerEntryMode.calendarOnly:
|
||||
case DatePickerEntryMode.inputOnly:
|
||||
assert(false, 'Can not change entry mode from _entryMode');
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -577,12 +574,10 @@ class _DatePickerDialogState extends State<DatePickerDialog> with RestorationMix
|
|||
tooltip: localizations.inputDateModeButtonLabel,
|
||||
onPressed: _handleEntryModeToggle,
|
||||
);
|
||||
break;
|
||||
|
||||
case DatePickerEntryMode.calendarOnly:
|
||||
picker = calendarDatePicker();
|
||||
entryModeButton = null;
|
||||
break;
|
||||
|
||||
case DatePickerEntryMode.input:
|
||||
picker = inputDatePicker();
|
||||
|
@ -592,12 +587,10 @@ class _DatePickerDialogState extends State<DatePickerDialog> with RestorationMix
|
|||
tooltip: localizations.calendarModeButtonLabel,
|
||||
onPressed: _handleEntryModeToggle,
|
||||
);
|
||||
break;
|
||||
|
||||
case DatePickerEntryMode.inputOnly:
|
||||
picker = inputDatePicker();
|
||||
entryModeButton = null;
|
||||
break;
|
||||
}
|
||||
|
||||
final Widget header = _DatePickerHeader(
|
||||
|
@ -1303,7 +1296,6 @@ class _DateRangePickerDialogState extends State<DateRangePickerDialog> with Rest
|
|||
case DatePickerEntryMode.calendar:
|
||||
_autoValidate.value = false;
|
||||
_entryMode.value = DatePickerEntryMode.input;
|
||||
break;
|
||||
|
||||
case DatePickerEntryMode.input:
|
||||
// Validate the range dates
|
||||
|
@ -1322,12 +1314,10 @@ class _DateRangePickerDialogState extends State<DateRangePickerDialog> with Rest
|
|||
_selectedEnd.value = null;
|
||||
}
|
||||
_entryMode.value = DatePickerEntryMode.calendar;
|
||||
break;
|
||||
|
||||
case DatePickerEntryMode.calendarOnly:
|
||||
case DatePickerEntryMode.inputOnly:
|
||||
assert(false, 'Can not change entry mode from $_entryMode');
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -1401,7 +1391,6 @@ class _DateRangePickerDialogState extends State<DateRangePickerDialog> with Rest
|
|||
shadowColor = datePickerTheme.rangePickerShadowColor ?? defaults.rangePickerShadowColor!;
|
||||
surfaceTintColor = datePickerTheme.rangePickerSurfaceTintColor ?? defaults.rangePickerSurfaceTintColor!;
|
||||
shape = datePickerTheme.rangePickerShape ?? defaults.rangePickerShape;
|
||||
break;
|
||||
|
||||
case DatePickerEntryMode.input:
|
||||
case DatePickerEntryMode.inputOnly:
|
||||
|
@ -1477,7 +1466,6 @@ class _DateRangePickerDialogState extends State<DateRangePickerDialog> with Rest
|
|||
: datePickerTheme.shape ?? dialogTheme.shape ?? defaults.shape;
|
||||
|
||||
insetPadding = const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0);
|
||||
break;
|
||||
}
|
||||
|
||||
return Dialog(
|
||||
|
@ -1766,7 +1754,6 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> {
|
|||
case TargetPlatform.android:
|
||||
case TargetPlatform.fuchsia:
|
||||
HapticFeedback.vibrate();
|
||||
break;
|
||||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.macOS:
|
||||
|
@ -2289,11 +2276,9 @@ class _MonthItemState extends State<_MonthItem> {
|
|||
case TraversalDirection.up:
|
||||
case TraversalDirection.left:
|
||||
policy = ScrollPositionAlignmentPolicy.keepVisibleAtStart;
|
||||
break;
|
||||
case TraversalDirection.right:
|
||||
case TraversalDirection.down:
|
||||
policy = ScrollPositionAlignmentPolicy.keepVisibleAtEnd;
|
||||
break;
|
||||
}
|
||||
Scrollable.ensureVisible(primaryFocus!.context!,
|
||||
duration: _monthScrollDuration,
|
||||
|
@ -2609,19 +2594,16 @@ class _HighlightPainter extends CustomPainter {
|
|||
textDirection == TextDirection.ltr ? rectRight : rectLeft,
|
||||
paint,
|
||||
);
|
||||
break;
|
||||
case _HighlightPainterStyle.highlightLeading:
|
||||
canvas.drawRect(
|
||||
textDirection == TextDirection.ltr ? rectLeft : rectRight,
|
||||
paint,
|
||||
);
|
||||
break;
|
||||
case _HighlightPainterStyle.highlightAll:
|
||||
canvas.drawRect(
|
||||
Rect.fromLTWH(0, 0, size.width, size.height),
|
||||
paint,
|
||||
);
|
||||
break;
|
||||
case _HighlightPainterStyle.none:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -495,7 +495,6 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
|
|||
case AnimationStatus.completed:
|
||||
case AnimationStatus.dismissed:
|
||||
_controller.value = widget.isDrawerOpen ? 1.0 : 0.0;
|
||||
break;
|
||||
case AnimationStatus.forward:
|
||||
case AnimationStatus.reverse:
|
||||
break;
|
||||
|
@ -527,11 +526,9 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
|
|||
switch (status) {
|
||||
case AnimationStatus.forward:
|
||||
_ensureHistoryEntry();
|
||||
break;
|
||||
case AnimationStatus.reverse:
|
||||
_historyEntry?.remove();
|
||||
_historyEntry = null;
|
||||
break;
|
||||
case AnimationStatus.dismissed:
|
||||
break;
|
||||
case AnimationStatus.completed:
|
||||
|
@ -581,15 +578,12 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
|
|||
break;
|
||||
case DrawerAlignment.end:
|
||||
delta = -delta;
|
||||
break;
|
||||
}
|
||||
switch (Directionality.of(context)) {
|
||||
case TextDirection.rtl:
|
||||
_controller.value -= delta;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
_controller.value += delta;
|
||||
break;
|
||||
}
|
||||
|
||||
final bool opened = _controller.value > 0.5;
|
||||
|
@ -610,17 +604,14 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
|
|||
break;
|
||||
case DrawerAlignment.end:
|
||||
visualVelocity = -visualVelocity;
|
||||
break;
|
||||
}
|
||||
switch (Directionality.of(context)) {
|
||||
case TextDirection.rtl:
|
||||
_controller.fling(velocity: -visualVelocity);
|
||||
widget.drawerCallback?.call(visualVelocity < 0.0);
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
_controller.fling(velocity: visualVelocity);
|
||||
widget.drawerCallback?.call(visualVelocity > 0.0);
|
||||
break;
|
||||
}
|
||||
} else if (_controller.value < 0.5) {
|
||||
close();
|
||||
|
@ -682,12 +673,10 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
|
|||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.fuchsia:
|
||||
isDesktop = false;
|
||||
break;
|
||||
case TargetPlatform.macOS:
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.windows:
|
||||
isDesktop = true;
|
||||
break;
|
||||
}
|
||||
|
||||
double? dragAreaWidth = widget.edgeDragWidth;
|
||||
|
@ -697,11 +686,9 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
|
|||
case TextDirection.ltr:
|
||||
dragAreaWidth = _kEdgeDragWidth +
|
||||
(drawerIsStart ? padding.left : padding.right);
|
||||
break;
|
||||
case TextDirection.rtl:
|
||||
dragAreaWidth = _kEdgeDragWidth +
|
||||
(drawerIsStart ? padding.right : padding.left);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -727,14 +714,12 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
|
|||
switch (Theme.of(context).platform) {
|
||||
case TargetPlatform.android:
|
||||
platformHasBackButton = true;
|
||||
break;
|
||||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.macOS:
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.windows:
|
||||
platformHasBackButton = false;
|
||||
break;
|
||||
}
|
||||
|
||||
final Widget child = _DrawerControllerScope(
|
||||
|
|
|
@ -120,10 +120,8 @@ class _DropdownMenuItemButtonState<T> extends State<_DropdownMenuItemButton<T>>
|
|||
switch (FocusManager.instance.highlightMode) {
|
||||
case FocusHighlightMode.touch:
|
||||
inTraditionalMode = false;
|
||||
break;
|
||||
case FocusHighlightMode.traditional:
|
||||
inTraditionalMode = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (focused && inTraditionalMode) {
|
||||
|
@ -377,10 +375,8 @@ class _DropdownMenuRouteLayout<T> extends SingleChildLayoutDelegate {
|
|||
switch (textDirection!) {
|
||||
case TextDirection.rtl:
|
||||
left = clampDouble(buttonRect.right, 0.0, size.width) - childSize.width;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
left = clampDouble(buttonRect.left, 0.0, size.width - childSize.width);
|
||||
break;
|
||||
}
|
||||
|
||||
return Offset(left, menuLimits.top);
|
||||
|
|
|
@ -366,12 +366,10 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
|
|||
defaultStyle = MenuItemButton.styleFrom(
|
||||
padding: EdgeInsets.only(left: _kDefaultHorizontalPadding, right: padding),
|
||||
);
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
defaultStyle = MenuItemButton.styleFrom(
|
||||
padding: EdgeInsets.only(left: padding, right: _kDefaultHorizontalPadding),
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < filteredEntries.length; i++) {
|
||||
|
|
|
@ -286,7 +286,6 @@ class _FlexibleSpaceBarState extends State<FlexibleSpaceBar> {
|
|||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.macOS:
|
||||
title = widget.title;
|
||||
break;
|
||||
case TargetPlatform.android:
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.linux:
|
||||
|
@ -295,7 +294,6 @@ class _FlexibleSpaceBarState extends State<FlexibleSpaceBar> {
|
|||
namesRoute: true,
|
||||
child: widget.title,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
// StretchMode.fadeTitle
|
||||
|
|
|
@ -559,13 +559,10 @@ class FloatingActionButton extends StatelessWidget {
|
|||
switch(_floatingActionButtonType) {
|
||||
case _FloatingActionButtonType.regular:
|
||||
sizeConstraints = floatingActionButtonTheme.sizeConstraints ?? defaults.sizeConstraints!;
|
||||
break;
|
||||
case _FloatingActionButtonType.small:
|
||||
sizeConstraints = floatingActionButtonTheme.smallSizeConstraints ?? defaults.smallSizeConstraints!;
|
||||
break;
|
||||
case _FloatingActionButtonType.large:
|
||||
sizeConstraints = floatingActionButtonTheme.largeSizeConstraints ?? defaults.largeSizeConstraints!;
|
||||
break;
|
||||
case _FloatingActionButtonType.extended:
|
||||
sizeConstraints = floatingActionButtonTheme.extendedSizeConstraints ?? defaults.extendedSizeConstraints!;
|
||||
final double iconLabelSpacing = extendedIconLabelSpacing ?? floatingActionButtonTheme.extendedIconLabelSpacing ?? 8.0;
|
||||
|
@ -588,7 +585,6 @@ class FloatingActionButton extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
Widget result = RawMaterialButton(
|
||||
|
|
|
@ -112,7 +112,6 @@ class InkHighlight extends InteractiveInkFeature {
|
|||
switch (_shape) {
|
||||
case BoxShape.circle:
|
||||
canvas.drawCircle(rect.center, _radius ?? Material.defaultSplashRadius, paint);
|
||||
break;
|
||||
case BoxShape.rectangle:
|
||||
if (_borderRadius != BorderRadius.zero) {
|
||||
final RRect clipRRect = RRect.fromRectAndCorners(
|
||||
|
@ -124,7 +123,6 @@ class InkHighlight extends InteractiveInkFeature {
|
|||
} else {
|
||||
canvas.drawRect(rect, paint);
|
||||
}
|
||||
break;
|
||||
}
|
||||
canvas.restore();
|
||||
}
|
||||
|
|
|
@ -920,12 +920,10 @@ class _InkResponseState extends State<_InkResponseStateWidget>
|
|||
switch (type) {
|
||||
case _HighlightType.pressed:
|
||||
statesController.update(MaterialState.pressed, value);
|
||||
break;
|
||||
case _HighlightType.hover:
|
||||
if (callOnHover) {
|
||||
statesController.update(MaterialState.hovered, value);
|
||||
}
|
||||
break;
|
||||
case _HighlightType.focus:
|
||||
// see handleFocusUpdate()
|
||||
break;
|
||||
|
@ -947,13 +945,10 @@ class _InkResponseState extends State<_InkResponseStateWidget>
|
|||
switch (type) {
|
||||
case _HighlightType.pressed:
|
||||
resolvedOverlayColor = widget.highlightColor ?? theme.highlightColor;
|
||||
break;
|
||||
case _HighlightType.focus:
|
||||
resolvedOverlayColor = widget.focusColor ?? theme.focusColor;
|
||||
break;
|
||||
case _HighlightType.hover:
|
||||
resolvedOverlayColor = widget.hoverColor ?? theme.hoverColor;
|
||||
break;
|
||||
}
|
||||
}
|
||||
final RenderBox referenceBox = context.findRenderObject()! as RenderBox;
|
||||
|
@ -982,12 +977,10 @@ class _InkResponseState extends State<_InkResponseStateWidget>
|
|||
switch (type) {
|
||||
case _HighlightType.pressed:
|
||||
widget.onHighlightChanged?.call(value);
|
||||
break;
|
||||
case _HighlightType.hover:
|
||||
if (callOnHover) {
|
||||
widget.onHover?.call(value);
|
||||
}
|
||||
break;
|
||||
case _HighlightType.focus:
|
||||
break;
|
||||
}
|
||||
|
@ -1055,10 +1048,8 @@ class _InkResponseState extends State<_InkResponseStateWidget>
|
|||
switch (FocusManager.instance.highlightMode) {
|
||||
case FocusHighlightMode.touch:
|
||||
showFocus = false;
|
||||
break;
|
||||
case FocusHighlightMode.traditional:
|
||||
showFocus = _shouldShowFocus;
|
||||
break;
|
||||
}
|
||||
updateHighlight(_HighlightType.focus, value: showFocus);
|
||||
}
|
||||
|
|
|
@ -529,12 +529,10 @@ class OutlineInputBorder extends InputBorder {
|
|||
case TextDirection.rtl:
|
||||
final Path path = _gapBorderPath(canvas, center, math.max(0.0, gapStart + gapPadding - extent), extent);
|
||||
canvas.drawPath(path, paint);
|
||||
break;
|
||||
|
||||
case TextDirection.ltr:
|
||||
final Path path = _gapBorderPath(canvas, center, math.max(0.0, gapStart - gapPadding), extent);
|
||||
canvas.drawPath(path, paint);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1364,10 +1364,8 @@ class _RenderDecoration extends RenderBox with SlottedContainerRenderObjectMixin
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
x = 0.0;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
x = _boxSize(icon).width;
|
||||
break;
|
||||
}
|
||||
_boxParentData(container).offset = Offset(x, 0.0);
|
||||
}
|
||||
|
@ -1395,10 +1393,8 @@ class _RenderDecoration extends RenderBox with SlottedContainerRenderObjectMixin
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
x = overallWidth - icon!.size.width;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
x = 0.0;
|
||||
break;
|
||||
}
|
||||
centerLayout(icon!, x);
|
||||
}
|
||||
|
@ -1482,7 +1478,6 @@ class _RenderDecoration extends RenderBox with SlottedContainerRenderObjectMixin
|
|||
if (counter != null) {
|
||||
baselineLayout(counter!, left);
|
||||
}
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
if (helperError != null) {
|
||||
baselineLayout(helperError!, left + _boxSize(icon).width);
|
||||
|
@ -1490,7 +1485,6 @@ class _RenderDecoration extends RenderBox with SlottedContainerRenderObjectMixin
|
|||
if (counter != null) {
|
||||
baselineLayout(counter!, right - counter!.size.width);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1511,7 +1505,6 @@ class _RenderDecoration extends RenderBox with SlottedContainerRenderObjectMixin
|
|||
_boxSize(container).width / 2.0 + floatWidth / 2.0,
|
||||
floatAlign);
|
||||
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
// The value of _InputBorderGap.start is relative to the origin of the
|
||||
// _BorderContainer which is inset by the icon's width. Although, when
|
||||
|
@ -1523,7 +1516,6 @@ class _RenderDecoration extends RenderBox with SlottedContainerRenderObjectMixin
|
|||
decoration.borderGap.start = lerpDouble(labelX - _boxSize(icon).width + offsetToPrefixIcon,
|
||||
_boxSize(container).width / 2.0 - floatWidth / 2.0,
|
||||
floatAlign);
|
||||
break;
|
||||
}
|
||||
decoration.borderGap.extent = label!.size.width * _kFinalLabelScale;
|
||||
} else {
|
||||
|
@ -1576,14 +1568,12 @@ class _RenderDecoration extends RenderBox with SlottedContainerRenderObjectMixin
|
|||
if (prefixIcon != null && !decoration.alignLabelWithHint && isOutlineBorder) {
|
||||
floatStartX += material3 ? _boxSize(prefixIcon).width - contentPadding.left : 0.0;
|
||||
}
|
||||
break;
|
||||
case TextDirection.ltr: // origin on the left
|
||||
startX = labelOffset.dx;
|
||||
floatStartX = startX;
|
||||
if (prefixIcon != null && !decoration.alignLabelWithHint && isOutlineBorder) {
|
||||
floatStartX += material3 ? -_boxSize(prefixIcon).width + contentPadding.left : 0.0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
final double floatEndX = lerpDouble(floatStartX, centeredFloatX, floatAlign)!;
|
||||
final double dx = lerpDouble(startX, floatEndX, t)!;
|
||||
|
|
|
@ -440,10 +440,8 @@ class _MaterialState extends State<Material> with TickerProviderStateMixin {
|
|||
switch (widget.type) {
|
||||
case MaterialType.canvas:
|
||||
color = theme.canvasColor;
|
||||
break;
|
||||
case MaterialType.card:
|
||||
color = theme.cardColor;
|
||||
break;
|
||||
case MaterialType.button:
|
||||
case MaterialType.circle:
|
||||
case MaterialType.transparency:
|
||||
|
|
|
@ -1262,13 +1262,10 @@ class CheckboxMenuButton extends StatelessWidget {
|
|||
switch (value) {
|
||||
case false:
|
||||
onChanged!.call(true);
|
||||
break;
|
||||
case true:
|
||||
onChanged!.call(tristate ? null : false);
|
||||
break;
|
||||
case null:
|
||||
onChanged!.call(false);
|
||||
break;
|
||||
}
|
||||
},
|
||||
onHover: onHover,
|
||||
|
@ -1805,15 +1802,11 @@ class _SubmenuButtonState extends State<SubmenuButton> {
|
|||
switch (Directionality.of(context)) {
|
||||
case TextDirection.rtl:
|
||||
menuPaddingOffset += Offset(menuPadding.right, 0);
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
menuPaddingOffset += Offset(-menuPadding.left, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Axis.vertical:
|
||||
menuPaddingOffset += Offset(0, -menuPadding.top);
|
||||
break;
|
||||
}
|
||||
|
||||
return MenuAnchor(
|
||||
|
@ -2021,14 +2014,12 @@ class _LocalizedShortcutLabeler {
|
|||
case TargetPlatform.macOS:
|
||||
// Use "⌃ ⇧ A" style on macOS and iOS.
|
||||
keySeparator = ' ';
|
||||
break;
|
||||
case TargetPlatform.android:
|
||||
case TargetPlatform.fuchsia:
|
||||
case TargetPlatform.linux:
|
||||
case TargetPlatform.windows:
|
||||
// Use "Ctrl+Shift+A" style.
|
||||
keySeparator = '+';
|
||||
break;
|
||||
}
|
||||
if (serialized.trigger != null) {
|
||||
final List<String> modifiers = <String>[];
|
||||
|
@ -2316,7 +2307,6 @@ class _MenuDirectionalFocusAction extends DirectionalFocusAction {
|
|||
if (_moveToParent(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case Axis.vertical:
|
||||
if (firstItemIsFocused) {
|
||||
if (_moveToParent(anchor)) {
|
||||
|
@ -2326,23 +2316,18 @@ class _MenuDirectionalFocusAction extends DirectionalFocusAction {
|
|||
if (_moveToPrevious(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TraversalDirection.down:
|
||||
switch (orientation) {
|
||||
case Axis.horizontal:
|
||||
if (_moveToSubmenu(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case Axis.vertical:
|
||||
if (_moveToNext(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TraversalDirection.left:
|
||||
switch (orientation) {
|
||||
case Axis.horizontal:
|
||||
|
@ -2351,14 +2336,11 @@ class _MenuDirectionalFocusAction extends DirectionalFocusAction {
|
|||
if (_moveToNext(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
if (_moveToPrevious(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Axis.vertical:
|
||||
switch (Directionality.of(context)) {
|
||||
case TextDirection.rtl:
|
||||
|
@ -2371,14 +2353,12 @@ class _MenuDirectionalFocusAction extends DirectionalFocusAction {
|
|||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
switch (anchor._parent!._orientation) {
|
||||
case Axis.horizontal:
|
||||
if (_moveToPreviousTopLevel(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case Axis.vertical:
|
||||
if (buttonIsFocused) {
|
||||
if (_moveToPreviousTopLevel(anchor)) {
|
||||
|
@ -2389,13 +2369,9 @@ class _MenuDirectionalFocusAction extends DirectionalFocusAction {
|
|||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TraversalDirection.right:
|
||||
switch (orientation) {
|
||||
case Axis.horizontal:
|
||||
|
@ -2404,14 +2380,11 @@ class _MenuDirectionalFocusAction extends DirectionalFocusAction {
|
|||
if (_moveToPrevious(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
if (_moveToNext(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Axis.vertical:
|
||||
switch (Directionality.of(context)) {
|
||||
case TextDirection.rtl:
|
||||
|
@ -2420,14 +2393,11 @@ class _MenuDirectionalFocusAction extends DirectionalFocusAction {
|
|||
if (_moveToPreviousTopLevel(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case Axis.vertical:
|
||||
if (_moveToParent(anchor)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
if (buttonIsFocused) {
|
||||
if (_moveToSubmenu(anchor)) {
|
||||
|
@ -2438,11 +2408,8 @@ class _MenuDirectionalFocusAction extends DirectionalFocusAction {
|
|||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
super.invoke(intent);
|
||||
}
|
||||
|
@ -3113,10 +3080,8 @@ class _MenuLayout extends SingleChildLayoutDelegate {
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
directionalOffset = Offset(-alignmentOffset.dx, alignmentOffset.dy);
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
directionalOffset = alignmentOffset;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
directionalOffset = alignmentOffset;
|
||||
|
@ -3127,7 +3092,6 @@ class _MenuLayout extends SingleChildLayoutDelegate {
|
|||
switch (textDirection) {
|
||||
case TextDirection.rtl:
|
||||
x -= childSize.width;
|
||||
break;
|
||||
case TextDirection.ltr:
|
||||
break;
|
||||
}
|
||||
|
@ -3274,11 +3238,9 @@ class _MenuPanelState extends State<_MenuPanel> {
|
|||
case Axis.horizontal:
|
||||
themeStyle = MenuBarTheme.of(context).style;
|
||||
defaultStyle = _MenuBarDefaultsM3(context);
|
||||
break;
|
||||
case Axis.vertical:
|
||||
themeStyle = MenuTheme.of(context).style;
|
||||
defaultStyle = _MenuDefaultsM3(context);
|
||||
break;
|
||||
}
|
||||
final MenuStyle? widgetStyle = widget.menuStyle;
|
||||
|
||||
|
@ -3422,11 +3384,9 @@ class _Submenu extends StatelessWidget {
|
|||
case Axis.horizontal:
|
||||
themeStyle = MenuBarTheme.of(context).style;
|
||||
defaultStyle = _MenuBarDefaultsM3(context);
|
||||
break;
|
||||
case Axis.vertical:
|
||||
themeStyle = MenuTheme.of(context).style;
|
||||
defaultStyle = _MenuDefaultsM3(context);
|
||||
break;
|
||||
}
|
||||
T? effectiveValue<T>(T? Function(MenuStyle? style) getProperty) {
|
||||
return getProperty(menuStyle) ?? getProperty(themeStyle) ?? getProperty(defaultStyle);
|
||||
|
|
|
@ -520,13 +520,10 @@ class _IndicatorInkWell extends InkResponse {
|
|||
switch (labelBehavior) {
|
||||
case NavigationDestinationLabelBehavior.alwaysShow:
|
||||
labelPadding = labelRect.height / 2;
|
||||
break;
|
||||
case NavigationDestinationLabelBehavior.onlyShowSelected:
|
||||
labelPadding = selected ? labelRect.height / 2 : 0;
|
||||
break;
|
||||
case NavigationDestinationLabelBehavior.alwaysHide:
|
||||
labelPadding = 0;
|
||||
break;
|
||||
}
|
||||
final double indicatorOffsetX = referenceBox.size.width / 2;
|
||||
final double indicatorOffsetY = referenceBox.size.height / 2 - labelPadding;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue