概要
- 实现类似TextEditingController的控制器
实现原理:通过TextEditingController源码可以看到,其实现是通过ChangeNotifier这个类进行事件广播,在目标组件进行监听。
一、自定义Controller
? ? ? ? 创建一个控制器类,继承ChangeNotifier
import 'package:flutter/material.dart';
class SearchInputMemoryController extends ChangeNotifier {
late Map<dynamic, dynamic> addStr = {};
late List<Map<dynamic, dynamic>> value = [];
late bool isHistory = true;
late List<Map<dynamic, dynamic>> historyList = [];
List<Map<dynamic, dynamic>> get data => value;
set data(List<Map<dynamic, dynamic>> e) {
value = e;
notifyListeners();
}
void addHistoryItem(Map<dynamic, dynamic> e) {
if (e.isNotEmpty) {
addStr = e;
notifyListeners();
}
}
@override
void dispose() {
super.dispose();
value = [];
}
}
在目标组件添加监听
@override
void initState() {
super.initState();
widget.memoryController.addListener(() {
if (widget.memoryController.addStr.isNotEmpty) {
historyMapAdd(widget.memoryController.addStr);
}
});
}
在最组件上注册控制器
SearchInputMemory(
spUtilKey: "热热热",
recordHeight: 40,
memoryController: queryController,
onQRBacode: (e) {
inputController.text = e;
handlerQuery(e);
},
执行代码queryController.data = list,则会触发目标组件的监听。以此实现控制器效果。
|