14.6.flutter_GetX

GetView介绍

GetView只是对已注册的Controller有一个名为controller的getter的const Stateless的Widget,如果我们只有单个控制器作为依赖项,那我们就可以使用GetView,而不是使用StatelessWidget,并且避免了写Get.Find()

视频教程地址

零基础视频教程地址

GetView如何使用

GetView的使用方法非常简单,只是要将你的视图层继承自GetView并传入需要注册的控制器并Get.put()即可,我们来看下代码演示:

第一步:应用程序入口配置

import 'package:flutter/material.dart';
import 'package:flutter_getx_example/GetViewAndGetWidgetExample/GetViewAndGetWidgetExample.dart';
import 'package:get/get.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return GetMaterialApp(
     title: "GetX",
     home: GetViewAndGetWidgetExample(),
   );
 }
}

第二步:继承自GetView并使用状态管理

import 'package:flutter/material.dart';
import 'package:flutter_getx_example/GetViewAndGetWidgetExample/GetViewCountController.dart';
import 'package:get/get.dart';

class GetViewAndGetWidgetExample extends GetView {

 @override
 Widget build(BuildContext context) {

   Get.put(GetViewCountController());
   // Get.create(() => GetViewCountController());

   return Scaffold(
     appBar: AppBar(
       title: Text("GetX GetView"),
     ),
     body: Center(
       child: Column(
         mainAxisAlignment: MainAxisAlignment.center,
         crossAxisAlignment: CrossAxisAlignment.center,
         children: [
           Obx(() => Text(
             "count的值为: ${controller?.count}",
             style: TextStyle(
               color: Colors.red,
               fontSize: 30
             ),
           )),
           SizedBox(height: 20,),
           ElevatedButton(
               onPressed: () {
                 controller.increment();
               },
               child: Text("点我加1"))
         ],
       ),
     ),
   );
 }
}

效果展示

image

GetWidget介绍

它 “缓存 “了一个Controller,由于cache,不能成为一个 “const Stateless”(因为cache,所以不能成为一个const Stateless)。当我们使用Get.create(()=>Controller())会在每次调用时生成一个新的ControllerGet.find()`

GetWidget如何使用

第一步:应用程序入口设置

import 'package:flutter/material.dart';
import 'package:flutter_getx_example/GetViewAndGetWidgetExample/GetViewAndGetWidgetExample.dart';
import 'package:get/get.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return GetMaterialApp(
     title: "GetX",
     home: GetViewAndGetWidgetExample(),
   );
 }
}

第二步:继承自GetWidget并使用

import 'package:flutter/material.dart';
import 'package:flutter_getx_example/GetViewAndGetWidgetExample/GetViewCountController.dart';
import 'package:get/get.dart';

class GetViewAndGetWidgetExample extends GetWidget {

  @override
  Widget build(BuildContext context) {

    // Get.put(GetViewCountController());
    Get.create(() => GetViewCountController());

    return Scaffold(
      appBar: AppBar(
        title: Text("GetX GetView"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Obx(() => Text(
              "count的值为: ${controller?.count}",
              style: TextStyle(
                color: Colors.red,
                fontSize: 30
              ),
            )),
            SizedBox(height: 20,),
            ElevatedButton(
              onPressed: () {
                controller.increment();
              },
              child: Text("点我加1"))
          ],
        ),
      ),
    );
  }

}

效果展示

image

总结

在我们平时的开发过程中基本上很少会用到GetWidget,因为我们在大部分情况下都不需要缓存Controller。

当我们的页面中只依赖了一个控制器的情况话,那么使用GetView将是很好的选择,因为他大大简化了我们的代码。

参考:

https://liujunmin.com/flutter/getx/getx_getview_getwidget.html

你可能感兴趣的:(14.6.flutter_GetX)