Commit 421cd7c2 authored by Adam Barth's avatar Adam Barth

Merge pull request #1531 from abarth/raw_keyboard_crash

RawKeyboardListener asserts if disposed without keyboard
parents 58156e18 12507d1b
...@@ -39,19 +39,20 @@ class _RawKeyboardListenerState extends State<RawKeyboardListener> implements mo ...@@ -39,19 +39,20 @@ class _RawKeyboardListenerState extends State<RawKeyboardListener> implements mo
} }
void dispose() { void dispose() {
_detachKeyboard(); _detachKeyboardIfAttached();
super.dispose(); super.dispose();
} }
void _attachOrDetachKeyboard() { void _attachOrDetachKeyboard() {
if (config.focused && _stub == null) if (config.focused)
_attachKeyboard(); _attachKeyboardIfDetached();
else if (!config.focused && _stub != null) else
_detachKeyboard(); _detachKeyboardIfAttached();
} }
void _attachKeyboard() { void _attachKeyboardIfDetached() {
assert(_stub == null); if (_stub != null)
return;
_stub = new mojom.RawKeyboardListenerStub.unbound()..impl = this; _stub = new mojom.RawKeyboardListenerStub.unbound()..impl = this;
mojom.RawKeyboardServiceProxy keyboard = new mojom.RawKeyboardServiceProxy.unbound(); mojom.RawKeyboardServiceProxy keyboard = new mojom.RawKeyboardServiceProxy.unbound();
shell.connectToService(null, keyboard); shell.connectToService(null, keyboard);
...@@ -59,9 +60,8 @@ class _RawKeyboardListenerState extends State<RawKeyboardListener> implements mo ...@@ -59,9 +60,8 @@ class _RawKeyboardListenerState extends State<RawKeyboardListener> implements mo
keyboard.close(); keyboard.close();
} }
void _detachKeyboard() { void _detachKeyboardIfAttached() {
assert(_stub != null); _stub?.close();
_stub.close();
_stub = null; _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