Im-Kevin / cool_ui

用flutter实现一些我认为好看的UI控件,有Popover,仿Weui的Toast,自定义键盘
Apache License 2.0
460 stars 74 forks source link

This KeyboardMediaQuery widget cannot be marked as needing to build because the framework is locked. #18

Closed uniquejava closed 5 years ago

uniquejava commented 5 years ago

[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: setState() or markNeedsBuild() called when widget tree was locked. This KeyboardMediaQuery widget cannot be marked as needing to build because the framework is locked. The widget on which setState() or markNeedsBuild() was called was: KeyboardMediaQuery(dependencies: [MediaQuery], state: KeyboardMediaQueryState#c8633)

0 Element.markNeedsBuild.

package:flutter/…/widgets/framework.dart:3520

1 Element.markNeedsBuild

package:flutter/…/widgets/framework.dart:3529

2 State.setState

package:flutter/…/widgets/framework.dart:1133

3 KeyboardMediaQueryState.update

package:cool_ui/keyboards/keyboard_media_query.dart:28

4 CoolKeyboard.hideKeyboard

package:cool_ui/keyboards/keyboard_manager.dart:164

5 CoolKeyboard.interceptorInput.

package:cool_ui/keyboards/keyboard_manager.dart:57

#6 BinaryMessages.send (package:flutter/s<…> [VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: setState() or markNeedsBuild() called when widget tree was locked. This KeyboardMediaQuery widget cannot be marked as needing to build because the framework is locked. The widget on which setState() or markNeedsBuild() was called was: KeyboardMediaQuery(dependencies: [MediaQuery], state: KeyboardMediaQueryState#c8633) #0 Element.markNeedsBuild. package:flutter/…/widgets/framework.dart:3520 #1 Element.markNeedsBuild package:flutter/…/widgets/framework.dart:3529 #2 State.setState package:flutter/…/widgets/framework.dart:1133 #3 KeyboardMediaQueryState.update package:cool_ui/keyboards/keyboard_media_query.dart:28 #4 CoolKeyboard.hideKeyboard package:cool_ui/keyboards/keyboard_manager.dart:164 #5 CoolKeyboard.interceptorInput. package:cool_ui/keyboards/keyboard_manager.dart:57 #6 BinaryMessages.send (package:flutter/s<…>
Im-Kevin commented 5 years ago

可以具体说下你是在什么情况出现的吗

uniquejava commented 5 years ago

可以具体说下你是在什么情况出现的吗

@Im-Kevin 谢谢, 这个问题解决了。

我这边的自定义键盘和你example中的height不一样, 我在构建时给了它一个固定值202.。如下。。 这样直接改height界面能出来, 但是会出现如上各种问题

解决办法, 修改getHeight(context)方法, 让它返回固定值202..

问题多多的代码:

  Widget build(BuildContext context) {
    MediaQueryData mediaQuery = MediaQuery.of(context);

    return Material(
        child: DefaultTextStyle(
      style: TextStyle(fontWeight: FontWeight.w500, color: Colors.black),
      child: Container(
       // height: getHeight(context),
        height: 202,
        width: mediaQuery.size.width,

改成如下 , 问题解决! 🎀

  static double getHeight(BuildContext ctx) {
    return 202;
  }
...

    return Material(
        child: DefaultTextStyle(
      style: TextStyle(fontWeight: FontWeight.w500, color: Colors.black),
      child: Container(
       height: getHeight(context),