File tree Expand file tree Collapse file tree 4 files changed +21
-2
lines changed
Expand file tree Collapse file tree 4 files changed +21
-2
lines changed Original file line number Diff line number Diff line change @@ -136,6 +136,7 @@ Future<void> main(List<String> args) async {
136136 // So that we don't animate anything before calling applyFeatureFlags, default
137137 // the animations to disabled in real apps.
138138 defaultCliAnimationEnabled: false ,
139+ shutdownHooks: globals.shutdownHooks,
139140 );
140141 // runner.run calls "terminal.applyFeatureFlags()"
141142 },
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import '../features.dart';
77import 'io.dart' as io;
88import 'logger.dart' ;
99import 'platform.dart' ;
10+ import 'process.dart' ;
1011
1112enum TerminalColor {
1213 red,
@@ -164,11 +165,14 @@ class AnsiTerminal implements Terminal {
164165 required Platform platform,
165166 DateTime ? now, // Time used to determine preferredStyle. Defaults to 0001-01-01 00:00.
166167 bool defaultCliAnimationEnabled = true ,
168+ ShutdownHooks ? shutdownHooks,
167169 })
168170 : _stdio = stdio,
169171 _platform = platform,
170172 _now = now ?? DateTime (1 ),
171- _isCliAnimationEnabled = defaultCliAnimationEnabled;
173+ _isCliAnimationEnabled = defaultCliAnimationEnabled {
174+ shutdownHooks? .addShutdownHook (() { singleCharMode = false ; });
175+ }
172176
173177 final io.Stdio _stdio;
174178 final Platform _platform;
@@ -319,7 +323,7 @@ class AnsiTerminal implements Terminal {
319323 return false ;
320324 }
321325 final io.Stdin stdin = _stdio.stdin as io.Stdin ;
322- return stdin.lineMode && stdin.echoMode;
326+ return ! stdin.lineMode && ! stdin.echoMode;
323327 }
324328 @override
325329 set singleCharMode (bool value) {
Original file line number Diff line number Diff line change @@ -243,6 +243,7 @@ final AnsiTerminal _defaultAnsiTerminal = AnsiTerminal(
243243 stdio: stdio,
244244 platform: platform,
245245 now: DateTime .now (),
246+ shutdownHooks: shutdownHooks,
246247);
247248
248249/// The global Stdio wrapper.
Original file line number Diff line number Diff line change 55import 'package:flutter_tools/src/base/io.dart' ;
66import 'package:flutter_tools/src/base/logger.dart' ;
77import 'package:flutter_tools/src/base/platform.dart' ;
8+ import 'package:flutter_tools/src/base/process.dart' ;
89import 'package:flutter_tools/src/base/terminal.dart' ;
910import 'package:test/fake.dart' ;
1011
@@ -264,6 +265,18 @@ void main() {
264265 );
265266 terminal.singleCharMode = true ;
266267 });
268+
269+ testWithoutContext ('singleCharMode is reset by shutdown hook' , () {
270+ final ShutdownHooks shutdownHooks = ShutdownHooks ();
271+ final FakeStdio stdio = FakeStdio ();
272+ final AnsiTerminal terminal = AnsiTerminal (stdio: stdio, platform: const LocalPlatform (), shutdownHooks: shutdownHooks);
273+ stdio.stdinHasTerminal = true ;
274+ stdio._stdin = FakeStdin ();
275+
276+ terminal.singleCharMode = true ;
277+ shutdownHooks.runShutdownHooks (BufferLogger .test ());
278+ expect (terminal.singleCharMode, false );
279+ });
267280}
268281
269282late Stream <String > mockStdInStream;
You can’t perform that action at this time.
0 commit comments