我想在GetX控制器中使用 debounce,但最后我發現 debounce 代碼塊沒有執行。這是我的main.dart:
import 'package:flutter/material.dart';
import 'package:get/get_state_manager/src/simple/get_state.dart';
import 'main_controller.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetBuilder<MainController>(
init: MainController(),
builder: (controller) {
void _onItemTapped(int index) {
controller.updateIndex(index);
}
return Scaffold(
body: Text("ddddd"),
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(icon: GestureDetector(onDoubleTap: () {}, child: Icon(Icons.home)), label: "a"),
BottomNavigationBarItem(icon: GestureDetector(onDoubleTap: () {}, child: Icon(Icons.subscriptions)), label: "b"),
BottomNavigationBarItem(icon: Icon(Icons.rss_feed), label: "c"),
BottomNavigationBarItem(icon: Icon(Icons.school), label: "d"),
],
currentIndex: controller.selectIndex.value,
fixedColor: Theme.of(context).primaryColor,
onTap: _onItemTapped,
unselectedItemColor: Color(0xff666666),
type: BottomNavigationBarType.fixed));
});
}
}
這是main_controller.dart:
import 'package:get/get.dart';
import 'package:get/get_state_manager/src/simple/get_controllers.dart';
class MainController extends GetxController {
var selectIndex = 0.obs;
final _count = 0.obs;
void updateIndex(int index) {
selectIndex.value = index;
debounce(
_count,
(value) {
print("debounce -> " value.toString());
},
time: Duration(seconds: 2),
);
update();
}
}
我錯過了什么嗎?我應該怎么做才能讓它作業。
uj5u.com熱心網友回復:
中的工人方法Getx只能用于onInit(), 或作者在本期中所說initState()的:Getx
Workers 必須在 onInit、Controller 的建構式或 initState 上。資料是否稍后到達并不重要,在宣告它的那一刻,他們將觀察該變數,直到它可用。快速查看您的復制代碼,只要按下某個鍵,就會呼叫 updateUser 函式。這樣就創建了一個新的Worker。
因此在特定方法中使用 debounce 只會導致錯誤和意外行為。
你可以這樣做 :
@override
void onInit() {
debounce(
_count,
(value) {
print("debounce -> " value.toString());
},
time: Duration(seconds: 2),
);
super.onInit();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523346.html
標籤:扑颤振-getx
