flutter笔记-万物皆是widget

这篇具有很好参考价值的文章主要介绍了flutter笔记-万物皆是widget。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


这篇文章后就不见写了,学flutter主要是为了更好的使用 flutter-webrtc,所以到这里基本就了解了大部分的知识,后续边用边查;
在flutter中所有的view都叫widget,类似文本组件Text也是集成自widget;

helloFlluter

创建第一个项目如下:

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

void main()=>runApp(
    Center(
     child:  Text(
        "Hello world!!",
        textDirection: TextDirection.ltr,
        style: TextStyle(
            fontSize: 20,
            color: Colors.orange
        ),
      ),
    )
);

runApp传入的参数就是一个Widget;所以我们可以传入Text,示例中的Center类也是继承自Widget;

或者我们可以直接使用MaterialApp类去创建Material风格的应用;

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

void main() => runApp(MaterialApp(
    debugShowMaterialGrid: false,
    debugShowCheckedModeBanner: false,
    home: Scaffold(
      appBar: AppBar(
        title: Text("first app"),
      ),
      body: Text(
        "Hello world!!",
        textDirection: TextDirection.ltr,
        style: TextStyle(fontSize: 20, color: Colors.orange),
      ),
    )));

如图:
flutter笔记-万物皆是widget,flutter,flutter,笔记

自定义Widget

自定义一个需要以下两步骤:

  1. 定义类继承自自己要实现的widget
  2. 实现必须要实现的方法build方法;
    例如如下示例:
class LYMHomePage extends StatelessWidget{
  
  Widget build(BuildContext context) {
    // TODO: implement build
    throw UnimplementedError();
  }
}

其中的build是有flutter自动调用;

优化

在上面的示例main中的调用比较多,这显然不适合项目开发,所以初步优化如下:

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

class LYMApp extends StatelessWidget{
  
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowMaterialGrid: false,
        debugShowCheckedModeBanner: false,
        home: LYMScaffold());
  }
}

class LYMScaffold extends StatelessWidget{
   
  Widget build(BuildContext context) {
    return Scaffold(
       appBar: AppBar(
         title: Text("first app"),
       ),
       body:LYMContainerBody(),
     );
  }
}
class LYMContainerBody extends StatelessWidget{
  
  Widget build(BuildContext context) {
    return  const Text(
      "Hello world!!",
      textDirection: TextDirection.ltr,
      style: TextStyle(fontSize: 20, color: Colors.orange),
    );
  }
}

优化原则:因为MaterialApp是Material风格的框架是固定的,如果需要自定义其home也,那那种之前类似view,我们可以自定义view继承自widget实现;
其次Scaffoldhi一个脚手架,也就是相当于iOS中UIViewController;那么我们也可能将其中的body部分分离出来方便自定义实现;

需要注意的是所有的Widget类的状态都是不可改变的所以我们不能再代码里去修改按钮的状态,所以需要单独一个类去记录状态;所以优化如下:文章来源地址https://www.toymoban.com/news/detail-860446.html

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

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

class LYMApp extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowMaterialGrid: false,
        debugShowCheckedModeBanner: false,
        home: LYMScaffold());
  }
}

class LYMScaffold extends StatelessWidget{
   @override
  Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
         title: Center( // 添加 Center widget
           child: Text("first app"),
         ),
       ),
       body: LYMContentody(),
     );
  }
}
/*flag 状态     Stateful 不能定义状态*/
class LYMContentody extends StatefulWidget{
  @override
   State<StatefulWidget> createState() {
     return _LYMContentBodyState();
   }


}
class _LYMContentBodyState extends State<LYMContentody> {
  bool flag = true;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Checkbox(
            value: flag,
            onChanged: (newValue) {
              // 在改变状态前检查newValue是否为null,尽管当前上下文预期为非null
              if (newValue != null) {
                setState(() {
                  flag = newValue;
                });
              }
            },
          ),
          const Text("同意协议"),
        ],
      ),
    );
  }
}

到了这里,关于flutter笔记-万物皆是widget的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • flutter开发实战-父子Widget组件调用方法

    flutter开发实战-父子Widget组件调用方法 在最近开发中遇到了需要父组件调用子组件方法,子组件调用父组件的方法。这里记录一下方案。 父组件使用globalKey.currentState调用子组件具体方法,子组件通过方法回调callback方法调用父组件的方法。 例如示例中的 例如父组件 父组件使

    2024年02月15日
    浏览(34)
  • Flutter Widget Life Cycle 组件生命周期

    了解 widget 生命周期,对我们开发组件还是很重要的。 今天会把无状态、有状态组件的几个生命周期函数一起过下。 原文 https://ducafecat.com/blog/flutter-widget-life-cycle https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html 无状态组件

    2024年02月15日
    浏览(33)
  • flutter开发实战-RepaintBoundary实现Widget截图功能

    flutter开发实战-RepaintBoundary实现Widget截图功能 在开发中,遇到需要使用截图,像iOS可以截图UIView获取到UIImage,在flutter中可以使用RepaintBoundary实现截图功能 相机拍摄的图片: RepaintBoundary截图后的图片 RepaintBoundary是绘制边界。 如果CustomPaint有子节点,为了避免子节点不必要的

    2024年02月15日
    浏览(35)
  • flutter开发实战-获取Widget的大小及位置

    flutter开发实战-获取Widget的大小及位置 最近开发过程中需要获取Widget的大小及位置,这时候就需要使用到了GlobalKey了和WidgetsBinding.instance.addPostFrameCallback了 该函数的作用: flutter中的界面组件Widget每一帧渲染在界面上,addPostFrameCallback功能是在每一帧绘制完成后再回调执行自定

    2024年02月13日
    浏览(31)
  • [Flutter]理解Widget-Key的作用

    运行结果如下图所示: ​​​​​​​      /// 运行并依次点击删除两次, 根据情况可以发现其更新结果: /// (1) StatelessWidget不管是否设置了Key或者前后Key是否相同, 其背景色都没有复用; /// (2) StatefulWidget未设置Key的时候, 其背景色不变, 但是数据向上移了; /// (3) StatefulWidget设

    2024年02月11日
    浏览(34)
  • flutter开发实战-BackdropFilter高斯模糊子Widget控件

    flutter开发实战-BackdropFilter高斯模糊子Widget。 最近开发过程中遇到需要将控件进行模糊,比如iOS的effect的模糊效果。那在flutter中就需要用到了BackdropFilter BackdropFilter属性定义 其中ImageFilter的filter是必须传的,child为子控件。 ImageFilter一下两种两种构造方法 设置背景高斯模糊

    2024年02月14日
    浏览(26)
  • flutter开发实战-自定义Switch开关控件Widget

    flutter开发实战-自定义Switch开关控件 在flutter中实现自定义Switch,主要实现类似IOS的UISwitch样式的开关控件 实现自定义Switch的Widget,主要实现交织动画。 交织动画 有些时候我们可能会需要一些复杂的动画,这些动画可能由一个动画序列或重叠的动画组成。一个动画组合在不同

    2024年02月13日
    浏览(37)
  • 【Flutter 工程】005-代码分离实践:flutter_hooks & functional_widget

    在Flutter开发中,“嵌套地狱”(Nesting Hell)是指在构建复杂的UI布局时,由于多层嵌套的组件结构,代码变得冗长、难以维护和理解的情况。 Flutter使用组件树的方式来构建用户界面,每个UI元素都是一个组件,可以包含其他组件。在某些情况下,特别是当需要实现复杂的布局

    2024年02月06日
    浏览(88)
  • Flutter通过flutter_unity_widget嵌入Unity3D

    实现方案:采用flutter开源组件flutter_unity_widget 1、创建flutter项目flutter_unity_demo 2、在pubspec.paml文件dependencies添加flutter_unity_widget: ^2022.2.0,执行Pub get导入组件 3、在工程目录下创建unity文件夹 4、在unity目录下创建unity_demo的3D工程 5、下载flutter_unity_widget提供的unity插件 在unity_d

    2024年02月11日
    浏览(29)
  • 透过源码理解Flutter中widget、state和element的关系

    Flutter中widget、state、element的源码位于framework.dart中,整个文件6693行(版本Flutter 3.12.0-14.0.pre.28)。整个代码可划分为若干部分,主要包括key、widget、state、element四部分。 关于key的代码65行到272行,这里的key包括ObjectKey、GlobalKey、LabeledGlobalKey、GlobalObjectKey。整个key体系的代码还包

    2024年02月12日
    浏览(22)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包