网盘分享MK甄选-2024年Flutter零基础极速入门到进阶实战

biancheng1 · · 209 次点击 · · 开始浏览    

# MK甄选-2024年Flutter零基础极速入门到进阶实战 download:[百度网盘](https://www.51xuebc.com/thread-652-1-1.html) 正文 Dismissible 滑动和躲藏是挪动应用程序中常见的 UI 形式。要在 Flutter 做到这一点,能够运用 Dismissible widget。它有一个 child,background 和 key 。它将检测滑入手势和动画的 child 小部件。你也能够双向和垂直的交流。你能够用本人的方式运用更多的属性。您能够经过复制并粘贴下面的代码来尝试。 class _MyHomePageState extends State<MyHomePage> { List<String> _values = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']; @override Widget build(BuildContext context) { return ListView.separated( itemCount: _values.length, padding: const EdgeInsets.all(5.0), separatorBuilder: (context, index) => Divider( color: Colors.black, ), itemBuilder: (context, index) { return Dismissible( key: Key('item ${_values[index]}'), onDismissed: (DismissDirection direction) { if (direction == DismissDirection.startToEnd) { print("Selected Item"); } else { print('Delete item'); } setState(() { _values.removeAt(index); }); }, child: ListTile( leading: Icon(Icons.email, size: 50), title: Text(_values[index]), ), ); } ); } } SizedBox 这是一个小部件示例。当你有一个小部件,应该是固定的大小。例如,一个按钮的大小应该为 width = 100px 和 height = 50px。您需求将按钮包装在 SizedBox 中。下面是类的结构函数。 const SizedBox( {Key key, double width, double height, Widget child} ) Draggable 在许多应用程序中,我们能够看到拖动选项,如在电子邮件,文档拖动。有了这个 Flutter 小部件,很容易完成这个功用。在这里,我们拖动数据。这里我传送一个从 Draggable 到 DragTarget 的字符串。然后你需求阐明你传送的数据是什么,子属性显现你的数据。DragTarget 目的是拖曳 Draggable 的着陆区。主要有三种调用办法。 onwillAccept: 以测试挪动目的能否能够承受数据 onAccept: 调用有效的可拖动区域 onLeave: 当区域不胜利时调用 Flexible 大多数时分,我们运用行和列来显现一组子窗口小部件。但他们需求灵敏的大小来显现与父母的相关性。您只需求将一切子窗口小部件包装在一个灵敏的窗口小部件中。Flex 值决议每个子元素取得几空间。当改动屏幕大小时,它不会改动儿童之间的比例。 child: Column( children: [ Flexible( flex: 3, child: Container( color: Colors.red, ) ), Flexible( flex: 1, child: Container( color: Colors.green, ) ), Flexible( flex: 2, child: Container( color: Colors.blue, ) ), ], ) MediaQuery 假如你的目的是在手机和选项卡上运转你的应用程序,你的应用程序需求支持不同的用户界面大小。此外,有时用户有本人的 UI 希冀,如字体大小或小,方向,填充等。运用这个 MediaQuery,您能够取得屏幕大小信息和用户首选项,并依据这些细节构建规划。 const MediaQueryData({ this.size = Size.zero, this.devicePixelRatio = 1.0, this.textScaleFactor = 1.0, this.platformBrightness = Brightness.light, this.padding = EdgeInsets.zero, this.viewInsets = EdgeInsets.zero, this.systemGestureInsets = EdgeInsets.zero, this.viewPadding = EdgeInsets.zero, this.alwaysUse24HourFormat = false, this.accessibleNavigation = false, this.invertColors = false, this.highContrast = false, this.disableAnimations = false, this.boldText = false, this.navigationMode = NavigationMode.traditional, }) 这是一个提取屏幕尺寸的示例。 MediaQueryData deviceInfo = MediaQuery.of(context); 输出 I/flutter ( 6508): size: Size(360.0, 592.0) I/flutter ( 6508): padding: EdgeInsets(0.0, 24.0, 0.0, 0.0) I/flutter (6508) : Size: Size (360.0,592.0) i/flutter (6508) : padding: EdgeInsets (0.0,24.0,0.0,0.0) Spacer 这是另一个小部件,您最好在事前自定义中运用它。在一行中,我们能够运用 MainAxisAlignment 定义子级之间的空间。但是运用 Spacer 小部件,你能够做得更多。只需在其他小部件之间添加距离符即可。然后 children 扩展开来制造额外的空间。有一个 flex 属性来肯定相对大小。 SizedBox( height: 50, child: Row( children: [ Container( width: 50, color: Colors.red, ), Spacer(flex: 2,), Container( width: 50, color: Colors.green, ), Spacer(flex: 1,), Container( width: 50, color: Colors.blue, ), Container( width: 50, color: Colors.yellow, ), ], ), ); AnimatedIcon 曾经有一个宏大的图标集曾经在框架。也有动画图标,你能够在你的应用程序中运用。要运用这些,我们需求一个 AnimatedIcon 小部件。你需求提供图标和主要的进度属性。Flutter 提供了许多不同的动画图标供您运用。 import 'package:flutter/animation.dart'; import 'package:flutter/material.dart'; void main() => runApp(LogoApp()); class LogoApp extends StatefulWidget { _LogoAppState createState() => _LogoAppState(); } class _LogoAppState extends State<LogoApp> with SingleTickerProviderStateMixin { bool isPlaying = false; Animation animation; AnimationController controller; @override void initState() { super.initState(); controller = AnimationController( duration: const Duration(milliseconds: 500), vsync: this); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Center( child: IconButton( iconSize: 70, icon: AnimatedIcon( icon: AnimatedIcons.play_pause, progress: controller, ), onPressed: () => _onpressed(), )), ), ); } @override void dispose() { controller.dispose(); super.dispose(); } _onpressed() { setState(() { isPlaying = !isPlaying; isPlaying ? controller.forward() : controller.reverse(); }); } } Placeholder 有时您需求为 UI 的特定组件保存空间,直到最后肯定该组件的视图。因而,与其保存一个空间,我们能够在那里放置 Plaholder 以便进一步完成。在你能够开端施行它之后。这将填补一切提到的空间。 Center( child: Column( children: [ Container( child: Placeholder() ), Expanded( child: Row( children: [ Flexible( flex: 1, child: Placeholder(color: Colors.red,), ), Flexible( flex: 4, child: Placeholder(color: Colors.green,), ), ], ), ) ], ) ), RichText 文本是每个应用程序的主要 UI 组件之一。因而字体设计十分重要。你必需留意文字的款式和外观,如文字大小、字体、款式等。有时分你需求显现一个分离了不同作风的段落。用粗体表示强调,或用斜体表示,或用下划线表示,或用不同的颜色,不同的字体大小,或同时显现一切内容。你最好运用 RichText。下面是一个例子: RichText( text: TextSpan( style: TextStyle(color: Colors.black, fontSize: 24), children: [ TextSpan(text: 'Flutter ', style: TextStyle(color: Colors.red)), TextSpan(text: 'Placeholder '), TextSpan(text: 'Widget', style: TextStyle(decoration: TextDecoration.underline, fontStyle: FontStyle.italic)) ], ), ) ReorderableListView 在我们的应用程序中,我们运用列表视图来显现一组数据并滚动它们。通常,您不能挪动和更改列表中的位置。ReorderbaleListView 是处理计划。有了它,用户能够长时间按下该项目,并将其放入一个新的他或她喜欢的中央。列表视图的每个项都有一个用于标识该项的键,在挪动该项时,调用 onReorder 办法并跟踪挪动和更改。下面是一个例子。 class _TopListState extends State<TopList> { List<String> topMovies = [ "It Happened One Night(1934)", "Black Panther(2018)", "Citizen Kane(1941)", "Parasite (Gisaengchung)(2019)", "Avengers: Endgame(2019)", "The Wizard of Oz(1939)", "Casablanca(1942)", "Knives Out(2019)" ]; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("ReorderableListView Example"), ), body: ReorderableListView( onReorder: (int oldIndex, int newIndex) {}, children: getListItems(), ), ); } List getListItems() =>

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

209 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传