Coder Social home page Coder Social logo

martinrybak / keyboard_avoider Goto Github PK

View Code? Open in Web Editor NEW
118.0 118.0 41.0 853 KB

A lightweight alternative to the Scaffold widget for avoiding the on-screen software keyboard. Automatically scrolls obscured TextField child widgets into view on focus.

Home Page: https://medium.com/flutter-nyc/avoiding-the-on-screen-keyboard-in-flutter-ae0e46ecb96c

License: MIT License

Objective-C 0.07% Dart 17.11% Kotlin 0.21% Swift 3.00% CMake 33.73% C++ 41.29% C 2.48% HTML 2.12%

keyboard_avoider's People

Contributors

martinrybak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

keyboard_avoider's Issues

Error on CupertinoApp

Hi,

I have the following layout on a CupertinoApp and I am trying to add the keyboard_avoider to scroll the TextFields.

Simulator Screen Shot - iPhone Xs - 2019-05-30 at 12 28 05

When I add the KeyboardAvoider widget I have the following error:

Launching lib/main.dart on iPhone Xs in debug mode...
Xcode build done.                                            6,8s
flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
flutter: The following message was thrown during layout:
flutter: A RenderFlex overflowed by 97 pixels on the bottom.
flutter:
flutter: The overflowing RenderFlex has an orientation of Axis.vertical.
flutter: The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
flutter: black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
flutter: Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
flutter: RenderFlex to fit within the available space instead of being sized to their natural size.
flutter: This is considered an error condition because it indicates that there is content that cannot be
flutter: seen. If the content is legitimately bigger than the available space, consider clipping it with a
flutter: ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex,
flutter: like a ListView.
flutter: The specific RenderFlex in question is:
flutter:   RenderFlex#550cc relayoutBoundary=up4 OVERFLOWING
flutter:   creator: Column ← Padding ← MediaQuery ← Padding ← SafeArea ← Padding ← MediaQuery ←
flutter:   PrimaryScrollController ← Stack ← DecoratedBox ← CupertinoPageScaffold ← MyWidget ← ⋯
flutter:   parentData: offset=Offset(0.0, 25.0) (can use size)
flutter:   constraints: BoxConstraints(0.0<=w<=375.0, 0.0<=h<=383.0)
flutter:   size: Size(375.0, 383.0)
flutter:   direction: vertical
flutter:   mainAxisAlignment: start
flutter:   mainAxisSize: max
flutter:   crossAxisAlignment: stretch
flutter:   verticalDirection: down
flutter: ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
flutter: The following assertion was thrown during performLayout():
flutter: RenderFlex children have non-zero flex but incoming height constraints are unbounded.
flutter: When a column is in a parent that does not provide a finite height constraint, for example if it is
flutter: in a vertical scrollable, it will try to shrink-wrap its children along the vertical axis. Setting a
flutter: flex on a child (e.g. using Expanded) indicates that the child is to expand to fill the remaining
flutter: space in the vertical direction.
flutter: These two directives are mutually exclusive. If a parent is to shrink-wrap its child, the child
flutter: cannot simultaneously expand to fit its parent.
flutter: Consider setting mainAxisSize to MainAxisSize.min and using FlexFit.loose fits for the flexible
flutter: children (using Flexible rather than Expanded). This will allow the flexible children to size
flutter: themselves to less than the infinite remaining space they would otherwise be forced to take, and
flutter: then will cause the RenderFlex to shrink-wrap the children rather than expanding to fit the maximum
flutter: constraints provided by the parent.
flutter: The affected RenderFlex is:
flutter:   RenderFlex#435aa relayoutBoundary=up14 NEEDS-LAYOUT NEEDS-PAINT
flutter: The creator information is set to:
flutter:   Column ← ConstrainedBox ← _SingleChildViewport ← IgnorePointer-[GlobalKey#ef658] ← Semantics ←
flutter:   Listener ← _GestureSemantics ←
flutter:   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#d6466] ← Listener ← _ScrollableScope
flutter:   ← _ScrollSemantics-[GlobalKey#3d42b] ← Scrollable ← ⋯
flutter: The nearest ancestor providing an unbounded width constraint is:
flutter:   _RenderSingleChildViewport#87742 relayoutBoundary=up12 NEEDS-LAYOUT NEEDS-PAINT
flutter:   creator: _SingleChildViewport ← IgnorePointer-[GlobalKey#ef658] ← Semantics ← Listener ←
flutter:   _GestureSemantics ← RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#d6466] ←
flutter:   Listener ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#3d42b] ← Scrollable ←
flutter:   SingleChildScrollView ← LayoutBuilder ← ⋯
flutter:   parentData: <none> (can use size)
flutter:   constraints: BoxConstraints(0.0<=w<=375.0, 0.0<=h<=640.0)
flutter:   size: MISSING
flutter: See also: https://flutter.dev/layout/
flutter: If this message did not help you determine the problem, consider using debugDumpRenderTree():
flutter:   https://flutter.dev/debugging/#rendering-layer
flutter:   http://docs.flutter.io/flutter/rendering/debugDumpRenderTree.html
flutter: If none of the above helps enough to fix this problem, please don't hesitate to file a bug:
flutter:   https://github.com/flutter/flutter/issues/new?template=BUG.md
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0      RenderFlex.performLayout.<anonymous closure> 
flutter: #1      RenderFlex.performLayout 
flutter: #2      RenderObject.layout 
flutter: #3      RenderConstrainedBox.performLayout 
flutter: #4      RenderObject.layout 
flutter: #5      _RenderSingleChildViewport.performLayout 
flutter: #6      RenderObject.layout 
flutter: #7      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #8      RenderObject.layout 
flutter: #9      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #10     RenderObject.layout 
flutter: #11     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #12     RenderObject.layout 
flutter: #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #14     RenderObject.layout 
flutter: #15     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #16     RenderObject.layout 
flutter: #17     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #18     RenderObject.layout 
flutter: #19     _RenderLayoutBuilder.performLayout 
flutter: #20     RenderObject.layout 
flutter: #21     RenderPadding.performLayout 
flutter: #22     RenderObject.layout 
flutter: #23     RenderPadding.performLayout 
flutter: #24     RenderObject.layout 
flutter: #25     RenderPadding.performLayout 
flutter: #26     RenderObject.layout 
flutter: #27     RenderPadding.performLayout 
flutter: #28     RenderObject.layout 
flutter: #29     RenderStack.performLayout 
flutter: #30     RenderObject.layout 
flutter: #31     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #32     RenderObject.layout 
flutter: #33     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #34     RenderObject.layout 
flutter: #35     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #36     RenderObject.layout 
flutter: #37     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #38     RenderObject.layout 
flutter: #39     RenderStack.performLayout 
flutter: #40     RenderObject.layout 
flutter: #41     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #42     RenderObject.layout 
flutter: #43     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #44     RenderObject.layout 
flutter: #45     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #46     RenderObject.layout 
flutter: #47     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #48     RenderObject.layout 
flutter: #49     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #50     RenderObject.layout 
flutter: #51     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #52     RenderOffstage.performLayout 
flutter: #53     RenderObject.layout 
flutter: #54     RenderStack.performLayout 
flutter: #55     RenderObject.layout 
flutter: #56     __RenderTheatre&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #57     RenderObject.layout 
flutter: #58     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #59     RenderObject.layout 
flutter: #60     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #61     RenderObject.layout 
flutter: #62     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #63     RenderObject.layout 
flutter: #64     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout 
flutter: #65     RenderObject.layout 
flutter: #66     RenderView.performLayout 
flutter: #67     RenderObject._layoutWithoutResize 
flutter: #68     PipelineOwner.flushLayout 
flutter: #69     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame 
flutter: #70     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame 
flutter: #71     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback 
flutter: #72     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback 
flutter: #73     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame 
flutter: #74     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> 
flutter: #76     _Timer._runTimers  (dart:isolate-patch/timer_impl.dart:382:19)
flutter: #77     _Timer._handleMessage  (dart:isolate-patch/timer_impl.dart:416:5)
flutter: #78     _RawReceivePortImpl._handleMessage  (dart:isolate-patch/isolate_patch.dart:171:12)
flutter: (elided one frame from package dart:async-patch)
flutter:
flutter: The following RenderObject was being processed when the exception was fired:
flutter:   RenderFlex#435aa relayoutBoundary=up14 NEEDS-LAYOUT NEEDS-PAINT
flutter:   creator: Column ← ConstrainedBox ← _SingleChildViewport ← IgnorePointer-[GlobalKey#ef658] ←
flutter:   Semantics ← Listener ← _GestureSemantics ←
flutter:   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#d6466] ← Listener ← _ScrollableScope
flutter:   ← _ScrollSemantics-[GlobalKey#3d42b] ← Scrollable ← ⋯
flutter:   parentData: <none> (can use size)
flutter:   constraints: BoxConstraints(0.0<=w<=375.0, 640.0<=h<=Infinity)
flutter:   size: MISSING
flutter:   direction: vertical
flutter:   mainAxisAlignment: start
flutter:   mainAxisSize: max
flutter:   crossAxisAlignment: stretch
flutter:   verticalDirection: down
flutter: This RenderObject had the following descendants (showing up to depth 5):
flutter:   RenderPadding#1d1e4 relayoutBoundary=up15 NEEDS-PAINT
flutter:     RenderLimitedBox#8b8e0 relayoutBoundary=up16 NEEDS-PAINT
flutter:       RenderCustomPaint#c34fb relayoutBoundary=up17 NEEDS-PAINT
flutter:   RenderPadding#be360 relayoutBoundary=up15 NEEDS-PAINT
flutter:     RenderSemanticsAnnotations#7082f relayoutBoundary=up16 NEEDS-PAINT
flutter:       RenderIgnorePointer#d8bfb relayoutBoundary=up17 NEEDS-PAINT
flutter:         RenderDecoratedBox#f5c19 relayoutBoundary=up18 NEEDS-PAINT
flutter:           RenderPadding#86287 relayoutBoundary=up19 NEEDS-PAINT
flutter:   RenderPadding#1f407 relayoutBoundary=up15 NEEDS-PAINT
Reloaded 2 of 343 libraries in 346ms.
flutter:     RenderSemanticsAnnotations#7619a relayoutBoundary=up16 NEEDS-PAINT
flutter:       RenderIgnorePointer#fd1ba relayoutBoundary=up17 NEEDS-PAINT
flutter:         RenderDecoratedBox#02cce relayoutBoundary=up18 NEEDS-PAINT
flutter:           RenderPadding#4487a relayoutBoundary=up19 NEEDS-PAINT
flutter:   RenderPadding#0f32b relayoutBoundary=up15 NEEDS-PAINT
flutter:     RenderSemanticsAnnotations#99b22 relayoutBoundary=up16 NEEDS-PAINT
flutter:       RenderIgnorePointer#d5c23 relayoutBoundary=up17 NEEDS-PAINT
flutter:         RenderDecoratedBox#e3d8a relayoutBoundary=up18 NEEDS-PAINT
flutter:           RenderPadding#073ac relayoutBoundary=up19 NEEDS-PAINT
flutter:   RenderPadding#47695 relayoutBoundary=up15 NEEDS-PAINT
flutter:     RenderSemanticsAnnotations#ede08 relayoutBoundary=up16 NEEDS-PAINT
flutter:       RenderIgnorePointer#75445 relayoutBoundary=up17 NEEDS-PAINT
flutter:         RenderDecoratedBox#c9a60 relayoutBoundary=up18 NEEDS-PAINT
flutter:           RenderPadding#95192 relayoutBoundary=up19 NEEDS-PAINT
flutter:   RenderPadding#436d5 relayoutBoundary=up15 NEEDS-PAINT
flutter:     RenderSemanticsAnnotations#7df92 relayoutBoundary=up16 NEEDS-PAINT
flutter:       RenderIgnorePointer#7db5c relayoutBoundary=up17 NEEDS-PAINT
flutter:         RenderDecoratedBox#85e2c relayoutBoundary=up18 NEEDS-PAINT
flutter:           RenderPadding#ff8a3 relayoutBoundary=up19 NEEDS-PAINT
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
flutter: Another exception was thrown: RenderBox was not laid out: RenderFlex#435aa relayoutBoundary=up14 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: RenderConstrainedBox#e9a91 relayoutBoundary=up13 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: _RenderSingleChildViewport#87742 relayoutBoundary=up12 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#7b37f relayoutBoundary=up11 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#3ac56 relayoutBoundary=up10 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: RenderPointerListener#173f1 relayoutBoundary=up9 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#a7243 relayoutBoundary=up8 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: RenderPointerListener#d1336 relayoutBoundary=up7 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: _RenderScrollSemantics#f9f89 relayoutBoundary=up6 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: _RenderLayoutBuilder#55b14 relayoutBoundary=up5 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: RenderPadding#7a0f7 relayoutBoundary=up4 NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: _RenderSingleChildViewport#87742 relayoutBoundary=up12 NEEDS-PAINT
flutter: Another exception was thrown: Updated layout information required for RenderPositionedBox#b19dd NEEDS-LAYOUT NEEDS-PAINT to calculate semantics.

I am using the following code to make the app.

import 'package:flutter/cupertino.dart';
// import 'package:keyboard_avoider/keyboard_avoider.dart';

void main() => runApp(
      const MyApp(),
    );

class MyApp extends StatelessWidget {
  const MyApp() : super();

  @override
  Widget build(BuildContext context) => CupertinoApp(
        debugShowCheckedModeBanner: false,
        home: const MyWidget(),
        title: 'Test Actions Keyboard',
      );
}

class MyWidget extends StatefulWidget {
  const MyWidget() : super();

  static const Key textFieldKey01 = Key('textFieldKey01');
  static const Key textFieldKey02 = Key('textFieldKey02');
  static const Key textFieldKey03 = Key('textFieldKey03');
  static const Key textFieldKey04 = Key('textFieldKey04');
  static const Key textFieldKey05 = Key('textFieldKey05');

  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  FocusNode focusNode01;
  TextEditingController controller01;
  FocusNode focusNode02;
  TextEditingController controller02;
  FocusNode focusNode03;
  TextEditingController controller03;
  FocusNode focusNode04;
  TextEditingController controller04;
  FocusNode focusNode05;
  TextEditingController controller05;

  @override
  void initState() {
    super.initState();

    focusNode01 = FocusNode();
    controller01 = TextEditingController();
    focusNode02 = FocusNode();
    controller02 = TextEditingController();
    focusNode03 = FocusNode();
    controller03 = TextEditingController();
    focusNode04 = FocusNode();
    controller04 = TextEditingController();
    focusNode05 = FocusNode();
    controller05 = TextEditingController();
  }

  Widget _createTextField({
    @required Key key,
    @required FocusNode focusNode,
    @required TextEditingController controller,
    @required ValueChanged<String> onSubmitted,
    TextInputAction textInputAction = TextInputAction.next,
  }) =>
      Padding(
        padding: const EdgeInsets.symmetric(
          vertical: 5.0,
          horizontal: 25.0,
        ),
        child: CupertinoTextField(
          key: key,
          controller: controller,
          focusNode: focusNode,
          clearButtonMode: OverlayVisibilityMode.editing,
          keyboardType: TextInputType.text,
          textInputAction: textInputAction,
          autofocus: false,
          autocorrect: false,
          maxLength: 50,
          onSubmitted: onSubmitted,
        ),
      );

  @override
  Widget build(BuildContext context) => CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: const Text(
            'Keyboard Avoider',
          ),
        ),
        backgroundColor: CupertinoColors.white,
        child: SafeArea(
          child: Padding(
            padding: const EdgeInsets.symmetric(
              vertical: 25.0,
            ),
            // child: KeyboardAvoider(
            //   autoScroll: true,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                const Padding(
                  padding: EdgeInsets.symmetric(
                    vertical: 10.0,
                    horizontal: 25.0,
                  ),
                  child: Placeholder(
                    fallbackHeight: 250.0,
                  ),
                ),
                _createTextField(
                  key: MyWidget.textFieldKey01,
                  focusNode: focusNode01,
                  controller: controller01,
                  onSubmitted: (_) {
                    FocusScope.of(context).requestFocus(focusNode02);
                  },
                ),
                _createTextField(
                  key: MyWidget.textFieldKey02,
                  focusNode: focusNode02,
                  controller: controller02,
                  onSubmitted: (_) {
                    FocusScope.of(context).requestFocus(focusNode03);
                  },
                ),
                _createTextField(
                  key: MyWidget.textFieldKey03,
                  focusNode: focusNode03,
                  controller: controller03,
                  onSubmitted: (_) {
                    FocusScope.of(context).requestFocus(focusNode04);
                  },
                ),
                _createTextField(
                  key: MyWidget.textFieldKey04,
                  focusNode: focusNode04,
                  controller: controller04,
                  onSubmitted: (_) {
                    FocusScope.of(context).requestFocus(focusNode05);
                  },
                ),
                _createTextField(
                  key: MyWidget.textFieldKey05,
                  focusNode: focusNode05,
                  controller: controller05,
                  onSubmitted: (_) {
                    FocusScope.of(context).requestFocus(focusNode01);
                  },
                ),
                Expanded(
                  child: Container(
                    child: Container(
                      alignment: Alignment.bottomCenter,
                      child: Padding(
                        padding: const EdgeInsets.symmetric(
                          vertical: 10.0,
                          horizontal: 25.0,
                        ),
                        child: CupertinoButton(
                          color: CupertinoColors.activeBlue,
                          child: const Text(
                            'Unfocus',
                            style: TextStyle(
                              color: CupertinoColors.white,
                            ),
                          ),
                          onPressed: () {
                            FocusScope.of(context).requestFocus(FocusNode());
                          },
                        ),
                      ),
                    ),
                  ),
                ),
              ],
            ),
            // ),
          ),
        ),
      );

  @override
  void dispose() {
    focusNode01.dispose();
    controller01.dispose();
    focusNode02.dispose();
    controller02.dispose();
    focusNode03.dispose();
    controller03.dispose();
    focusNode04.dispose();
    controller04.dispose();
    focusNode05.dispose();
    controller05.dispose();

    super.dispose();
  }
}
name: test_keyboard_avoider
description: A new Flutter project.

version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2

  keyboard_avoider: ^0.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: false

Here is the flutter doctor result:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel unknown, v1.5.8, on Mac OS X 10.14.5 18F132, locale pt-BR)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.2.1)
[✓] Android Studio (version 3.4)
[✓] IntelliJ IDEA Community Edition (version 2019.1.1)
[✓] VS Code (version 1.34.0)
[✓] Connected device (3 available)

• No issues found!

autoscroll: true not working

The widget doesn't slide the content up automatically when I try to use it this way:

KeyboardAvoider(
  autoScroll: true,
  child: ListView(
    controller: scrollController,
    shrinkWrap: true,
    children: <Widget>[
      // My CupertinoTextField is nested inside the tree.
    ],
  ),
),

_findFocusedObject returns null.

IOS not working

it's only work in Android。the same code in IOS that not avoid textfiled widget

Scrolls much more than needed but comes back into focus after delay.

When I click on a formfield that shouldn't be hidden when keyboard pops up(distance of form field from top is less than the distance of keyboard from the top), the form field scrolls much more above and goes our out screen for sometime but after a delay comes back into focus.

Incorrect keyboard behaviour

When the TextField field is not pressed - the screen should be static (autoScroll - false), when the TextField is pressed - the keyboard appears and the screen should scroll (autoScroll - true). When I apply to autoScroll property this value: " (MediaQuery.of (context) .viewInsets.bottom! = 0)? true: false," the keyboard appears and disappears IMMEDIATELY(that's the actual issue), and the warning appears:

W / IInputConnectionWrapper (9060): beginBatchEdit on inactive InputConnection
W / IInputConnectionWrapper (9060): getTextBeforeCursor on inactive InputConnection
W / IInputConnectionWrapper (9060): getTextAfterCursor on inactive InputConnection
W / IInputConnectionWrapper (9060): getSelectedText on inactive InputConnection
W / IInputConnectionWrapper (9060): endBatchEdit on inactive InputConnection.

If you enter data quickly - the keyboard does not disappear.
Could you help me to solve this issue?


@override
  Widget build(BuildContext context) {

      return SafeArea(

        child: Scaffold(

          backgroundColor: LibraryColors.mainGreen,

          body: KeyboardAvoider(

            autoScroll: (MediaQuery.of(context).viewInsets.bottom != 0)? true : false,

            child: BlocListener<AuthBloc, AuthState>(),

            ...

          ),

        ),

      );

  }

In the menifest file, set the theme of FlutterActivity to "fullscreen" and "keyboard_ avoid" is not working

In the menifest file, set the theme of FlutterActivity to "fullscreen" and "keyboard_ avoid" is not working

   <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:theme="@style/FullTheme"
            android:windowSoftInputMode="adjustResize" >
<!--            <meta-data-->
<!--                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"-->
<!--                android:value="true" />-->
            <meta-data
                android:name="io.flutter.embedding.android.NormalTheme"
                android:resource="@style/FullTheme" />

            <meta-data
                android:name="io.flutter.embedding.android.SplashScreenDrawable"
                android:resource="@drawable/launch_background" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  • FullTheme
<style name="FullTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowNoTitle">true</item>//无标题
        <item name="android:windowActionBar">false</item>//无ActionBar
        <item name="android:windowFullscreen">true</item>//全屏即无通知栏
        <item name="android:windowContentOverlay">@null</item>//是否有遮盖
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.