Commit 12507d1b authored by Adam Barth's avatar Adam Barth

RawKeyboardListener asserts if disposed without keyboard

We need to check whether we're attached to the keyboard before trying to
detach from the keyboard.
parent 58156e18
......@@ -39,19 +39,20 @@ class _RawKeyboardListenerState extends State<RawKeyboardListener> implements mo
}
void dispose() {
_detachKeyboard();
_detachKeyboardIfAttached();
super.dispose();
}
void _attachOrDetachKeyboard() {
if (config.focused && _stub == null)
_attachKeyboard();
else if (!config.focused && _stub != null)
_detachKeyboard();
if (config.focused)
_attachKeyboardIfDetached();
else
_detachKeyboardIfAttached();
}
void _attachKeyboard() {
assert(_stub == null);
void _attachKeyboardIfDetached() {
if (_stub != null)
return;
_stub = new mojom.RawKeyboardListenerStub.unbound()..impl = this;
mojom.RawKeyboardServiceProxy keyboard = new mojom.RawKeyboardServiceProxy.unbound();
shell.connectToService(null, keyboard);
......@@ -59,9 +60,8 @@ class _RawKeyboardListenerState extends State<RawKeyboardListener> implements mo
keyboard.close();
}
void _detachKeyboard() {
assert(_stub != null);
_stub.close();
void _detachKeyboardIfAttached() {
_stub?.close();
_stub = null;
}
......
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart';
import 'package:test/test.dart';
void main() {
test('Can dispose without keyboard', () {
testWidgets((WidgetTester tester) {
tester.pumpWidget(new RawKeyboardListener(child: new Container()));
tester.pumpWidget(new Container());
});
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment