import 'package:get/get.dart'; import 'package:flutter/cupertino.dart'; /// @class : GetCommonView /// @name : jhf /// @description :基类,用于绑定Controller abstract class GetCommonView<T extends GetxController> extends StatefulWidget { const GetCommonView({ Key? key }) : super(key: key); final String? tag = null; T get controller => GetInstance().find<T>(tag: tag); ///Get 局部更新字段 get updateId => null; @protected Widget build(BuildContext context); @override AutoDisposeState createState() => AutoDisposeState<T>(); } /// @class : AutoDisposeState /// @name : jhf /// @description :基类,可自动装载的状态管理 class AutoDisposeState<S extends GetxController> extends State<GetCommonView> { AutoDisposeState(); @override Widget build(BuildContext context) { return GetBuilder<S>( id: widget.updateId, builder: (controller) { return widget.build(context); }); } @override void initState() { super.initState(); } @override void dispose() { Get.delete<S>(); super.dispose(); } }
使用,传入泛型,自动注入SearchController的依赖
class SearchPage extends GetCommonView<SearchController> { ///TextFieId控制器 const SearchPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, body: SafeArea( top: true, child: Column( children: [ Box.vBox15, ///搜索框顶部Widget SearchTopWidget( onChanged: (text) { controller.changeText.value = text; if (text.isEmpty) { controller.searchResult.value = []; } }, onTap: () => controller.searchWord(), deleteTap: () { controller ..changeText.value = '' ..showResult.value = false ..textController.text = '' ..searchResult.value = []; }, textController: controller.textController, ), Box.vBox15, Expanded( child: Stack( children: [ Column( children: [ ///搜索历史 const SearchHistoryWidget(), Box.vBox20, ///搜索热词 const SearchHotWordWidget(), ], ), const SearchResultWidget() ], ), ) ], ), ), ); } }