版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE2【课后练习】一、单选题1.Flutter使用的渲染引擎是?(B)A.WebViewB.SkiaC.V8D.JavaScriptCore2.以下哪个不是Flutter的特点?(B)A.跨平台性B.低性能C.热重载D.丰富的组件库3.在Windows系统中,配置Flutter环境变量时,需要将FlutterSDK的哪个目录添加到Path变量中?(A)A.binB.libC.srcD.tool二、填空题1.Flutter是由_Google_开发的开源移动应用开发框架。2.Flutter提供了三种不同类型的Channel,分别是BasicMessageChannel、MethodChannel和_EventChannel_。3.在MacOS系统中,通常通过编辑_~/.bash_profile_或__~/.zshrc_文件来配置环境变量。三、简答题1.简述Flutter的热重载功能的优点。答:热重载功能可以让开发者在修改代码后,无需重新启动应用,只需保存代码,就可以实时看到界面的更新效果。这大大提高了开发效率,减少了等待应用启动的时间,方便开发者快速调试和迭代应用,能够更高效地进行开发工作。为什么说Flutter具有跨平台性?答:因为Flutter可以让开发者使用一套代码,通过其自身的渲染引擎等技术,直接将UI渲染为不同平台原生的图形界面,无需为不同平台分别编写大量的原生代码,就能够同时发布到IOS、Android等多个平台上,实现了“一次编写,多端运行”,所以说它具有跨平台性。简述在Windows系统中安装Flutter开发环境的主要步骤?答:主要步骤如下。首先,访问VSCode官方网站下载并安装VSCode。然后,在VSCode的扩展商店中安装“Dart”和“Flutter”扩展插件。接着,访问Flutter官方网站下载FlutterSDK压缩包,并解压到合适的目录。最后,配置环境变量,将FlutterSDK的“bin”目录添加到系统的Path变量中。同时,还需要安装AndroidStudio等相关工具,配置好Android开发环境。【综合实训】安装与使用VSCode编辑器一、实训目的1.掌握VSCode工具的安装与配置方法2.掌握VSCode插件的安装与使用方法3、学会利用VSCode来编写一个网页代码并了解网页的基本构成二、实训内容1.安装VSCode编辑器(1)登录VSCode官网,下载合适的版本并安装(2)配置并调试安装的VSCode编辑器2.安装VSCode插件(1)安装Web前端开发需要使用的插件(2)设置VSCode主题配置(3)安装“OpenInDefaultBrowser”插件3.编写代码并预览(1)通过快捷键创建HTML模板(2)在<body>标签中创建一个<p>标签并写一段个人介绍(3)将<title>标签中的内容修改为“我的简历”(4)鼠标右键选择在浏览器中打开并预览效果,效果如图1所示。图1浏览器打开简历效果图<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title></title></head><body><p>我叫xx,今年xx岁,xx即将获得xx大学xx学位。很荣幸今天能参加这次面试,我有信心自己能够有好的表现。Wide专业是xx。除了牢牢掌握专业知识外,我对英语和计算机的兴趣非常浓厚,在校期间通过了专业英语考试。</p></body></html>【实战演练】“美食推荐”App应用开发环境搭建修改VSCode配置,让代码区域字体大小为16px。添加“ESLint”和“Prettier”扩展应用,效果如图1.13所示。图1.62VSCode配置后效果图实现步骤如下所示。打开VSCode编辑器,快捷方式为按住键盘“Ctrl”+“,”,打开设置面板,找到字体设置,并修改值为“16px”。选择菜单栏中“File”(文件)菜单下的"NewFile"(新建文件)命令,然后输入文件名加html的后缀名,表示创建一个HTML格式的文件,并选择文件需要保存的位置,在正文中输入“!”,并按Tab键,这时会自动生成HTML5的模板代码,并修改title为“淘宝首页”。按住“Ctrl”+“Shift”+“P”键,打开命令行窗口,输入“ColorTheme”并按下回车键,选择主题为“Monokai”并回车确认。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>首页</title></head><body></body></html>【课后练习】一、单选题1.以下哪种方式定义的变量可以动态更改类型?(B)A.varB.dynamicC.finalD.显式声明类型(如String)2.下列关于Dart列表(List)和集合(Set)的说法,正确的是?(C)A.列表和集合都允许重复元素B.列表和集合都是无序的C.集合不允许重复元素,列表允许D.列表用{}定义,集合用[]定义3.以下代码中,命名构造函数的正确定义是?(B)A.classPerson{Person(Stringname){}}B.classPerson{Person.fromAge(intage){}}C.classPerson{voidPerson(Stringname){}}D.classPerson{Person(Stringname,intage):=name;}二、填空题1.Dart中,使用__const_关键字声明的变量在编译时确定值,使用_final_关键字声明的变量在运行时确定值,两者的值都不可修改。。2.字符串插值表达式的语法是_表达式_,例如将变量age插入字符串的写法为_年龄:age_。3.异常处理中,_catch_块用于捕获异常,_finally_块无论是否发生异常都会执行。。三、简答题1.简述Dart中命名参数和位置参数的区别,并各举一个示例。答:(1)位置参数:按参数顺序传递,必须传值(除非设置默认值),调用时不指定参数名。示例:voidprintInfo(Stringname,intage){},调用:printInfo("张三",20);(2)命名参数:用{}包裹,调用时需指定参数名,可设置默认值,参数顺序可灵活调整。示例:voidprintUser({Stringname="匿名",intage=0}){},调用:printUser(name:"张三",age:20);2.如何实现Dart类的继承?子类如何重写父类的方法?答:类的继承通过extends关键字实现,格式为“class子类名extends父类名”。子类重写父类方法时,需在方法前添加@override注解,然后重新实现方法体。代码如下。classParent{voidmethod(){print("父类方法");}}classChildextendsParent{@overridevoidmethod(){print("重写后的方法");}}写出一个Dart函数,功能是计算两个整数的商,若除数为0则抛出异常,否则返回商(整数除法)。答:函数如下所示。intdivide(inta,intb){if(b==0){throwException("除数不能为0");}returna~/b;}【综合实训】用位运算符实现加减运算一、实训目的1.掌握JavaScript中语句的用法。2.掌握JavaScript的变量使用方法。3.掌握JavaScript中位运算符的使用方法。二、实训内容1.创建一个空的HTML模板(1)打开VScode编辑器,新建一个index.html。(2)通过快捷键创建HTML模板。2.创建JavaScript变量和函数(1)定义两个变量a和b,例如a=287,b=102。(2)定义两个函数,分别是计算加法的函数和计算减法的函数。(3)加法函数中通过位运算“^”计算a和b,计算方式为varadd=a^b;再通过位运算符“&”和位运算符“<<”对a和b运算,运算方式为varcarry=(a&b)<<1;再将变量add赋值给变量a,carry变量赋值给变量b,然后再循环计算,直到变量carry不为0。(4)减法函数中调用2次加法函数,第一次调用时传入2个参数,第一个参数为通过位运算符“~”运算变量b之后的值,第二个参数为1。第二次运算时传入2个参数为变量a和第一次运算之后的结果作为变量b。(5)调用加法函数和减法函数分别计算出“a+b”和“a-b”的值。3.预览页面(1)鼠标右键选择在浏览器中打开查看效果,如图1所示。图1通过位运算符计算a+b和a-b之后的值<!DOCTYPEhtml><htmllang="en"><head><title>JavaScript加减运算</title></head><body><script>vara=287;varb=102;functionBinaryAdd(a,b){do{varadd=a^b;varcarry=(a&b)<<1;a=add;b=carry;}while(carry!=0);returnadd;}functionBinarySub(a,b){returnBinaryAdd(a,BinaryAdd(~b,1));}console.log("a+b的结果为:"+BinaryAdd(a,b));console.log("a-b的结果为:"+BinarySub(a,b));</script></body></html>【实战演练】数据类型转换制作个人信息注册表,注册内容包括用户名、昵称、性别、教育程度、婚姻状况、兴趣爱护和个人特点等选项,最后点击提交按钮完成提交。教育程度下拉框的下拉选项包括高中、中专、大专、本科、硕士、博士和其他。效果如图2.44所示。图2.44个人信息注册表效果图【课后练习】一、单选题1.以下关于有状态组件和无状态组件的说法,正确的是?(C)。A.有状态组件和无状态组件在运行过程中状态都不可改变。B.无状态组件继承自StatefulWidget类。C.有状态组件可在运行中改变自身状态,无状态组件创建后状态不可变。 D.无状态组件常用于展示动态内容。2.若要将多个子组件垂直排列,应使用以下哪个组件?(B)。A.Row B.ColumnC.Wrap D.Stack3.想要为组件添加内边距,可使用以下哪种方式?(C)。A.使用SizedBox组件B.设置组件的margin属性C.设置组件的padding属性D.使用Align组件二、填空题1.组件的三种定义方式分别是类定义方式、函数定义方式和__匿名函数定义方式____。2.ListView组件用于创建__列表___布局,可垂直或水平排列子组件且支持滚动。3.若要为组件设置背景渐变和圆角效果,可使用decoration属性并结合____BoxDecoration___类。三、简答题1.简述有状态组件和无状态组件的区别及适用场景?答:区别如下。状态变化:有状态组件在运行过程中可以改变自身状态,当状态改变时,Flutter会自动重新构建该组件以更新界面显示;无状态组件一旦创建,其状态就不会再发生变化,若界面需要更新,通常会创建一个新的无状态组件实例来替换旧的实例。继承类:有状态组件继承自StatefulWidget类,并且需要创建一个对应的State类来管理组件的状态;无状态组件继承自StatelessWidget类。适用场景如下。有状态组件适用于需要动态更新界面的场景,如计数器、实时数据展示等,这些场景中组件的状态会随着用户操作或外部数据的变化而改变。无状态组件适用于展示静态内容的场景,如固定的文本、图片等,这些内容在界面显示过程中不会发生变化。2.请说明Container组件的作用及常见属性。答:Container组件是一个常用的容器布局,它可以包含一个子组件,并且可以对这个子组件进行尺寸、样式等方面的设置,起到包裹和修饰子组件的作用。常见属性包含。width和height:用于设置容器的宽度和高度。color:设置容器的背景颜色。margin:设置容器与其他组件之间的外边距。padding:设置容器内部子组件与容器边缘的内边距。decoration:用于为容器添加更复杂的背景装饰,如渐变、边框、圆角等。foregroundDecoration:添加在子组件前面的装饰,会覆盖在子组件之上。alignment:设置子组件在容器内的对齐方式。解释Stack组件和Positioned组件的关系及使用场景。答:关系如下所示。Stack组件用于将子组件堆叠在一起,后面的组件会覆盖前面的组件;而Positioned组件通常与Stack组件一起使用,它的作用是在Stack组件中对其子组件进行绝对定位,通过设置top、bottom、left、right等属性来指定子组件的位置。使用场景如下:Stack组件适用于需要将多个组件叠加显示的场景,例如在图片上添加文字说明、在图标上显示未读消息数量等。Positioned组件在需要精确控制子组件在Stack中位置的场景中发挥作用,比如创建复杂的布局,需要将某些组件放置在特定的坐标位置时,就可以使用Positioned组件来实现。【综合实训】制作新闻列表页一、实训目的1.掌握JavaScript中语句的用法。2.掌握JavaScript的变量使用方法。3.掌握JavaScript中函数的使用方法。二、实训内容1.创建一个空的HTML模板(1)打开VScode编辑器,新建一个index.html。(2)通过快捷键创建HTML模板。2.创建JavaScript变量和函数(1)准备一个数组变量,数组里面是很多对象,一个对象代表一个用户,对象中包括姓名、年龄、职业等字段。(2)定义一个函数,函数中对用户变量进行遍历和判断,当用户年龄小于等于30岁时,将该用户信息输出到页面。(3)调用函数并执行。3.预览页面(1)鼠标右键选择在浏览器中打开查看效果。<!DOCTYPEhtml><html><head><title>用户列表页面</title></head><body><script>constuserList=[{name:'张三',age:20,job:'工程师'},{name:'李四',age:25,job:'设计师'},{name:'王五',age:18,job:'项目经理'},{name:'赵六',age:35,job:'项目经理'},{name:'钱七',age:40,job:'工程师'},{name:'孙八',age:22,job:'设计师'},{name:'周九',age:32,job:'项目经理'},{name:'吴十',age:43,job:'工程师'},];functionfilterAge(){userList.forEach((user)=>{if(user.age<=30){constuserNode=document.createElement('p');userNode.innerHTML=`${}-${user.age}-${user.job}`;document.body.appendChild(userNode);}});}filterAge();</script></body></html>【实战演练】制作网站导航页制作网站导航的网页,我们首先创建一个HTML模板页面,在页面上有一个下拉框,下拉框中有百度、网易、腾讯等几个选项。接着在下拉框的下方有一个去官网首页的按钮,当点击按钮时根据下拉框中选中的值跳转到不同的网页。效果如图1所示。图1网站导航页效果图实现步骤如下所示。创建空的HTML模板。(2)用<h1>标签插入一个标题。(3)用<div>标签作为内容区域,并设置类名为“dropdown”。(4)用<label>标签作为下拉框文本提示语,并“for”属性为“dropdown”。(5)用<select>标签制作一个下拉选择框并添加3个选项,每一个选项分别设置不同的“value”属性,同时给选择框加上“id”属性为“dropdown”。(6)用<button>标签插入一个按钮,按钮文案为“去官网首页”,并给按钮添加onclick事件,点击时调用“goToHomePage”函数。(7)编写“goToHomePage”函数,获取“id”属性为“'dropdown'”的下拉框选中的值,根据值的不同跳转到不同的网页。<!DOCTYPEhtml><html><head><title>网站导航</title><style>body{text-align:center;}.dropdown{margin-top:50px;}.button{margin-top:20px;}</style><script>functiongoToHomePage(){vardropdown=document.getElementById('dropdown');varselectedValue=dropdown.value;if(selectedValue==='baidu'){window.location.href='';}elseif(selectedValue==='wangyi'){window.location.href='';}elseif(selectedValue==='tencent'){window.location.href='';}}</script></head><body><h1>网站导航</h1><divclass="dropdown"><labelfor="dropdown">选择一个网站:</label><selectid="dropdown"><optionvalue="baidu">百度</option><optionvalue="wangyi">网易</option><optionvalue="tencent">腾讯</option></select></div><buttonclass="button"onclick="goToHomePage()">去官网首页</button></body></html>【课后练习】一、单选题1、在TextStyle中,用于设置文字大小的属性是?(B)。A.fontWeightB.fontSizeC.fontStyle D.color2、在ButtonStyle中,设置按钮不可用时背景颜色的属性是?(B)。A.colorB.disabledColorC.highlightColorD.textColor3、若要为文本添加下划线装饰,应使用TextStyle的哪个属性?(A)。A.decoration B.decorationColorC.decorationStyle D.background二、填空题1、TextStyle中用于设置字母之间间距的属性是__letterSpacing____。2、ButtonStyle中设置按钮最小宽度的属性是__minWidth___。3、布局样式设置前景装饰的属性是__foregroundDecoration__。三、简答题1.简述TextStyle中decoration、decorationColor和decorationStyle三个属性的作用及关系?答:关系如下所示。decoration属性用于为文本添加线性装饰,常见取值有TextDecoration.none(无装饰)、TextDecoration.underline(下划线)、TextDecoration.overline(上划线)和TextDecoration.lineThrough(删除线),它决定了是否添加装饰以及添加何种类型的装饰。decorationColor属性用于设置文字线性装饰的颜色,比如将下划线设置为红色等。decorationStyle属性用于设置文字线性装饰的样式,常见取值有TextDecorationStyle.solid(实线)、TextDecorationStyle.dotted(虚线)、TextDecorationStyle.dashed(破折线)和TextDecorationStyle.double(双实线)。这三个属性相互配合,decoration确定装饰类型,decorationColor确定装饰颜色,decorationStyle确定装饰样式,共同决定了文本装饰的最终效果。2.说明ButtonStyle中textColor和disabledTextColor的区别?答:textColor是设置按钮正常可点击状态下文本的颜色,当按钮处于可操作状态时,文本会显示为textColor所设置的颜色。disabledTextColor是设置按钮不可用(未点击且处于禁用状态)时文本的颜色。当按钮由于某些原因被禁用,无法进行点击操作时,文本会显示为disabledTextColor所设置的颜色。这两个属性的设置可以让用户清晰地区分按钮的可操作和不可操作状态。3.请举例说明如何使用TextStyle和ButtonStyle来优化界面设计。答:在一个视频网站的个人中心界面中。TextStyle的使用:对于用户昵称,可以使用TextStyle进行如下设置。Text('用户昵称',style:TextStyle(fontSize:20,fontWeight:FontWeight.bold,color:Colors.blue),)这样设置后,昵称文字会以较大的字体、加粗的样式和蓝色显示,在界面中更加突出,吸引用户的注意力。对于一些提示性的文字,如“上次登录时间”,可以设置为较小的字体和较淡的颜色:Text('上次登录时间:2024-10-01',style:TextStyle(fontSize:12,color:Colors.grey),)ButtonStyle的使用:对于“我的收藏”按钮,可以设置如下样式。ElevatedButton(onPressed:(){},style:ButtonStyle(backgroundColor:MaterialStateProperty.all(Colors.green),foregroundColor:MaterialStateProperty.all(Colors.white),shape:MaterialStateProperty.all(RoundedRectangleBorder(borderRadius:BorderRadius.circular(10)))),child:Text('我的收藏'))此按钮会有绿色的背景、白色的文字和圆角边框,整体视觉效果更好,增强了用户点击的欲望。通过这些样式设置,可以使界面更加美观、清晰,提升用户体验。【综合实训】制作穿梭框功能组件一.实训目的1.掌握JavaScript数组方法的使用2.掌握JavaScript中字符大小写转换使用方法二.实训内容1.创建一个空的HTML模板(1)打开VScode编辑器,新建一个index.html。(2)通过快捷键创建HTML模板。2.创建页面布局 (1)使用“<div>”标签作为整个穿梭框区域的容器。 (2)使用“<select>”标签分别创建穿梭框左边和右边的容器,为左右两边的“select”分别用“<option>”标签创建一些选项,同时设置好“option”的“value”属性。 (3)使用"<div>"标签创建一个按钮容器,用“<button>”标签创建两个带左右箭头的按钮。3.设置页面样式 (1)给容器设置flex布局,让整个穿梭框居中显示。 (2)给button容器添加“flex”布局属性,并设置方向属性,让按钮垂直显示,同时设置左右外边距为10px。 (3)给select标签设置宽高属性。2.创建JavaScript变量和函数(1)为两个按钮监听点击事件,当点击时触发移动函数。(2)创建一个移动“option”选项的函数,获取到当前选中的选项,同时判断当前移动的方向,将option选项的文本设置转换成大写或小写,并将转换好的选项添加到目标“select”标签下。3.预览页面(1)鼠标右键选择在浏览器中打开。(2)选中选择框中的选项。(3)点击点击箭头按钮将选项左右移动。<!DOCTYPEhtml><html><head><title>穿梭框功能组件</title><style>.transfer-box{display:flex;justify-content:center;align-items:center;}select{width:200px;height:200px;}.buttons{display:flex;flex-direction:column;margin:010px;}button{margin-bottom:10px;width:30px;}</style></head><body><divclass="transfer-box"><selectid="left-select"multiple><optionvalue="left-1">aaa</option><optionvalue="left-2">bbb</option><optionvalue="left-3">ccc</option><optionvalue="left-4">ddd</option></select><divclass="buttons"><buttonid="to-right-btn">></button><buttonid="to-left-btn"><</button></div><selectid="right-select"multiple><optionvalue="right-1">eee</option><optionvalue="right-2">fff</option><optionvalue="right-3">ggg</option><optionvalue="right-4">hhh</option></select></div><script>constleftSelect=document.getElementById('left-select');constrightSelect=document.getElementById('right-select');consttoRightButton=document.getElementById('to-right-btn');consttoLeftButton=document.getElementById('to-left-btn');toRightButton.addEventListener('click',function(){moveOptions(leftSelect,rightSelect,'left');});toLeftButton.addEventListener('click',function(){moveOptions(rightSelect,leftSelect,'right');});functionmoveOptions(source,destination,direction){constselectedOptions=Array.from(source.selectedOptions);selectedOptions.forEach((option)=>{option.text=direction==='left'?option.text.toUpperCase():option.text.toLowerCase();destination.appendChild(option);});}</script></body></html>【实战演练】制作会动的时钟制作一个时钟,创建一个HTML模板页面,在页面上实时展示当前的时间,精确到秒,并且时间每秒都在变化。效果如图1所示。图1时钟页效果图实现步骤如下所示。创建空的HTML模板。(2)用<div>标签作为容器,设置id属性为clock,设置class类名为clock、(3)设置clock类的字体大小、字体加粗、文本居中对齐和顶部边距等样式。(4)设置updateClock的函数,首先获取id为clock的DOM节点,随后用JavaScript获取当前时间的时分秒,如果数字小于10,则在数字前面补0。将时分秒用“:”拼接完成后替换给id为clock的DOM元素的文本。(5)开启一个定时器,每一秒调用一次updateClock函数,实现时间在更新的效果。<!DOCTYPEhtml><html><head><title>实时时钟</title><style>.clock{font-size:48px;font-weight:bold;text-align:center;margin-top:200px;}</style><script>functionupdateClock(){varclockElement=document.getElementById('clock');varcurrentTime=newDate();varhours=currentTime.getHours();varminutes=currentTime.getMinutes();varseconds=currentTime.getSeconds();hours=(hours<10?'0':'')+hours;minutes=(minutes<10?'0':'')+minutes;seconds=(seconds<10?'0':'')+seconds;vartimeString=hours+':'+minutes+':'+seconds;clockElement.textContent=timeString;}setInterval(updateClock,1000);</script></head><body><divid="clock"class="clock"></div></body></html>【课后练习】一、单选题1、在Flutter中,使用命令式路由进行页面跳转时,常用的方法是?(B)。A.Navigator.pushNamed()B.Navigator.push()C.Router.of(context).push() D.RouteSettings()2、在provider状态管理中,用于监听状态变化并更新页面的组件是?(C)。A.ChangeNotifier() B.ChangeNotifierProvider()C.Consumer() D.Provider.of()3、当用户访问一个未定义的路由时,可以通过(B)方法来处理?A.onGenerateRoute() B.onUnknownRoute()C.initialRoute () D.routes()二、填空题1、在Flutter中,使用声明式路由进行页面跳转时,常用的方法是_Navigator.pushNamed()_。2、在provider状态管理中,状态管理类需要继承自_ChangeNotifier_类,并在状态变化时调用_notifyListeners()_方法通知监听器。3、在路由回调中,可以通过__ModalRoute.of(context).settings.arguments__来提取从其他页面传递过来的参数。三、简答题1.简述命令式路由和声明式路由的区别。答:命令式路由和声明式路由是Flutter中实现页面跳转的两种不同方式,它们的区别主要体现在以下几个方面。(1)实现方式:命令式路由通过直接调用Navigator.push()和Navigator.pop()等方法来实现页面的跳转和返回,需要手动创建Route对象,代码中明确地描述了路由的操作过程。声明式路由则是通过在MaterialApp中定义路由表,使用Navigator.pushNamed()方法根据路由名称进行页面跳转,不需要手动创建Route对象,代码更加简洁和声明式。(2)代码复杂度:命令式路由在处理简单的页面跳转时较为直观,但随着应用的复杂度增加,路由逻辑可能会变得复杂,代码的可读性和可维护性会受到影响。声明式路由将路由配置集中在路由表中,使得路由逻辑更加清晰,易于管理和维护,适合大型应用的开发。(3)灵活性:命令式路由更加灵活,可以在跳转时动态地创建Route对象,传递复杂的参数和自定义过渡效果。声明式路由相对固定,主要通过路由名称进行跳转,对于一些复杂的路由逻辑和动态路由的处理可能不够灵活。2.说明provider状态管理库的工作原理?答:provider状态管理库的工作原理基于ChangeNotifier模式和依赖注入的思想,主要包括以下几个关键部分。(1)状态管理类:创建一个继承自ChangeNotifier的类,该类用于管理应用的状态数据。在状态数据发生变化时,调用notifyListeners方法通知所有监听器。(2)状态提供者:使用ChangeNotifierProvider组件将状态管理类的实例提供给整个应用或特定的子树。ChangeNotifierProvider会在状态管理类的状态发生变化时,自动更新依赖该状态的组件。(3)状态消费者:使用Consumer组件监听状态管理类的状态变化。Consumer组件会接收一个builder函数,当状态发生变化时,builder函数会被调用,从而更新页面。(4)获取状态实例:可以使用Provider.of()方法在组件中获取状态管理类的实例,以便调用其方法来更改状态。listen参数可以控制是否监听状态变化,当listen:false时,只获取实例而不监听状态变化。通过这种方式,provider实现了状态的共享和管理,使得不同组件之间可以方便地同步状态,提高了代码的可维护性和可测试性。3.请描述在Flutter中如何进行路由配置以处理动态路由和未知路由?答:在Flutter中,可以通过onGenerateRoute()和onUnknownRoute()方法进行路由配置,以处理动态路由和未知路由。onGenerateRoute()方法用于处理动态路由,它根据路由名称和传递的参数生成相应的路由。示例代码如下。MaterialApp(onGenerateRoute:(settings){switch(){case'/article':finalargs=settings.argumentsasMap<String,dynamic>?;finalarticleId=args?['id']asint?;returnMaterialPageRoute(builder:(context)=>ArticlePage(articleId:articleId),);default:returnnull;}},);在上述代码中,当用户访问/article路由时,onGenerateRoute()方法会提取传递的参数id,并根据该参数创建ArticlePage路由。onUnknownRoute()方法用于处理未知路由,也就是用户访问未定义的路由。示例代码如下。MaterialApp(onUnknownRoute:(settings){returnMaterialPageRoute(builder:(context)=>UnknownPage());},);在上述代码中,当用户访问一个未定义的路由时,onUnknownRoute()方法会返回一个UnknownPage路由,显示相应的提示信息。通过合理使用onGenerateRoute()和onUnknownRoute()方法,可以实现对动态路由和未知路由的有效处理,提升应用的健壮性和用户体验。【综合实训】制作一个ToDoList列表一、实训目的1.掌握JavaScript中click事件的用法。2.掌握JavaScript添加和删除DOM元素的方法。3.掌握JavaScript中事件监听器的使用方法。二、实训内容1.创建一个空的HTML模板(1)打开VScode编辑器,新建一个index.html。(2)通过快捷键创建HTML模板。2.创建页面布局 (1)使用“<div>”标签作为整个区域的容器。(2)使用“<input>”标签作为输入框区域,并添加id属性。 (3)使用“<button>”标签创建一个确认按钮,使用“<ul>”标签作为列表容器。3.设置页面样式 (1)为容器设置居中属性,让整个区域都居中。 (2)为输入框设置宽度和内边距属性。 (3)为按钮设置内边距、背景颜色和字体颜色等属性。 (4)为每一条列表内容设置背景颜色、内边距和宽度属性。 (5)为列表每条内容添加已完成样式,设置“text-decoration”属性和文字颜色。2.创建JavaScript变量和函数(1)监听按钮的点击事件,当点击时,如果输入框中有内容就创建一个“<li>”标签,并设置文本为输入框中的内容,同时把“<li>”标签添加到“<ul>”标签后面。(2)给“<li>”标签添加点击事件,当点击时切换“<li>”标签的类名,切换已完成还是未完成状态。3.预览页面(1)鼠标右键选择在浏览器中打开。(2)在输入框输入内容并点击按钮。(3)点击已添加的列表项。<!DOCTYPEhtml><html><head><title>ToDoList列表</title></head><style>.todo-app{text-align:center;}input[type='text']{padding:5px;width:300px;}button{padding:5px10px;background-color:#4caf50;color:white;border:none;cursor:pointer;}ul{list-style-type:none;padding:0;}li{margin-bottom:10px;}li{display:inline-block;background-color:#eee;padding:5px;cursor:pointer;width:250px;}pleted{text-decoration:line-through;color:gray;}</style><body><divclass="todo-app"><h1>ToDoList</h1><inputtype="text"id="todo-input"placeholder="Addanewtask"/><buttonid="add-btn">Add</button><ulid="todo-list"></ul></div><script>constinput=document.getElementById('todo-input');constaddButton=document.getElementById('add-btn');consttodoList=document.getElementById('todo-list');addButton.addEventListener('click',function(){consttask=input.value;if(task){constli=document.createElement('li');li.textContent=task;todoList.appendChild(li);input.value='';li.addEventListener('click',function(){li.classList.toggle('completed');});}});</script></body></html>【实战演练】制作搜索结果页设计一个搜索结果页,编写顶部搜索框,搜索框的下面是一条条的搜索标题加部分正文的内容,展示成一个列表,并设置标题字体大小是18px。内容字体大小是13px,与搜索框内容匹配的文字颜色设置为红色,其余标题文字是蓝色。效果如图1所示:图1搜索结果页效果图实现步骤如下所示。(1)创建一个HTML模板。(2)用<input>标签和<button>标签分别插入一个输入框和按钮。(3)用<ul>标签和<li>标签分别设计3个搜索结果列表,用<h2>标签作为标题,用<p>标签作为内容。(4)给按钮和输入框设置字体大小、内边距和宽度等样式。(5)给搜索结果列表的标题和内容分别设置颜色、字体大小和内外边距等样式。<!DOCTYPEhtml><html><head><title>百度搜索结果页</title><style>body{font-family:Arial,sans-serif;margin:0;padding:0;}.search-container{margin:20pxauto;text-align:center;}.search-containerinput[type='text']{width:900px;padding:10px;font-size:16px;}.search-containerbutton{padding:10px20px;font-size:16px;}.search-results{width:1000px;margin:20pxauto;list-style:none;padding:0;}.search-resultsli{margin-bottom:10px;}.search-resultsh2{font-size:18px;color:blue;margin:0;}.search-resultsp{font-size:13px;color:#333;margin:0;}.search-results.match{color:red;}</style></head><body><divclass="search-container"><inputtype="text"placeholder="请输入搜索内容"/><button>搜索</button></div><ulclass="search-results"><li><h2>搜索结果标题1</h2><p>这是搜索结果标题1的一部分内容,匹配搜索词<spanclass="match">搜索内容</span></p></li><li><h2>搜索结果标题2</h2><p>这是搜索结果标题2的一部分内容,不匹配搜索词</p></li><li><h2>搜索结果标题2</h2><p>这是搜索结果标题2的一部分内容,不匹配搜索词</p></li></ul></body></html>【课后练习】单选题在Flutter中,使用shared_preferences存储数据时,以下哪种数据类型无法直接存储?(B)A.StringB.List<int>C.BoolD.Double2.用于Flutter中操作SQLite数据库的插件是?(C)A.path_providerB.dioC.SqfliteD.shared_preferences3.在Dart异步编程中,await关键字只能在以下哪种函数中使用?(B)A.普通函数B.async标记的异步函数C.构造函数D.静态函数填空题1.Flutter中发起HTTP请求的常用库有__HttpClient__和__dio____。2.使用sqflite插入数据的方法是___insert___,删除数据的方法是__delete____。3.__web_socket_channel__是一个用于实现WebSocket通信的核心库。简答题1.简述shared_preferences和sqflite的适用场景差异。答:shared_preferences适用于存储简单、少量的键值对数据,如用户配置(主题、音量)、登录状态等,特点是轻量级、操作简单。sqflite适用于存储大量结构化数据,如用户详细信息、订单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年元宇宙经济系统的数据库优化策略
- 2026下半年年高校土木实训教学专员大学教师招聘考试笔试试题(含答案)
- 盐城市小学语文教师进城考试试题含答案
- 2026年生态城市建设中的碳汇能力提升策略
- 心理学性格测试题及答案
- 500亩桂花种植及芳香提取配套可行性研究报告
- 2026 年小学秋季开学消防安全教育宣讲课
- 2026 年夏季小学暑假安全:防溺水、防暑、防交通意外
- 洗煤厂维修钳工岗位练兵理论试题库及答案(50题)
- 2026年水产养殖技术员水质管控考试题库标准答案
- 内镜中心医疗废物分类处理规范
- 2025四川成都新都投资集团有限公司招聘23人笔试参考题库附带答案详解
- 《桥见贵州》课件-项目六 花江峡谷大桥
- 医院隔离技术标准试卷含答案
- 2026年食堂餐饮服务人员食品安全操作规范测试题含答案
- 加油站钥匙保管制度规范
- 某仪器仪表厂外协加工管控方案
- 全国市场监督管理法律知识竞赛测试题库(含答案解析)
- 传染性疾病控制副高考试题库及答案
- 福建春季高考试卷及答案
- (完整版)钢筋混凝土挡土墙施工方案
评论
0/150
提交评论