【问题标题】:How to fix the error 'NoSuchMethodError: The getter 'focusScopeNode' was called on null'?如何修复错误“NoSuchMethodError:getter 'focusScopeNode' was called on null”?
【发布时间】:2019-10-22 06:59:22
【问题描述】:

我正在尝试使用 Navigator 类路由到另一个屏幕,但是当单击按钮路由到下一个屏幕时没有任何反应,并且在控制台中出现错误。

未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'focusScopeNode'。 E/颤振(18828):接收器:空 E/flutter (18828):尝试调用:focusScopeNode

我无法理解Contextbuilders 的概念。

这是我的main.dart 文件(第一个屏幕)

import 'package:flutter/material.dart';
import 'adduser.dart';
import 'collections.dart';

void main() => runApp(Bsk());


class Bsk extends StatelessWidget {
  static final GlobalKey<ScaffoldState> scaffoldKey = 
GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    final appTitle = 'BSK Management';
    return MaterialApp(
      routes: {
           '/home': (context) => Bsk(),

           '/collections': (context) => Collections(),
      },
      title: appTitle,
      home: Builder(builder: (context) => Scaffold(
          //resizeToAvoidBottomInset: false,
          key:scaffoldKey,
          appBar: AppBar(
            title: Text(appTitle),
          ),
          body: SignUpPage(),
          drawer: Drawer(
            child: ListView(  
              padding: EdgeInsets.zero,
              children: <Widget>[
                DrawerHeader(
                  child: Text('BSK Management'),
                  decoration: BoxDecoration(
                    color: Colors.blue,
                  ),
                ),
                ListTile(
                  title: Text('Home'),
                  leading: Icon(Icons.home),
                  onTap: () {
                    Navigator.pop(context);
                  },
                ),
                ListTile(
                  title: Text('Collections'),
                  leading: Icon(Icons.monetization_on),
                  onTap: () {
                    Navigator.of(context).pushNamed('/collections');
                    Navigator.pop(context);
                  },
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

这是我的collections.dart 文件(SecondScreen)

import 'package:flutter/material.dart';
import 'main.dart';
import 'adduser.dart';

class Collections extends StatefulWidget {
  @override
  _CollectionsState createState() => _CollectionsState();
}

class _CollectionsState extends State<Collections> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Center(child: Text("Hello")),
    );
  }
}

我希望它会路由到第二个屏幕,即 collections.dart 文件,但什么也没发生。 在控制台中:

Restarted application in 1,421ms.
E/flutter (18828): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled 
Exception: NoSuchMethodError: The getter 'focusScopeNode' was called on 
null.
E/flutter (18828): Receiver: null
E/flutter (18828): Tried calling: focusScopeNode
E/flutter (18828): #0      Object.noSuchMethod (dart:core- 
patch/object_patch.dart:51:5)
E/flutter (18828): #1      Route.didPush.<anonymous closure> 
(package:flutter/src/widgets/navigator.dart:139:17)
E/flutter (18828): #2      _rootRunUnary (dart:async/zone.dart:1132:38)
E/flutter (18828): #3      _CustomZone.runUnary 
(dart:async/zone.dart:1029:19)
E/flutter (18828): #4      _FutureListener.handleValue 
(dart:async/future_impl.dart:137:18)
E/flutter (18828): #5      
Future._propagateToListeners.handleValueCallback 
(dart:async/future_impl.dart:678:45)
E/flutter (18828): #6      Future._propagateToListeners 
(dart:async/future_impl.dart:707:32)
E/flutter (18828): #7      Future._completeWithValue 
(dart:async/future_impl.dart:522:5)
E/flutter (18828): #8      Future._asyncComplete.<anonymous closure> 
(dart:async/future_impl.dart:552:7)
E/flutter (18828): #9      _rootRun (dart:async/zone.dart:1124:13)
E/flutter (18828): #10     _CustomZone.run (dart:async/zone.dart:1021:19)
E/flutter (18828): #11     _CustomZone.runGuarded 
(dart:async/zone.dart:923:7)
E/flutter (18828): #12     _CustomZone.bindCallbackGuarded.<anonymous 
closure> (dart:async/zone.dart:963:23)
E/flutter (18828): #13     _microtaskLoop 
(dart:async/schedule_microtask.dart:41:21)
E/flutter (18828): #14     _startMicrotaskLoop 
(dart:async/schedule_microtask.dart:50:5)
E/flutter (18828):

【问题讨论】:

    标签: android flutter dart


    【解决方案1】:

    请删除 Navigator.pop(context);

    ListTile(
                title: Text('Collections'),
                leading: Icon(Icons.monetization_on),
                onTap: () {
                  Navigator.of(context).pushNamed('/collections');
                  //Navigator.pop(context);
                },
              ),
    

    完整代码

    import 'package:flutter/material.dart';
    void main() => runApp(Bsk());
    
    
    class Bsk extends StatelessWidget {
      static final GlobalKey<ScaffoldState> scaffoldKey =
      GlobalKey<ScaffoldState>();
    
      @override
      Widget build(BuildContext context) {
        final appTitle = 'BSK Management';
        return MaterialApp(
          routes: {
            '/home': (context) => Bsk(),
    
            '/collections': (context) => Collections(),
          },
          title: appTitle,
          home: Builder(builder: (context) => Scaffold(
            //resizeToAvoidBottomInset: false,
            key:scaffoldKey,
            appBar: AppBar(
              title: Text(appTitle),
            ),
            body: Text('hi'),
            drawer: Drawer(
              child: ListView(
                padding: EdgeInsets.zero,
                children: <Widget>[
                  DrawerHeader(
                    child: Text('BSK Management'),
                    decoration: BoxDecoration(
                      color: Colors.blue,
                    ),
                  ),
                  ListTile(
                    title: Text('Home'),
                    leading: Icon(Icons.home),
                    onTap: () {
                      Navigator.pop(context);
                    },
                  ),
                  ListTile(
                    title: Text('Collections'),
                    leading: Icon(Icons.monetization_on),
                    onTap: () {
                      Navigator.of(context).pushNamed('/collections');
                      //Navigator.pop(context);
                    },
                  ),
                ],
              ),
            ),
          ),
          ),
        );
      }
    }
    
    
    class Collections extends StatefulWidget {
      @override
      _CollectionsState createState() => _CollectionsState();
    }
    
    class _CollectionsState extends State<Collections> {
      @override
      Widget build(BuildContext context) {
        return Container(
          child: Center(child: Text("Hello")),
        );
      }
    }
    

    【讨论】:

      【解决方案2】:

      尝试删除您的 .dart_tool/build 目录并重新构建作为解决方法。

      也许这个工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 2019-12-10
        相关资源
        最近更新 更多