繁体   English   中英

Dart Navigator提供了NoSuchMethodError

[英]Dart Navigator gives NoSuchMethodError

我需要帮助,我试图在按下按钮时显示一个新页面。 我收到以下错误:

I/flutter (31562): The following NoSuchMethodError was thrown while handling a gesture:
I/flutter (31562): Class 'MyHomePage' has no instance getter 'context'.
I/flutter (31562): Receiver: Instance of 'MyHomePage'
I/flutter (31562): Tried calling: context
I/flutter (31562): When the exception was thrown, this was the stack:

这是我的代码:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class MyHomePage extends StatelessWidget{

  Container pictureSection(){
    return new Container(
      child: new Image.asset(
        'images/sw.jpeg',
        width: 600.0,
        height: 240.0,
        fit: BoxFit.cover,
      ),
    );
  }

  Container mainMenuSection(){
    var spacer = new SizedBox(height: 12.0);
    return new Container(
      child: new Column(
        children: <Widget>[
          spacer,
          new RaisedButton(
            onPressed: () {Navigator.of(context).pushNamed('/PlanetsPage');},
            child: new Text('Get Planet'),
            ),
          spacer,
          ],
        ),
      );
  }

  @override
  Widget build(BuildContext context){
    var spacer = new SizedBox(height: 32.0);
    var spacer2 = new SizedBox(height: 15.0);
    return new Scaffold(
      body: new Center(
        child: new Column(
          children: <Widget>[
            pictureSection(),
            mainMenuSection(),
          ],
        ),
      ),
    );
  }
}

class PlanetsPage extends StatelessWidget{
  Widget build(BuildContext context){
    return new Scaffold(
      body: new Center(
        child: new Column(
          child: new Text('Hello World'),
        ),
      ),
    );
  }
}

void main(){
  runApp(new MaterialApp(
    home: new MyHomePage(),
    routes: <String, WidgetBuilder> {
      '/PlanetsPage': (BuildContext context) => new PlanetsPage(),
    },
  ));
}

我试图在按下按钮时从主页转到“行星”页面,并且仅在按下按钮时才会显示错误。 我正在使用Hauwei Nova进行测试。

尝试从build方法传递BuildContext ,而不要使用MyHomePagecontext成员。 见下文:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class MyHomePage extends StatelessWidget{

  Container pictureSection(){
    return new Container(
      child: new Image.asset(
        'images/sw.jpeg',
        width: 600.0,
        height: 240.0,
        fit: BoxFit.cover,
      ),
    );
  }

  Container mainMenuSection(BuildContext context){
    var spacer = new SizedBox(height: 12.0);
    return new Container(
      child: new Column(
        children: <Widget>[
          spacer,
          new RaisedButton(
            onPressed: () {Navigator.of(context).pushNamed('/PlanetsPage');},
            child: new Text('Get Planet'),
            ),
          spacer,
          ],
        ),
      );
  }

  @override
  Widget build(BuildContext context){
    var spacer = new SizedBox(height: 32.0);
    var spacer2 = new SizedBox(height: 15.0);
    return new Scaffold(
      body: new Center(
        child: new Column(
          children: <Widget>[
            pictureSection(),
            mainMenuSection(context),
          ],
        ),
      ),
    );
  }
}

class PlanetsPage extends StatelessWidget{
  Widget build(BuildContext context){
    return new Scaffold(
      body: new Center(
        child: new Column(
          child: new Text('Hello World'),
        ),
      ),
    );
  }
}

void main(){
  runApp(new MaterialApp(
    home: new MyHomePage(),
    routes: <String, WidgetBuilder> {
      '/PlanetsPage': (BuildContext context) => new PlanetsPage(),
    },
  ));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM