File tree 4 files changed +21
-2
lines changed
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 {
136
136
// So that we don't animate anything before calling applyFeatureFlags, default
137
137
// the animations to disabled in real apps.
138
138
defaultCliAnimationEnabled: false ,
139
+ shutdownHooks: globals.shutdownHooks,
139
140
);
140
141
// runner.run calls "terminal.applyFeatureFlags()"
141
142
},
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import '../features.dart';
7
7
import 'io.dart' as io;
8
8
import 'logger.dart' ;
9
9
import 'platform.dart' ;
10
+ import 'process.dart' ;
10
11
11
12
enum TerminalColor {
12
13
red,
@@ -164,11 +165,14 @@ class AnsiTerminal implements Terminal {
164
165
required Platform platform,
165
166
DateTime ? now, // Time used to determine preferredStyle. Defaults to 0001-01-01 00:00.
166
167
bool defaultCliAnimationEnabled = true ,
168
+ ShutdownHooks ? shutdownHooks,
167
169
})
168
170
: _stdio = stdio,
169
171
_platform = platform,
170
172
_now = now ?? DateTime (1 ),
171
- _isCliAnimationEnabled = defaultCliAnimationEnabled;
173
+ _isCliAnimationEnabled = defaultCliAnimationEnabled {
174
+ shutdownHooks? .addShutdownHook (() { singleCharMode = false ; });
175
+ }
172
176
173
177
final io.Stdio _stdio;
174
178
final Platform _platform;
@@ -319,7 +323,7 @@ class AnsiTerminal implements Terminal {
319
323
return false ;
320
324
}
321
325
final io.Stdin stdin = _stdio.stdin as io.Stdin ;
322
- return stdin.lineMode && stdin.echoMode;
326
+ return ! stdin.lineMode && ! stdin.echoMode;
323
327
}
324
328
@override
325
329
set singleCharMode (bool value) {
Original file line number Diff line number Diff line change @@ -243,6 +243,7 @@ final AnsiTerminal _defaultAnsiTerminal = AnsiTerminal(
243
243
stdio: stdio,
244
244
platform: platform,
245
245
now: DateTime .now (),
246
+ shutdownHooks: shutdownHooks,
246
247
);
247
248
248
249
/// The global Stdio wrapper.
Original file line number Diff line number Diff line change 5
5
import 'package:flutter_tools/src/base/io.dart' ;
6
6
import 'package:flutter_tools/src/base/logger.dart' ;
7
7
import 'package:flutter_tools/src/base/platform.dart' ;
8
+ import 'package:flutter_tools/src/base/process.dart' ;
8
9
import 'package:flutter_tools/src/base/terminal.dart' ;
9
10
import 'package:test/fake.dart' ;
10
11
@@ -264,6 +265,18 @@ void main() {
264
265
);
265
266
terminal.singleCharMode = true ;
266
267
});
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
+ });
267
280
}
268
281
269
282
late Stream <String > mockStdInStream;
You can’t perform that action at this time.
0 commit comments