news 2026/9/12 5:09:26

Flutter的第一个Demo和Bug

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter的第一个Demo和Bug

文章目录

  • 1. Flutter开发环境配置
  • 2. 第一个Demo
  • 3. 第一个bug
    • 3.1 No Directionality widget found

1. Flutter开发环境配置

注意,初学者可参照Flutter中文官网慢慢摸索,这里总结如下:

1、下载最新版的Android Studio,在AS的plugin市场中安装最新的flutter和dart插件。
关于AS和Java等相关环境变量的配置自行搜索吧。

2、去Git官网安装最新的git,并添加到环境变量。否则第5条中的部分命令会失效。

3、去Flutter官网下载最新的Flutter SDK,下载完成后直接解压,并将解压后的文件存放到自己的开发目录。
例如,我将其存放在:D:\ProgramFiles\Flutter目录中。

注意,需要将flutter的bin目录添加到环境变量中(见上图)。

4、Flutter SDK内置Dart SDK,故无须额外配置Dart开发环境。

5、打开git的GUI或者在AS的Terminal中运行以下命令,以便检测配置工作是否正确完成:

/* flutter --version dart --version flutter doctor */

6、至此,Flutter配置工作结束,可用AS新建Flutter项目开始编码了(要选择New Flutter Project哦)。

但是,打开AS第一次新建Flutter项目时会要求选择Flutter SDK所在目录,在AS界面中选择flutter的存放路径即可。如

2. 第一个Demo

用AS新建一个Flutter项目,系统会生成默认Demo。

注意,Flutter项目名只能是lower_case_with_underscrores,即只能是小写和下划线。

项目结构如下图:
lib/main.dart是程序入口,类似AS项目的MainActivity。
flutter的项目代码存放在lib目录中,类似AS项目的app/src/main目录。

系统默认的main.dart的代码如下(已删除默认注释):

import'package:flutter/material.dart';voidmain(){runApp(constMyApp());//runApp()是系统函数}classMyAppextendsStatelessWidget{constMyApp({super.key});// This widget is the root of your application.@overrideWidgetbuild(BuildContextcontext){// MaterialApp()也是系统函数,有DirectionalityreturnMaterialApp(title:'Flutter Demo',theme:ThemeData(colorScheme:.fromSeed(seedColor:Colors.deepPurple),),// 将home实例替换为自己的Demo,否则会产生第一个bughome:constMyHomePage(title:'Flutter Demo Home Page'),);}}classMyHomePageextendsStatefulWidget{constMyHomePage({super.key,requiredthis.title});finalStringtitle;@overrideState<MyHomePage>createState()=>_MyHomePageState();}class_MyHomePageStateextendsState<MyHomePage>{int _counter=0;void_incrementCounter(){setState((){_counter++;});}@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(backgroundColor:Theme.of(context).colorScheme.inversePrimary,title:Text(widget.title),),body:Center(child:Column(mainAxisAlignment:.center,children:[constText('You have pushed the button this many times:'),Text('$_counter',style:Theme.of(context).textTheme.headlineMedium,),],),),floatingActionButton:FloatingActionButton(onPressed:_incrementCounter,tooltip:'Increment',child:constIcon(Icons.add),),);}}

新建AS模拟器或连接真机即可运行该Demo,效果图如下:

右上角的debug是调试标志,因为MaterialApp(xxx)函数的默认属性this.debugShowCheckedModeBanner = true,手动修改该属性为false就没有debug标志了。

3. 第一个bug

3.1 No Directionality widget found

接下来,新建自己的demo,如新建ContainerPage.dart:

import'package:flutter/material.dart';classContainerPageextendsStatelessWidget{constContainerPage({super.key});/// 上层调用必须有Directionality,否则报错:No Directionality widget found.@overrideWidgetbuild(BuildContextcontext){// Scaffold无DirectionalityreturnScaffold(appBar:AppBar(title:constText("Container")),body:Container(margin:constEdgeInsets.only(top:50.0,left:120.0),constraints:constBoxConstraints.tightFor(width:200.0,height:200.0,),decoration:constBoxDecoration(gradient:RadialGradient(colors:[Colors.red,Colors.orange],center:Alignment.topLeft,radius:.98,),boxShadow:[BoxShadow(color:Colors.black54,offset:Offset(2.0,2.0),blurRadius:4.0,),],),transform:Matrix4.rotationZ(.2),// 卡片倾斜变换alignment:Alignment.center,child:constText("520",style:TextStyle(color:Colors.white,fontSize:40.0),),),);}}

该Demo直接return Scaffold,而Scaffold没有Directionality,在main.dart中调用时需注意,若按下述方式调用会报错:No Directionality widget found.

import'package:flutter/material.dart';import'package:flutter_xiangzhihong/ContainerPage.dart';voidmain(){runApp(constContainerPage());}

IDE报错信息:

真机运行页面报错信息:

正确的调用方式是 :

import'package:flutter/material.dart';import'package:flutter_xiangzhihong/ContainerPage.dart';voidmain(){runApp(constMyApp());}classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(title:'Flutter Demo',theme:ThemeData(colorScheme:.fromSeed(seedColor:Colors.deepPurple),),// 替换原MyHomePage实例,因为MaterialApp有Directionalityhome:constContainerPage(),);}}

正常的运行结果:

参考文献:
[1] 向治洪.Flutter跨平台开发实战[M].北京:清华大学出版社,2024

关注我:Accrual

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 5:09:09

实验二 PGP的使用【网络安全】

实验二 PGP的使用【网络安全】 前言推荐PGP的安装及使用 * 一、PGP的安装及汉化二、创建用户及密钥三、PGPkeys的使用——加解密文字 * 0.打开程序1.导出自己的公钥2.使用公钥加密文件3.使用私钥解密文件 四、PGPkeys的使用——加解密文件 * 1.密钥的导出与导入2.文件的加…

作者头像 李华
网站建设 2026/9/3 7:09:29

设计一套工业级或电力系统IED(Intelligent Electronic Device,智能电子设备)上位机软件,核心目标在于保证高实时性、高可靠性、良好的可扩展性以及清晰的人机交互

设计一套工业级或电力系统 IED(Intelligent Electronic Device,智能电子设备)上位机软件,核心目标在于保证高实时性、高可靠性、良好的可扩展性以及清晰的人机交互。 IED 上位机通常需要处理复杂的工业协议(如 IEC 61850、Modbus、IEC 60870-5-104 等)、大批量实时采样数…

作者头像 李华
网站建设 2026/9/2 5:22:49

隔离通信与隔离电源集成模块:根治工业总线地电位差烧毁问题

去年做一套多节点CAN通信系统的时候&#xff0c;我领教过什么是“只有自己踩过才明白的坑”。现场有一百多米的CAN总线&#xff0c;一头连着变频器柜里的控制板&#xff0c;另一头连着操作台触摸屏。刚开始测试一切正常&#xff0c;过了一个月&#xff0c;操作台偶尔黑屏重启&a…

作者头像 李华
网站建设 2026/9/9 14:13:38

金三银四Offer收割机:Android 面试核心知识点精讲,不打没准备的仗!

想要进入大厂&#xff0c;首先得明白&#xff1a;成功离不开毅力和决心。无论学历、资历如何&#xff0c;只要你有决心并愿意付出时间&#xff0c;总会看到成果。 但除了这些&#xff0c;学习还需要注重效率。互联网上的免费资料虽多&#xff0c;但筛选、整合和实际应用却需要花…

作者头像 李华
网站建设 2026/9/3 8:44:42

镶嵌注塑与真空灌胶融合技术:推动新能源零部件可靠性升级

#一、新能源制造进入“高集成、高可靠”时代 随着新能源汽车、储能系统、智能电气设备快速发展&#xff0c;新能源零部件正朝着更高电压等级、更小体积设计、更高可靠性以及更长使用寿命方向升级。 传统的金属加工、塑料注塑以及后期装配方式&#xff0c;已经难以满足新能源产品…

作者头像 李华