网页建设与网站设计360建站的应用场景
2026/5/21 18:00:34 网站建设 项目流程
网页建设与网站设计,360建站的应用场景,学校官方网站网页设计,成都有做公司网站的公司吗序言 认识flutter已经到了第三节。我们了解到了flutter的启动入口#xff0c;weight类别和常见的类型#xff0c;页面之间的跳转#xff0c;资源文件的配置#xff0c;如何实现weight的排列、以及如何和Android互动#xff0c;下面我们继续已Android视角认识flutter中的细…序言认识flutter已经到了第三节。我们了解到了flutter的启动入口weight类别和常见的类型页面之间的跳转资源文件的配置如何实现weight的排列、以及如何和Android互动下面我们继续已Android视角认识flutter中的细节。手势检测和触摸事件处理如何在 Flutter 中给一个组件添加 onClick 监听器在安卓系统中你可以通过调用 “setOnClickListener” 方法将 onClick点击事件附加到按钮等视图上。在 Flutter 中有两种添加触摸监听器的方法1、如果微件Widget支持事件检测可以向其传递一个函数并在该函数中进行处理。例如ElevatedButton 具有 onPressed 参数overrideWidgetbuild(BuildContext context){returnElevatedButton(onPressed:(){developer.log(click);},child:constText(Button),);}2、如果 Widget 不支持事件检测请将该 widget 包裹在 GestureDetector 中并向 onTap 参数传递一个函数。classSampleTapApp extends StatelessWidget{constSampleTapApp({super.key});overrideWidgetbuild(BuildContext context){returnScaffold(body:Center(child:GestureDetector(onTap:(){developer.log(tap);},child:constFlutterLogo(size:200),),),);}}如何处理小部件上的其他手势使用 GestureDetector你可以监听各种各样的手势例如TaponTapDown - 一个可能触发点击操作的指针已在屏幕特定位置接触屏幕。onTapUp - 一个触发点击操作的指针已在屏幕特定位置停止接触屏幕。onTap - 点击操作已发生。onTapCancel - 先前触发onTapDown的指针将不会导致点击操作。Double taponDoubleTap 用户快速连续两次点击了屏幕上的同一位置Long pressonLongPress 指针长时间与屏幕上的同一位置保持接触。Vertical dragonVerticalDragStart - 指针已接触屏幕并可能开始垂直移动。onVerticalDragUpdate - 与屏幕接触的指针在垂直方向上进一步移动。onVerticalDragEnd - 先前与屏幕接触并垂直移动的指针已不再接触屏幕且在停止接触时具有特定速度。Horizontal dragonHorizontalDragStart - 指针已接触屏幕并可能开始水平移动。onHorizontalDragUpdate - 与屏幕接触的指针在水平方向上已进一步移动。onHorizontalDragEnd - 先前与屏幕接触并水平移动的指针已不再接触屏幕且在停止接触时具有特定速度。下面是一个双击和旋转动画结合的例子classSampleApp extends StatefulWidget{constSampleApp({super.key});overrideStateSampleAppcreateState()_SampleAppState();}class_SampleAppState extends StateSampleAppwith SingleTickerProviderStateMixin{late AnimationController controller;late CurvedAnimation curve;overridevoidinitState(){super.initState();controllerAnimationController(vsync:this,duration:constDuration(milliseconds:2000),);curveCurvedAnimation(parent:controller,curve:Curves.easeIn);}overrideWidgetbuild(BuildContext context){returnScaffold(body:Center(child:GestureDetector(onDoubleTap:(){if(controller.isCompleted){controller.reverse();}else{controller.forward();}},child:RotationTransition(turns:curve,child:constFlutterLogo(size:200),),),),);}}ListViewFlutter 中 ListView 的替代方案是什么Flutter 中与 ListView 等效的组件依然是ListView在 Android 的 ListView 中你需要创建一个适配器并将其传入 ListViewListView 会根据适配器返回的内容来渲染每一行。不过你必须确保对行进行回收否则会出现各种奇怪的视觉故障和内存问题。由于 Flutter 的不可变组件模式你可以将一个组件列表传递给 ListView而 Flutter 会负责确保滚动既快速又流畅。importpackage:flutter/material.dart;voidmain(){runApp(constSampleApp());}classSampleApp extends StatelessWidget{constSampleApp({super.key});// This widget is the root of your application.overrideWidgetbuild(BuildContext context){returnMaterialApp(title:Sample App,theme:ThemeData(colorScheme:ColorScheme.fromSeed(seedColor:Colors.deepPurple),),home:constSampleAppPage(),);}}classSampleAppPage extends StatefulWidget{constSampleAppPage({super.key});overrideStateSampleAppPagecreateState()_SampleAppPageState();}class_SampleAppPageState extends StateSampleAppPage{overrideWidgetbuild(BuildContext context){returnScaffold(appBar:AppBar(title:constText(Sample App)),body:ListView(children:_getListData()),);}ListWidget_getListData(){ListWidgetwidgets[];for(int i0;i100;i){widgets.add(Padding(padding:constEdgeInsets.all(10),child:Text(Row $i)),);}returnwidgets;}}如何给item设置点击在 Android 中ListView 有一个用于查明哪个条目被点击的方法即 “onItemClickListener”。在 Flutter 中使用传入的小部件所提供的触摸处理。importdart:developerasdeveloper;importpackage:flutter/material.dart;voidmain(){runApp(constSampleApp());}classSampleApp extends StatelessWidget{constSampleApp({super.key});// This widget is the root of your application.overrideWidgetbuild(BuildContext context){returnMaterialApp(title:Sample App,theme:ThemeData(colorScheme:ColorScheme.fromSeed(seedColor:Colors.deepPurple),),home:constSampleAppPage(),);}}classSampleAppPage extends StatefulWidget{constSampleAppPage({super.key});overrideStateSampleAppPagecreateState()_SampleAppPageState();}class_SampleAppPageState extends StateSampleAppPage{overrideWidgetbuild(BuildContext context){returnScaffold(appBar:AppBar(title:constText(Sample App)),body:ListView(children:_getListData()),);}ListWidget_getListData(){ListWidgetwidgets[];for(int i0;i100;i){widgets.add(GestureDetector(onTap:(){developer.log(row tapped);},child:Padding(padding:constEdgeInsets.all(10),child:Text(Row $i),),),);}returnwidgets;}}如何动态更新 ListView在安卓系统上你需要更新适配器并调用 notifyDataSetChanged 方法。在 Flutter 中如果你要在 setState () 里更新 widget 列表你会很快发现数据在视觉上并没有发生变化。这是因为当调用 setState () 时Flutter 渲染引擎会查看 widget 树判断是否有内容发生了改变。当它检查到你的 ListView 时会执行一个 检查然后判定这两个 ListView 是相同的。既然没有变化也就不需要进行更新了。要以简单的方式更新你的 ListView请在 setState () 中创建一个新的 List并将数据从旧列表复制到新列表。虽然这种方法很简单但不建议用于大型数据集如下一个示例所示。importdart:developerasdeveloper;importpackage:flutter/material.dart;voidmain(){runApp(constSampleApp());}classSampleApp extends StatelessWidget{constSampleApp({super.key});// This widget is the root of your application.overrideWidgetbuild(BuildContext context){returnMaterialApp(title:Sample App,theme:ThemeData(colorScheme:ColorScheme.fromSeed(seedColor:Colors.deepPurple),),home:constSampleAppPage(),);}}classSampleAppPage extends StatefulWidget{constSampleAppPage({super.key});overrideStateSampleAppPagecreateState()_SampleAppPageState();}class_SampleAppPageState extends StateSampleAppPage{ListWidgetwidgets[];overridevoidinitState(){super.initState();for(int i0;i100;i){widgets.add(getRow(i));}}overrideWidgetbuild(BuildContext context){returnScaffold(appBar:AppBar(title:constText(Sample App)),body:ListView(children:widgets),);}WidgetgetRow(int i){returnGestureDetector(onTap:(){setState((){widgetsList.from(widgets);widgets.add(getRow(widgets.length));developer.log(row $i);});},child:Padding(padding:constEdgeInsets.all(10),child:Text(Row $i)),);}}推荐的、高效且有效的构建列表的方法是使用 ListView.Builder。当你有一个动态列表或包含大量数据的列表时这种方法非常好用。它本质上相当于 Android 上的 RecyclerView会自动为你回收列表元素importdart:developerasdeveloper;importpackage:flutter/material.dart;voidmain(){runApp(constSampleApp());}classSampleApp extends StatelessWidget{constSampleApp({super.key});// This widget is the root of your application.overrideWidgetbuild(BuildContext context){returnMaterialApp(title:Sample App,theme:ThemeData(colorScheme:ColorScheme.fromSeed(seedColor:Colors.deepPurple),),home:constSampleAppPage(),);}}classSampleAppPage extends StatefulWidget{constSampleAppPage({super.key});overrideStateSampleAppPagecreateState()_SampleAppPageState();}class_SampleAppPageState extends StateSampleAppPage{ListWidgetwidgets[];overridevoidinitState(){super.initState();for(int i0;i100;i){widgets.add(getRow(i));}}overrideWidgetbuild(BuildContext context){returnScaffold(appBar:AppBar(title:constText(Sample App)),body:ListView.builder(itemCount:widgets.length,itemBuilder:(context,position){returngetRow(position);},),);}WidgetgetRow(int i){returnGestureDetector(onTap:(){setState((){widgets.add(getRow(widgets.length));developer.log(row $i);});},child:Padding(padding:constEdgeInsets.all(10),child:Text(Row $i)),);}}不要创建 “ListView”而是创建一个 ListView.builder它接受两个关键参数列表的初始长度和一个 ItemBuilder 函数。ItemBuilder 函数类似于 Android 适配器中的 getView 函数它接收一个位置参数并返回你希望在该位置渲染的行。最后但最重要的是注意 onTap () 函数不再重新创建列表而是向列表中添加元素Text我如何在我的文本部件上设置自定义字体在 Android SDK截至 Android O 版本中你需要创建一个字体资源文件并将其传入 TextView 的 FontFamily 参数中。在 Flutter 中将字体文件放在一个文件夹中并在 pubspec.yaml 文件中引用它类似于导入图片的方式。fonts:-family:MyCustomFont fonts:-asset:fonts/MyCustomFont.ttf-style:italicoverrideWidgetbuild(BuildContext context){returnScaffold(appBar:AppBar(title:constText(Sample App)),body:constCenter(child:Text(Thisisa custom font text,style:TextStyle(fontFamily:MyCustomFont),),),);}我该如何设置我的文本小部件的样式除了字体你还可以自定义文本组件上的其他样式元素。文本组件的 style 参数接受一个 TextStyle 对象在该对象中你可以自定义许多参数例如colordecorationdecorationColordecorationStylefontFamilyfontSizefontStylefontWeighthashCodeheightinheritletterSpacingtextBaselinewordSpacing效果如下

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询