Flutter GetX的事件监听

发布时间 2024-01-11 22:01:01作者: 鲤斌

Flutter GetX的事件监听

import 'package:flutter/material.dart';
import 'package:flutter_code/page/book/bookEntity.dart';
import 'package:get/get.dart';

class MyBook extends StatelessWidget {
  const MyBook({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.red, //导航背景颜色
        title: Text("我的Get"),
      ),
      body: myHome(),
    );
  }
}

class myHome extends StatefulWidget {
  const myHome({super.key});

  @override
  State<myHome> createState() => _myHomeState();
}

class _myHomeState extends State<myHome> {
  BookEntity bookEntity = Get.find<BookEntity>(); //实例化控制器

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    ever(bookEntity.BookId, (value) {
      print('监听bookId1 $value');
    });

     // 监听bookId的变化
    bookEntity.BookId.listen((value) {
      print('监听bookId2  $value');
    });

    everAll([bookEntity.BookId, bookEntity.LetterId], (value) {
      //BookId与LetterId任意一个发生变化时监听
      print('BookId与LetterId任意一个发生变化时监听 $value');
    });

    bookEntity.addListener(() {
      //对象中任意一个发生变化就会被监听
      print('监听全部_________________________');
    });

    // count值改变时调用,只执行一次
    once(
        bookEntity.BookId, //监听值
        (callback) => print(
            "once---------${bookEntity.BookId},${bookEntity.LetterId},-----------"));

// 值在1秒中不断改变,当值已经超过1秒后,不再改变,才调用,主要是防DDos
    debounce(
        bookEntity.BookId, //监听值
        (callback) => print(
            "debounce-----${bookEntity.BookId},${bookEntity.LetterId},-----监听count1的值,停止输入1秒后--执行------"));
    // // 忽略3秒内的所有变动,有输入值时,3秒内会执行一次,如一直在输入,连续输入9秒,会每隔3秒执行一次
    //  用于微信对方正在输入中
    interval(
        bookEntity.BookId, //监听count1的值
        (callback) => print(
            "interval-----${bookEntity.BookId},${bookEntity.LetterId},-----监听count1的值----忽略3秒内的所有变动------"));
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Obx(() => Text("bookid: ${bookEntity.BookId}")),
          ElevatedButton(
              onPressed: () {
                bookEntity.setBookId(bookEntity.BookId + 1);
              },
              child: const Text("bookid 加1")),
          Obx(() => Text("LetterId: ${bookEntity.LetterId}")),
          ElevatedButton(
              onPressed: () {
                bookEntity.setLetterId(bookEntity.LetterId + 1);
              },
              child: const Text("LetterId 加1")),
        ],
      ),
    );
  }
}