flutter:第一个flutter&Widget的使用 (二)

简介: 本文介绍了Flutter框架下的基本组件及其用法,包括简单的 Stateless Widget 如文本和按钮,以及更复杂的 StatefulWidget 示例。详细解释了如何使用 `context` 获取祖先小部件的信息,并展示了 `MaterialApp` 的属性及用途。此外,还探讨了 `StatefulWidget` 与 `StatelessWidget` 的区别,以及 `AppBar` 的常见属性配置方法。适合Flutter初学者参考学习。

前言

在Flutter开发中,掌握基本组件的使用是构建高效应用的关键。本文将深入探讨Flutter框架下的核心组件及其用法,特别是简单的Stateless Widget,如文本和按钮,以及更复杂的StatefulWidget示例。

第一个flutter

widget

import 'package:flutter/material.dart';
class Echo extends StatelessWidget{
  const Echo ({super.key});
  @override
  Widget build(BuildContext context){
    return Center(
      child: Container(
        //背景颜色
        color: Colors.blue,
        child: const Text(
            'hello flutter',
          //left to right
          textDirection: TextDirection.ltr,
        ),
      ),
    );
  }
}
void main(List<String> args){
  runApp(const Echo());
}

context

import 'package:flutter/material.dart';
class ContextRoute extends StatelessWidget {
  const ContextRoute({super.key});
// scaffold   脚手架
  @override
  Widget build(BuildContext context) {
  //  Scaffold  find  Widget  什么的
  Scaffold scaffold=  context.findAncestorWidgetOfExactType<Scaffold>()!;
    // 得到appBar  里面的内容   并返回
    return   (scaffold.appBar as AppBar).title!;
  }
}
  void main(List<String> args) {
    runApp(MaterialApp(
      title: "my app",
      home: Scaffold(
        appBar: AppBar(
          title: const Text("myApp"),
        ),
        //设置body 的类容为 ContextRoute 的返回值
        body: const ContextRoute(),
      ),
    ));
  }

StatefulWidget

import 'package:flutter/material.dart';
class CounterWidget extends StatefulWidget{
  const CounterWidget({super.key});
  @override
  State<StatefulWidget> createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget>{
  int _counter=0;
  @override
  Widget build(BuildContext context) {
  return const MaterialApp(
    title: "Myapp",
    home: Scaffold(
      body: Center(
        child: TextButton(
            onPressed: () =>setState(()=> _counter++),
            child: Text('0',
            style: const TextStyle(
              fontSize: 28,
            ),),
        ),
      ),
    ),
  );
  }
}
int count(var a){
  return a++;
}
void main(List<String>list){
  runApp(const CounterWidget());
}
import 'package:flutter/material.dart';
class Echo extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
return _Echo();
  }
}
class _Echo extends State <Echo>{
    @override
    Widget build(BuildContext context){
      return Scaffold(
          appBar: AppBar(
            title:const Text( "i am the title"),
          ),
          body:const Center(
            child: Text("i am the body"),
          ),
          floatingActionButton: FloatingActionButton(
          child: const Icon(Icons.add),onPressed: (){
            print("hello,world");
          },
      ),
      );
    }
  }
void main(List<String> args){
runApp(MaterialApp(
  title: 'hello',
  home: Echo(),
));
}

Widget

MaterialApp

装饰app

ThemeData 有的属性,
ThemeData是Flutter UI框架中的一个类,用于定义应用程序的主题样式。它包含以下属性:
appBarTheme:用于自定义AppBar(导航栏)的样式。
backgroundColor:用于定义应用程序的背景色。
bottomAppBarColor:用于定义底部导航栏的背景色。
brightness:用于定义状态栏的明亮模式,可以是Brightness.light或Brightness.dark。
buttonColor:用于定义按钮的背景色。
cardColor:用于定义卡片(Card)的背景色。
dialogBackgroundColor:用于定义对话框的背景色。
disabledColor:用于定义被禁用的组件的颜色。
dividerColor:用于定义分割线的颜色。
errorColor:用于定义错误信息的颜色。
focusColor:用于定义组件获得焦点时的颜色。
fontFamily:用于定义应用程序中的默认字体。
iconTheme:用于自定义图标的样式。
primaryColor:用于定义应用程序的主要颜色。
scaffoldBackgroundColor:用于定义Scaffold(脚手架)的背景色。
secondaryHeaderColor:用于定义辅助提示的背景色。
textTheme:用于自定义文本的样式。
这些属性可以根据需求进行自定义配置,以创建符合应用程序设计风格的主题样式。
在网上搜索更佳答案

container

box

return Center(
      child: Container(
        // 配置文字 居中
        alignment: Alignment.center,
        width: 100,
        height: 100,
        // 装修盒子
        decoration: BoxDecoration(
            color: Colors.red,
            border: Border.all(color: Colors.grey),
            borderRadius: BorderRadius.circular(10),
            boxShadow: [
              BoxShadow(color: Colors.black, blurRadius: 10),
            ],
            //LinearGradient,RadialGradient
            gradient: LinearGradient(colors: [Colors.blue, Colors.yellow])),
              // 改变方向
        child: Text(
          'this is a box',
          style: TextStyle(color: Colors.white),
        ),
      ),
    );

button

return Center(
        child: Container(
          width: 200,
          height: 40,
          alignment: Alignment.center,
          margin: EdgeInsets.all(10),
          // margin: EdgeInsets.fromLTRB(left, top, right, bottom),
          decoration: BoxDecoration(
            // color: Color.fromRGBO(10, 10, 10, 1)
              color: Colors.blue,
              borderRadius: BorderRadius.circular(10)
          ),
          child: Text('button',style: TextStyle(
            color: Colors.white,
            fontSize: 22,
          ),),
        )
    );

动画

transform: Matrix4.translationValues(40, 0, 0),
        transform: Matrix4.rotationZ(0.2),

text

//改变文字样式
         overflow: TextOverflow.ellipsis,
           fontStyle:normal,italic


StatefulWidget和statelessWidget

StatefulWidget 和 StatelessWidget 是 Flutter 框架中的两个重要概念,用于构建用户界面。

  1. StatefulWidget(有状态的小部件): StatefulWidget 是表示有状态部件的类,其状态在生命周期中可以发生改变。要创建 StatefulWidget,需要定义一个继承自 StatefulWidget 的类,并为该类实现两个关键部分:
  • State:StatefulWidget 的状态。它维护和管理与该部件相关的数据,并根据需要在部件生命周期中更新。State 是一个独立的对象,它与 StatefulWidget 一起创建,并且可以通过调用 setState() 方法来触发状态更新。
  • build() 方法:在 State 中,build() 方法用于构建并返回表示该部件的用户界面。该方法会在初始化和每次状态更新时被调用。
  1. StatelessWidget(无状态的小部件): StatelessWidget 表示没有可变状态的部件。一旦创建,它们的属性(如文本、样式)就不会发生更改。要创建 StatelessWidget,需要定义一个继承自 StatelessWidget 的类,并实现其中一个关键部分:
  • build() 方法:通过 build() 方法来构建并返回表示该部件的用户界面。与 StatefulWidget 不同,StatelessWidget 没有可变状态,因此在构建后其外观不会发生变化。

总之,StatefulWidget 用于构建具有可变状态的部件,而 StatelessWidget 用于构建外观稳定且没有可变状态的部件。在 Flutter 应用程序中,通常根据需要选择使用哪种部件,以实现交互性和外观的要求。


appBar

 

AppBar 有哪些属性

AppBar是Flutter中的一个小部件,用于创建应用程序的导航栏。它具有以下常用属性:

backgroundColor:用于定义AppBar的背景颜色。

title:用于设置AppBar的标题文本,可以是一个文本小部件(例如Text),也可以是一个图标小部件(例如Icon)。

actions:用于在AppBar的右侧添加操作按钮,可以是一个包含多个小部件的列表。

leading:用于设置AppBar的左侧导航按钮,通常是一个图标按钮(例如IconButton)。

centerTitle:用于定义标题是否位于AppBar的中间,默认为false,即标题位于左侧。

elevation:用于定义AppBar的阴影高度,默认为4.0。

brightness:用于定义状态栏的明亮模式,可以是Brightness.light或Brightness.dark。

iconTheme:用于自定义AppBar中图标的样式,如颜色、大小等。

textTheme:用于自定义AppBar中文本的样式,如颜色、大小等。

toolbarHeight:用于定义AppBar的高度,默认根据系统平台确定。

这些属性可以根据需求进行自定义配置,以创建符合应用程序设计风格的AppBar。

相关文章
|
缓存 Dart 开发工具
Flutter一切皆widget但是不要将所有东西放入一个widget
作为 Flutter 开发人员,我相信您在您的开发生活中至少听说过这句流行的句子:“**一切都是widget”。这是 Flutter 的口头禅,它揭示了这个非常好的 SDK 的内在力量! 当我们在widgets目录中,我们可以看到很多小部件,如Padding,Align,SizedBox,等。我们通过组合它们来创建其他小部件,我发现这种方法可扩展、强大且易于理解。
279 0
Flutter一切皆widget但是不要将所有东西放入一个widget
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
787 7
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1140 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
572 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1045 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
581 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
319 1
|
缓存 前端开发 IDE
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
592 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
581 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
778 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程

热门文章

最新文章