当前位置: 首页 > 知识库问答 >
问题:

Flutter应用程序中每个页面的多个脚手架

薛博艺
2023-03-14

这是否意味着只有一个单一的脚手架下的材料应用程序或一个单亲脚手架为每个页面。如果是第一次,我们怎么导航?如果它更晚,这不是意味着在每次导航中重新呈现公共的appbarbottombar吗?最好的做法是什么。

共有1个答案

毕瀚
2023-03-14

这意味着,通常每个页面应该有一个脚手架(更准确地说,每个路由/screen),并且不应该嵌套脚手架

例如,看一下可以在DartPad中运行的这个代码片段:

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: 'Navigation Basics',
    home: FirstRoute(),
  ));
}

class FirstRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Route'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Open route'),
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondRoute()),
            );
          },
        ),
      ),
    );
  }
}

class SecondRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Second Route"),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Text('Go back!'),
        ),
      ),
    );
  }
}

在这里,您可以看到有两个不同的页面/routes/screens,每个页面都有自己的scaffold。我们使用navigator来回导航,因此我们的页面被添加到堆栈中,一个scaffold放在另一个之上。那很好。

另一方面,看一下这个例子:

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: 'Navigation Basics',
    home: FirstRoute(),
  ));
}

class FirstRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Route'),
      ),
      body: Scaffold(
        body: Center(
          child: RaisedButton(
            child: Text('Open route'),
            onPressed: () {},
          ),
        ),
      ),
    );
  }
}

在这里,我们嵌套了两个脚手架,正如您所看到的,第二个应用程序栏被绘制在第一个应用程序栏的下面。这不是选项卡式或嵌套式导航的最佳方法。如果要在scaffold的主体中导航,并根据内容更改应用程序栏,则首选使用tabcontroller,如defaulttabcontroller。看一下这个例子:

import 'package:flutter/material.dart';

void main() {
  runApp(TabBarDemo());
}

class TabBarDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          appBar: AppBar(
            bottom: TabBar(
              tabs: [
                Tab(icon: Icon(Icons.directions_car)),
                Tab(icon: Icon(Icons.directions_transit)),
                Tab(icon: Icon(Icons.directions_bike)),
              ],
            ),
            title: Text('Tabs Demo'),
          ),
          body: TabBarView(
            children: [
              Icon(Icons.directions_car),
              Icon(Icons.directions_transit),
              Icon(Icons.directions_bike),
            ],
          ),
        ),
      ),
    );
  }
}

正如您所看到的,我们只使用了一个脚手架,因为我们实际上只处理一个屏幕。碰巧我们想要显示内容页并在scaffold的主体中导航。

 类似资料:
  • 我需要使用 laravel 5.3 和 vuejs 2 构建一个应用程序,因为我需要使用双向绑定而不是使用 jquery。 我需要用刀片模板设置视图。然后,我需要在每个页面中使用vuejs,如下所述。 资源/断言/js/组件/List.vue resources/asserts/views/post/index.blade.php 有Add。vue创建.blade。php等…在Add。vue 这是

  • 我有一个测试自动化工具,现在我们正在为我们的网络应用程序的自动化测试实现页面对象模型,根据我的理解,如果你只有一个应用程序要测试,页面对象模型是好的,但是我们有多个网络应用程序要测试测试。我只是想知道是否真的有可能为多个Web应用程序创建页面对象模型,并且该工具应该能够通过使用页面对象进行自动化测试??

  • 使用MediaQuery类及其数据属性,我想为整个应用程序设置textScaleFactor,但是我不能在MaterialApp之前获得上下文。

  • 我正在构建一个应用程序,它有任意数量的“微社区”。目前,一个用户只能属于一个,所以当他们最初注册时,他们输入一个秘密代码,将他们与相关社区联系起来。 将这些“微社区”(由未来在应用程序上玩一个空间的客户拥有)分离成单独的Firebase项目或将所有数据保存在一起是明智的吗?

  • 目前正在用C#中的ITextSharp构建一个PDF。PDF由三个“部分”组成,一个封面,一个可以跨越多个页面的表格,以及一个最终页面。拥有该表的页面需要在第一页包含页眉,并在所有包含页眉的页面上包含页脚,但封面和最后一页不需要。 我使用XMLWorker构建页面,但这并不重要。构建页面的代码如下: 我遇到的麻烦是确定一种方法来防止页脚出现在结束页上。我正在重写OnEndPage以创建页脚。是否有

  • 问题内容: 我想知道如何在单个页面应用程序中使用多个控制器。我试图找出答案,但发现的问题与我的非常相似,但是有很多不同的答案可以解决一个特定的问题,最终您不会在单个页面应用程序中使用多个控制器。 那是因为在单个页面上使用多个控制器并不明智吗?还是只是不可能? 假设我已经在主页上有一个踢屁股图像轮播控制器,但是随后我学习了如何(比如说)使用模态,为此我还需要一个新的控制器(或者其他我需要控制器的东西