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
}
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