【Flutter】创建应用顶级组件,应用根组件 (学习记录)

这篇具有很好参考价值的文章主要介绍了【Flutter】创建应用顶级组件,应用根组件 (学习记录)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在 Flutter 中,应用的顶级组件或根组件通常是在 main() 函数中通过 runApp() 方法创建的。这个组件通常是一个 MaterialApp、CupertinoApp、GetMaterialApp 或其他类似的应用框架组件。

以下是一个创建 MaterialApp 作为根组件的示例:

void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

在这个示例中,MyApp 是应用的根组件,它返回了一个 MaterialApp 组件。MaterialApp 组件是应用的主框架,它包含了应用的主题、路由等设置。MyHomePage 组件是应用的主页面,它被设置为 MaterialApp 的 home 属性,这意味着它是应用启动时显示的第一个页面。
请注意,你的根组件应该是一个 StatelessWidget 或 StatefulWidget,并且它的 build 方法应该返回一个组件。这个组件通常是一个应用框架组件,如 MaterialApp 或 CupertinoApp,但也可以是任何其他类型的组件。

一、组件 MaterialApp

组件无需引入依赖,项目创建时,默认存在。
这是 Flutter 提供的默认应用框架,它实现了 Material Design 风格。它提供了路由、主题、本地化等基本功能。

优点:简单、易用。
缺点:功能相对基础,如果需要更高级的功能(如状态管理、依赖注入等),可能需要使用其他库。
例子:

/** 引入使用的组件 */
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

/** 主函数 */
void main() {
  runApp(MyApp());
}

/**
 * StatelessWidget 是一个静态组件(不可变组件)
 * StatelessWidget 是非常基础的 Flutter 组件,它用于构建不需要维护内部状态的用户界面
 * 请注意,虽然 StatelessWidget 本身是不可变的,但它可以依赖于可以改变的数据
 * 例如,它可以依赖于父组件传递的参数,或者依赖于 InheritedWidget 提供的数据
 * 当这些数据改变时,StatelessWidget 会被重新构建,从而更新用户界面
 */
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      /** ThemeData对象定义应用主题色 */
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      /** 
       * localizationsDelegates 和 supportedLocales 属性被设置为支持英语和中文的本地化代理,
       * 这使得应用可以根据用户的设备设置显示不同的语言
       */
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        const Locale('en', ''), // English
        const Locale('zh', ''), // Chinese
      ],
      /** initialRoute 设置初始展示的路由页面 */
      initialRoute: '/',
      /** routes 路由表 */
      routes: {
        '/': (context) => HomePage(),
        '/second': (context) => SecondPage(),
      },
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      /** 标题设置 */
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      /** 内容设置 */
      body: Center(
      /** 动效按钮 */
        child: RaisedButton(
          child: Text('Go to Second Page'),
          /** 点击事件 */
          onPressed: () {
            /** 路由跳转页面 */
            Navigator.pushNamed(context, '/second');
          },
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: Text('This is the second page'),
      ),
    );
  }
}

二、组件 CupertinoApp

组件无需引入依赖,项目创建时,默认存在,在 pubspec.yaml 文件中,cupertino_icons 依赖包含该组件。
这是 Flutter 提供的另一个应用框架,它实现了 Cupertino (iOS) 风格。它的优点和缺点与 MaterialApp 类似,但它提供了一套模仿 iOS 界面设计的组件
例子:同上,替换关键组件即可。

三、组件 GetMaterialApp

该组件在项目创建时,没有默认携带,使用该组件要在 pubspec.yaml 文件添加 get 依赖以及版本,版本号在 pub.dev 搜索 get 进行查找,进入找到 Versions 标签进行查看版本号。
这是 GetX 库提供的应用框架,它提供了一些额外的功能,如状态管理、依赖注入、路由管理等。
优点:功能强大、易用。
缺点:需要额外的学习成本,而且如果你不需要它的高级功能,使用它可能会有些过度。
例子:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: '/',
      /** 
       * GetMaterialApp 的 getPages 属性是一个路由表,这使得应用可以通过路由名进行页面跳转。
       * 在这个例子中,应用有两个页面:HomePage 和 SecondPage,它们的路由名分别是 '/' 和 '/second'。
       */
      getPages: [
        GetPage(name: '/', page: () => HomePage()),
        GetPage(name: '/second', page: () => SecondPage()),
      ],
    );
  }
}
/** 
 * HomeController 是一个 GetxController,它包含了一个可观察的 count 变量和一个 increment 方法。
 * HomePage 使用 Get.put() 方法创建了一个 HomeController 的实例,并将它存储在 GetX 的依赖注入系统中。
 */
class HomeController extends GetxController {
  var count = 0.obs;

  void increment() {
    count++;
  }
}

class HomePage extends StatelessWidget {
  final HomeController controller = Get.put(HomeController());

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        /** HomePage 使用 Obx() 组件来监听 count 变量的变化,并在 count 变化时重新构建 Text 组件 */
        child: Obx(() => Text('Clicks: ${controller.count}')),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: controller.increment,
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Go back'),
          /** SecondPage 使用 Get.back() 方法来返回上一个页面,这是 GetX 提供的路由管理功能的一部分 */
          onPressed: () => Get.back(),
        ),
      ),
    );
  }
}

四、组件 Phoenix

该组件需要引入依赖,在 pubspec.yaml 写入依赖 phoenix 以及版本号,版本号在 pub.dev 搜索 flutter_phoenix 进入找到 Versions 标签进行查看版本号。
这是 phoenix 库提供的应用框架,它的主要功能是可以在运行时重启应用。这对于一些需要清理全局状态或重载应用配置的场景非常有用。
例子:文章来源地址https://www.toymoban.com/news/detail-756066.html

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

void main() {
  runApp(Phoenix(child: MyApp()));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Phoenix Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Phoenix Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Restart App'),
          onPressed: () {
          	/** 重启应用 */
            Phoenix.rebirth(context);
          },
        ),
      ),
    );
  }
}

到了这里,关于【Flutter】创建应用顶级组件,应用根组件 (学习记录)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter学习—— Vscode创建项目

    目录 一、Vscode创建项目 二、补充五种项目类型  Application:  Module 模块开发, Package开发 Plugin 插件开发 Skeleton 骨架开发 1.快捷键 Ctrl+Shift+P 打开命令面板,选择新项目 2.选择需要开发的项目类型 Application 应用开发(下面会补充这五种项目类型说明) 3.选择Application后弹出文件目

    2024年02月16日
    浏览(40)
  • Flutter学习四:Flutter开发基础(六)调试Flutter应用

    目录 0 引言 1 调试Flutter应用 1.1 日志与断点 1.1.1 debugger() 声明 1.1.2 print和debugPrint 1.1.3 调试模式、中间模式、发布模式 1.1.4 断点 1.2 调试应用程序层 1.2.1 转储Widgets树 1.2.2  转储渲染树 1.2.3 转储Layer树 1.2.4 转储语义树 1.2.5 调度(打印帧的开始和结束) 1.2.6 可视化调试

    2024年02月12日
    浏览(56)
  • flutter学习-day9-基础组件

    本文学习和引用自《Flutter实战·第二版》:作者:杜文 Text:用于显示简单样式文本,它包含一些控制文本显示样式的一些属性: TextStyle:用于指定文本显示的样式如颜色、字体、粗细、背景等: TextSpan:代表文本的一个片段,可对一个 Text 内容的不同部分按照不同的样式显

    2024年02月04日
    浏览(39)
  • Flutter在Visual Studio Code上首次创建运行应用

    一、创建Flutter应用 1、前提条件     安装Visual Studio Code并配置好运行环境 2、开始创建Flutter应用 1)、打开Visual Studio Code 2)、打开  View Command Palette 。 3)、在搜索框中输入“flutter”,弹出内容如下图所示,选择“  Flutter: New Project ”,并点击Enter 4)、选择  Applocation ,并点击

    2024年02月04日
    浏览(53)
  • Flutter 笔记 | Flutter 布局组件

    布局类组件都会包含一个或多个子组件,布局类组件都是直接或间接继承 SingleChildRenderObjectWidget 和 MultiChildRenderObjectWidget 的Widget,它们一般都会有一个 child 或 children 属性用于接收子 Widget。 不同的布局类组件对子组件排列(layout)方式不同,如下表所示: Widget 说明 用途

    2024年02月06日
    浏览(53)
  • Flutter 笔记 | Flutter 可滚动组件

    我们介绍过 Flutter 有两种布局模型: 基于 RenderBox 的盒模型布局。 基于 Sliver ( RenderSliver ) 按需加载列表布局。 之前我们主要了解了盒模型布局组件,下面学习基于 Sliver 的布局组件。 通常可滚动组件的子组件可能会非常多、占用的总高度也会非常大;如果要一次性将子组件

    2024年02月06日
    浏览(53)
  • Flutter开发笔记:Flutter 布局相关组件

    Flutter开发笔记 Flutter 布局与布局组件 - 文章信息 - Author: Jack Lee (jcLee95) Visit me at: https://jclee95.blog.csdn.net Email: 291148484@163.com. Shenzhen China Address of this article: https://blog.csdn.net/qq_28550263/article/details/131419782 【介绍】:本文介绍Flutter 布局相关组件。 Flutter 中提供了丰富的原生布局组

    2024年02月11日
    浏览(56)
  • 【第五章 flutter学习之flutter进阶组件-上篇】

    children可以复制多个组成列表 设置纵向列表方向 Flutter动态列表可以通过ListView.builder或ListView.separated来实现。 如下例 Filutter 是一个开源的 JavaScript 库,用于创建和管理可过滤和可排序的数据表。FridView 是 Filutter 库中的一个组件,用于在数据表中显示数据行。FridView 组件具有

    2024年02月14日
    浏览(39)
  • 【第五章 flutter学习之flutter进阶组件-下篇】

    Flutter Scaffold 是一个用于构建基本用户界面的布局组件。它提供了许多属性,使得开发者能够轻松地创建一个完整的屏幕布局。以下是 Flutter Scaffold 的一些主要属性: appBar:定义应用的顶部导航栏。通常,它包含标题、返回按钮和其他导航控件。 body:应用程序的主要内容区

    2024年02月14日
    浏览(43)
  • Flutter(九)Flutter动画和自定义组件

    Animation、Curve、Controller、Tween这四个角色,它们一起配合来完成一个完整动画 Animation Animation是抽象类,和UI渲染没有关系,功能是保存动画的插值和状态;比较常用的是Animation addListener:帧监听器中最常见的行为是改变状态后调用setState()来触发UI重建 addStatusListener:动画开始

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包