【问题标题】:Navigation in flutter颤动中的导航
【发布时间】:2021-07-19 06:59:26
【问题描述】:

我正在尝试在颤振中进行基本导航(是的,我是菜鸟),但它似乎不起作用。我的 lib 文件夹中有三个文件;

main.dart
home.dart
about.dart

main.dart

import 'package:flutter/material.dart';
import './home.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(primarySwatch: Colors.deepPurple), home: homePage());
  }
}

home.dart

import 'package:flutter/material.dart';
import './about.dart';

class homePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Navigation',
      home: Scaffold(
        appBar: AppBar(
          centerTitle: true,
          title: Text('Flutter Navigation'),
        ),
        body: Center(
          child: Column(
            children: <Widget>[
              ElevatedButton(
                child: Text('Click Here'),
                style: ElevatedButton.styleFrom(
                  elevation: 0,
                  minimumSize: Size(200, 50),
                  textStyle: TextStyle(
                    fontSize: 20,
                  )
                ),
                onPressed: () => Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (BuildContext context) => about(),
                )),
),
]
),
)
  )
);
}
}

请原谅结局看起来有多丑。

如果您想查看 about.dart 的内容,请告诉我,但这无关紧要,因为 navigator.push 从 'home' 到 'about' 不起作用。我怎样才能让它发挥作用?

【问题讨论】:

  • 您能否分享您在控制台中获得的错误日志详细信息。
  • 没有为类“homePage”定义方法“about”。尝试将名称更正为现有方法的名称,或定义名为“about”的方法。
  • 重启 android studio 没有帮助

标签: flutter navigation


【解决方案1】:

解决方案:仅使用 context 而不是 BuildContext

代码错误:

onPressed: () => Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (BuildContext context) => about(),
                )),

我的解决方案:`

  onPressed: () => Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => about(),
            )),

【讨论】:

  • 但那是类型
  • 通过在终端上打印一些内容来确保您的“onPressed:”正常工作。
【解决方案2】:

我终于搞定了,所以我想发布答案,以防其他人对此有任何疑问(我们都知道 Flutters 导航系统受到了多少批评)。

我还没有设置我的路线,我需要在我的第二页 about.dart 中的一个类,我似乎在上面,但不知何故迷失在我的真实代码中。无论如何,代码应该如下所示;

main.dart

import 'package:flutter/material.dart';
import './about.dart';

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

class Landing extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new LandingBody(),
      appBar: new AppBar(
        title: new Text('Welcome'),
        elevation: 0.0,
      ),
    );
  }
}

class LandingBody extends StatefulWidget {
  @override
  LandingBodyState createState() {
    return new LandingBodyState();
  }
}

class LandingBodyState extends State<LandingBody> {
  Widget build(BuildContext context) {
    return new Container(
        child: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            //Content goes in here
          ],
        ),
      ),
    );
  }
}// I haven't double checked all the opening/closing

关于.dart

import 'package:flutter/material.dart';

class about extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Welcome',
        home: Scaffold(
          appBar: AppBar(
            // styling for appbar goes here
            title: Text('Welcome'),
          ),
          body: Center(
            child: Column(
              children: <Widget>[
                // content goes here
              ]
            ),
          ),
        )
    );
  }
}

这可能不是一个完美的表示。一些打开/关闭可能不完全正确,但复制/粘贴应该足以让系统在相当短的时间内工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2021-09-14
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多