Flutter开发之——getX-依赖管理(07)

一 概述

  • 实例化依赖项的4种方法
  • 使用实例化后的依赖项
  • Bindings绑定类

二 实例化依赖项的4种方法

本文介绍实例化依赖项的4种方式,分别是:Get.put、Get.lazyPut、Get.putAsync、Get.create

2.1 方式一 Get.put

使用方式

S put<S>(S dependency,
          {String? tag,
          bool permanent = false,
          InstanceBuilderCallback<S>? builder}) =>
      GetInstance().put<S>(dependency, tag: tag, permanent: permanent);

示例

Get.put<LoginController>(LoginController(), permanent: true);

说明:

  • 添加依赖项最常用的方式
  • 有返回值,返回值为此依赖项

2.2 方式二 Get.lazyPut

使用方式

void lazyPut<S>(InstanceBuilderCallback<S> builder,
      {String? tag, bool fenix = false}) {
    GetInstance().lazyPut<S>(builder, tag: tag, fenix: fenix);
}

示例

Get.lazyPut(() => HomeController());

说明:

  • 延迟加载依赖项,仅在使用时才实例化它
  • 无返回值

2.3 方式三 Get.putAsync

使用方式

Future<S> putAsync<S>(AsyncInstanceBuilderCallback<S> builder,
          {String? tag, bool permanent = false}) async =>
      GetInstance().putAsync<S>(builder, tag: tag, permanent: permanent);

示例

Get.putAsync<SharedPreferences>(() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setInt('counter', 12345);
  return prefs;
});

Get.putAsync<YourAsyncClass>( () async => await YourAsyncClass() )

说明:

  • 异步注册时使用

2.4 方式四 Get.create

使用方式

void create<S>(InstanceBuilderCallback<S> builder,
          {String? tag, bool permanent = true}) =>
      GetInstance().create<S>(builder, tag: tag, permanent: permanent);

示例

Get.Create<LoginController>(() => LoginController());

三 使用实例化后的依赖项

3.1 获取依赖项

final controller = Get.find<Controller>();
// OR
Controller controller = Get.find();

3.2 调用依赖项中的方法

controller.increment()

3.3 删除依赖项(通常不需要做,GetX自动管理)

Get.delete<Controller>();

四 Bindings绑定类

4.1 绑定类

  • 定义一个类实现Bindings,并实现dependencies方法,在此方法中添加依赖项
  • 在路由配置页面中,指定name页面路由、page显示页面、binding绑定类
  • 经过上面2个步骤,页面通过binding绑定类和相关依赖(如Controller/接口等)建立联系

4.2 绑定类示例

项目结构说明:

  • getx_bind:项目入口文件,在此页面绑定页面和依赖项
  • HomeBinding:绑定类,在此类添加依赖项(如HomeController)
  • HomeView:显示页面,只负责页面内容展示
  • HomeController:负责页面逻辑处理
get_bind 项目入口文件,在此页面绑定页面和依赖项
void main()=>runApp(GetMaterialApp(
  getPages: [
    GetPage(name: '/', page: ()=>HomeView(),binding: HomeBinding()),
  ],
));
HomeBinding:绑定类,在此类添加依赖项(如HomeController)
class HomeBinding implements Bindings{
  @override
  void dependencies() {
    Get.lazyPut(() => HomeController());
  }
}
HomeView:显示页面,只负责页面内容展示
class HomeView extends StatelessWidget{
  final c = Get.find<HomeController>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: const Text("Flutter Binding demo")),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('You have pushed the button this many times:',),
            Obx(()=>Text('${c.count}', style: Theme.of(context).textTheme.headline4,)),
          ],
        ),
        floatingActionButton: FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment));
  }
}
HomeController:负责页面逻辑处理
class HomeController extends GetxController{
  var count = 0.obs;
  increment() => count++;
}

4.3 效果图

五 参考

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值