【问题标题】:Unhandled Exception: NoSuchMethodError: The getter 'focusScopeNode' was called on null未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'focusScopeNode'
【发布时间】:2020-06-01 08:49:40
【问题描述】:

我是新来的,并且一直面临“focusScopeNode”的问题。我也尝试了该网站上的其他解决方案,但无法检测到问题。我无法理解上下文和构建器的概念。任何形式的帮助将不胜感激。

未处理的异常:NoSuchMethodError:getter 'focusScopeNode' 被调用为空。 E/flutter (18828):接收器:空 E/flutter (18828):尝试调用:focusScopeNode

class Homepage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      routes: {
        '/login': (context) => Login(),
      },
      title: 'NavigationDrawer Demo',
      theme: new ThemeData(
        primarySwatch: Colors.red,
      ),
      home: new HomePage(),
    );
  }
}
class DrawerItem {
  String title;
  IconData icon;
  DrawerItem(this.title, this.icon);
}
FirebaseUser user;

class HomePage extends StatefulWidget {
  HomePage({
    this.auth,
    this.onSignedOut,
  });
  final AuthImplementation auth;
  final VoidCallback onSignedOut;
  final drawerItems = [
    new DrawerItem("Home", Icons.home),
    new DrawerItem("Logout", Icons.exit_to_app),
  ];

  @override
  State<StatefulWidget> createState() {
    return new HomePageState();
  }
}

class HomePageState extends State<HomePage> {
  void _logOutUser() async {
    try {
      await widget.auth.signOut();
      widget.onSignedOut();

    } catch (e) {
      print(e.toString());
    }
  }

  int _selectedDrawerIndex = 0;
  _getDrawerItemWidget(int pos) {
    switch (pos) {
      case 0:
        return new MyTabbedPage();
      case 7:
        _logOutUser();
        return new StartApp();
      default:
        return new Text("Error");
    }
  }

  _onSelectItem(int index) {
    setState(() => _selectedDrawerIndex = index);
    Navigator.of(context).pop();
  }

  @override
  Widget build(BuildContext context) {
    var drawerOptions = <Widget>[];
    for (var i = 0; i < widget.drawerItems.length; i++) {
      var d = widget.drawerItems[i];
      drawerOptions.add(
          new ListTile(
            leading: new Icon(d.icon),
            title: new Text(d.title),
            selected: i == _selectedDrawerIndex,
            onTap: () => _onSelectItem(i),
          )
      );
    }
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我认为问题可能出在您调用 _onSelectedItem() 方法的地方。尝试将方法放在 Build 上下文中,如下所示:

    @override
      Widget build(BuildContext context) {
    
    _onSelectItem(int index) {
        setState(() => _selectedDrawerIndex = index);
        Navigator.of(context).pop();
      }
    
        var drawerOptions = <Widget>[];
        for (var i = 0; i < widget.drawerItems.length; i++) {
          var d = widget.drawerItems[i];
          drawerOptions.add(
              new ListTile(
                leading: new Icon(d.icon),
                title: new Text(d.title),
                selected: i == _selectedDrawerIndex,
                onTap: () => _onSelectItem(i),
              )
          );
        }
      }
    

    可能是当您调用 Navigator.pop(context) 时,它不知道“上下文”是什么。因此,通过将方法放在 Build(context) 中,它应该可以解决它。

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 2022-01-16
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多