Flutter技术基础
  a1POfVYpMOW2 2023年12月23日 76 0

技术基础

  1. 语法 主要是用dart,dart就是js和java的组合体,变量的声明,类,继承,构造函数,set get方法,以 _ 开头的变量通常表示为私有变量。这意味着这个变量或者方法只能在当前 Dart 文件中访问,而不能被其他文件访问。一些集合包 如map、list、set等等会用到的数据结构

2.包管理:配置文件pubspec.yaml 对比Java中的maven, Vue中的package.json 。主要作用就是重用代码。

  • dependencies:应用或包依赖的其他包或插件。
  • dev_dependencies:开发环境依赖的工具包(而不是flutter应用本身依赖的包)。
  • flutter:flutter相关的配置选项。

在pub仓库找包,自己开发包,可以直接通过path引入本地包,可以通过git写url依赖包。

  1. 声明式语法

就是层层嵌套,里面有各种属性,传各种值,也可以自定义widget。

  1. future :表示异步操作结果的一种抽象

sync:异步函数的标志

await :等待

async: 声明该函数是一个异步函数,允许在函数体内使用 await 关键字来等待异步操作的完成。

  1. 状态管理:
  • 自己管理自己 StatefulWidget
  • 父管理子 继承StatelessWidget类,因为所有状态都由其父组件处理。当检测到事件时,它会通知父组件
  • 混合管理 现在使用riverpod
  1. riverpod基础:

在Widget树中,获取ref的最常用方法是将StatelessWidget 替换为 ConsumerWidget

ConsumerStatefulWidget + ConsumerState

“ref”有三种主要用法:

  • 获取provider的值并监听更改,这样当该值发生更改时, 将重新构建订阅该值的widget或provider。 这是使用 ref.watch 完成的
  • 在provider上添加监听器,以执行诸如导航到新页面或每当provider更改时显示模态框等操作。 这是使用 ref.listen 完成的。
  • 在忽略更改的情况下获取provider的值。 当我们在诸如“on click”之类的事件中需要provider的值时很有用。 这是使用 ref.read 完成的。

通俗的总结:watch 监听他,变化时重新渲染 listen 也是监听,变化时执行自己自定义的函数

使用read读取值 并改变值

最好的做法

@riverpod
 class Counter extends _$Counter {
   @override
   int build() => 0;
   void increment() => state = state + 1;
 }
 
 Widget build(BuildContext context, WidgetRef ref) {
   Counter counter = ref.watch(counterProvider.notifier);
   return ElevatedButton(
     onPressed: () => counter.increment(),
     child: const Text('button'),
   );
 }

封装一个方法,watch得到这个类,通过这个类调用他的方法

watch 的时候可以使用过滤:

abstract class User {
   String get name;
   int get age;
 }
Widget build(BuildContext context, WidgetRef ref) {
   String name = ref.watch(userProvider.select((user) => user.name));
   return Text(name);
 }

官方参考文档:https://riverpod.dev/zh-Hans/docs/concepts/combining_providers

目前官方支持使用@riverpod注解让他成为一个Provider。需要加一个 riverpod-annotation

  1. 路由管理 :这跟 Web 开发中单页应用的 Route 概念意义是相同的。使用命名路由,首先注册路由表,再通过路由名打开新路由。路由可以传参,通过arguments。
    如何提供权限控制(登录权限):
    提供一个onGenerateRoute回调,然后在该回调中进行统一的权限控制
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月23日 0

暂无评论

a1POfVYpMOW2
最新推荐 更多

2024-05-05