- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习自己的 Flutter GetX 并坚持了一点。实际上我想知道为什么当我再次访问该页面/对话框时不会调用 GetX Controlled 的 onInit 方法。
假设我有一个简单的TextField对话框,一个Listview,TextField用于搜索listview。当用户在文本字段中输入任何过滤键时, ListView 将被过滤。
这是示例对话框:
import 'package:flutter/material.dart';
import 'package:flutter_base_sample/util/apptheme/colors/app_colors.dart';
import 'package:flutter_base_sample/util/apptheme/styles/text_styles_util.dart';
import 'package:flutter_base_sample/util/commons/app_util.dart';
import 'package:flutter_base_sample/util/widgets/alert/controllers/country_finder_alert_controller.dart';
import 'package:flutter_base_sample/util/widgets/marquee/marquee_widget.dart';
import 'package:flutter_base_sample/util/widgets/textfields/app_text_field.dart';
import 'package:get/get.dart';
class SampleDialogWidget extends StatelessWidget {
final CountryFinderAlertController controller = Get.put(CountryFinderAlertController(),permanent: true);
@override
Widget build(BuildContext context) {
return Dialog(
insetPadding: AppUtil.dialogPadding(context),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
elevation: 0.0,
backgroundColor: Colors.white,
child: dialogContent(context),
);
}
Widget dialogContent(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
Text(
"Hello Heading",
style: TextStyleUtil.quickSandBold(context, fontSize: 16, color: Colors.blue),
textAlign: TextAlign.center,
),
SizedBox(
height: 20,
),
Expanded(
child: SingleChildScrollView(
child: Container(
height: AppUtil.deviceHeight(context),
padding: EdgeInsetsDirectional.all(20),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Hello Text1"),
SizedBox(
height: 10,
),
getSearchField(context),
SizedBox(
height: 5,
),
Expanded(
child: Obx(()=> getFavoritesListView(context)),
)
],
),
),
),
),
SizedBox(
height: 20,
),
Container(
margin: EdgeInsetsDirectional.only(start: 20,end: 20),
child: ElevatedButton(
onPressed: () {},
style: ButtonStyle(
overlayColor: MaterialStateProperty.all<Color>(Colors.red),
// splashFactory: NoSplash.splashFactory,
elevation: MaterialStateProperty.all(0.5),
backgroundColor: MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.pressed)) {
return AppColors.instance.black.withOpacity(0.1);
} else {
return Colors.blue; // Use the component's default.
}
},
),
),
child: Text(
"Hello Footer",
style: TextStyleUtil.quickSandBold(context, fontSize: 16, color: Colors.yellow),
textAlign: TextAlign.center,
),
),
)
],
);
}
Widget getFavoritesListView(BuildContext context) {
if (controller.favoritesList.length > 0) {
return ListView.separated(
shrinkWrap: true,
itemCount: controller.favoritesList.length,
itemBuilder: (BuildContext context, int index) => _topupFavoriteContent(context, index),
separatorBuilder: (context, index) {
return Divider(
indent: 15,
endIndent: 15,
);
},
);
} else {
return Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Text(
"No Data Found!",
textAlign: TextAlign.center,
),
SizedBox(
height: 20,
),
],
),
);
}
}
Widget _topupFavoriteContent(BuildContext context, int index) {
final item = controller.favoritesList[index];
return InkWell(
onTap: () {
Get.back(result:item);
// AppUtil.pop(context: context, valueToReturn: item);
},
child: getChildItems(context, index));
}
Widget getChildItems(BuildContext context, int index) {
return Directionality(textDirection: TextDirection.ltr, child: getContactNumberAndNameHolder(context, index));
}
Widget getContactNumberAndNameHolder(BuildContext context, int index) {
final item = controller.favoritesList[index];
return Container(
padding: EdgeInsetsDirectional.only(start: 20, end: 20, top: 20, bottom: 10),
child: Column(
children: [
Row(
// crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
child: Align(
alignment: AlignmentDirectional.centerStart,
child: Text(
item.name ?? "",
style: TextStyleUtil.quickSandBold(context, fontSize: 15, color: AppColors.instance.black),
),
),
),
SizedBox(
width: 5,
),
Container(),
Align(
alignment: AlignmentDirectional.centerEnd,
child: MarqueeWidget(
child: Text(
item.dialCode ?? "",
style: TextStyleUtil.quickSandBold(context, fontSize: 15, color: Colors.blue),
),
),
),
],
)
],
),
);
}
Widget getSearchField(
BuildContext context,
) {
return Container(
margin: EdgeInsetsDirectional.only(start: 20, end: 20, top: 20),
child: Row(
children: [
Expanded(
child: AppTextField(
onChanged: (String text) {
controller.performSearchOnForFavoriteContact(text);
},
isPasswordField: false,
keyboardType: TextInputType.text,
suffixIconClickCallBack: () {},
),
)
],
));
}
}
这里是 GetX Controller :
class CountryFinderAlertController extends GetxController {
TextEditingController countrySearchFieldEditController = TextEditingController();
RxList<CountryHelperModel> favoritesList;
RxList<CountryHelperModel> originalList;
@override
void onInit() {
super.onInit();
debugPrint("Hello222");
favoritesList = <CountryHelperModel>[].obs;
originalList = <CountryHelperModel>[].obs;
}
@override
void onReady() {
super.onReady();
debugPrint("Hello111");
originalList.addAll(JSONHelperUtil.getCountries());
addAllCountries();
}
@override
void dispose() {
super.dispose();
countrySearchFieldEditController.dispose();
}
@override
void onClose() {
super.onClose();
}
void performSearchOnForFavoriteContact(String filterKey) {
if (filterKey != null && filterKey.isNotEmpty) {
List<CountryHelperModel> filteredFavoritesList = [];
debugPrint("filterKey" + filterKey);
originalList.forEach((element) {
if (element.name.toLowerCase().contains(filterKey.toLowerCase()) ||
element.countryCode.toLowerCase().contains(filterKey.toLowerCase()) ||
element.dialCode.toLowerCase().contains(filterKey.toLowerCase())) {
filteredFavoritesList.add(element);
}
});
if (filteredFavoritesList.isNotEmpty) {
favoritesList.clear();
favoritesList.addAll(filteredFavoritesList);
} else {
favoritesList.clear();
}
} else {
//reset the list
addAllCountries();
}
}
void addAllCountries() {
favoritesList.clear();
favoritesList.addAll(originalList);
}
}
所以我想要的是每次打开此对话框时加载新数据。目前,如果用户搜索任何国家并关闭对话框,然后如果重新打开它,用户将看到旧的搜索结果。
简单来说,GetX Controller 如何被重置/销毁或重新初始化!
提前致谢
最佳答案
我相信是因为 ,permanent: true
试着把它排除在外。
关于Flutter GetX Re-Initialise GetX Controller Reset GetX Controller, Reset GetX Controller Values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71952925/
在我的常量文件中,我包含了以下行 NSString * ALERT_OK = NSLocalizedString(@"Ok",@"Ok"); 在此之后,当我尝试编译时收到以下错误 Initialise
我一直在使用 Mule DevKit 创建自定义消息处理器。 我已经使用“mule-devkit-archetype-generic”原型(prototype)创建了项目。 它给了我带有注释“@Mod
我能以某种方式获得对我正在使用对象初始化器创建的实例的引用吗 var x = new TestClass { Id = 1,
我正在做一本关于阿克曼函数的书本练习。 不过我有一个问题。如果我声明结果但不初始化它,编译器会提示“变量结果可能尚未初始化”。 int result; 当我将其设置为默认值 0 时,它不会提示。 in
我刚刚开始尝试使用Swing使用Clojure创建UI。 但是我尝试加载它时遇到了CompilerException异常。我一直在关注本教程“https://stuartsierra.com/2010
我正在尝试使用 JAX-WS 生成的代理来调用 Web 服务。 WSDL 相对较小(11kB),只有 3 个操作,并且存储在本地。 但是当我尝试初始化端口时,它在 stdout 的这一行上卡住了 10
我制作了一个金字塔应用程序,它使用 sqlite3 运行良好。对于生产,我需要使用 mysql。 在我的 initialize_db 脚本中,我创建了一个用户。运行脚本会产生以下错误: sqlalch
是否有一个功能可以让我检查我收到“可能未初始化”错误的变量应该未初始化的路径?最好是 Java 原生的还是内置于 Intellij 中? 编辑:设法将我的代码减少到最小的失败示例 class MyFa
我在 C# 中有以下代码: IList myList = null; myList.Add(temp); temp 是一个字符串,在别处贴标并且不为空(我检查过)。我在 myList.Add(tem
我正在阅读一些关于 PHP 的书籍,并开始着手掌握基础知识。我遇到了“实例化”和“初始化”的词。我找不到解释它们的例子。 PHP 中的“实例化”和“初始化”有什么区别?他们的意思是什么 ?如何使用它们
当我编译我正在处理的程序时,我得到: expected initializer before 'class' 我的 Class.h 文件出错。我在互联网上查找了错误消息,但找不到确切的错误,虽然类似的
我在 IDE 中使用 Embarcader C++Builder 10.4.2 和 Clang32 编译器来构建 VCL Windows 32 位应用程序。 当我使用旧的“Classic”编译器时,我
@Component public class BeanA { ... } @Component public class BeanB { @Autowired BeanA beanA
当我尝试运行我的构建时,我收到错误“Initialiser element is not a compile-time constant”。结果表明,Array 是问题的根源。我的代码如下: @imp
我定义了两个对象,每个对象都有一个 init 函数,如下 var TestSound = { settings: { testSoundFile : "static/main/
我想生成一个具有动态长度位的随机BigInt。我正在使用pointycaSTLe软件包来获取SecureRandom BigInt。 import 'package:pointycastle/poin
我正在尝试通过 Java 类创建 Pentaho 元数据域。当使用 Pentaho automodel API 创建数据模型时,我遇到了异常。 是否需要除KettleEnvironment.init(
我有一个使用 ViewModel 的 Activity 架构组件: class RandomIdViewModel : ViewModel() { var currentId : Mutabl
大家好,自从我接触 C 以来已经有一段时间了,所以我真的很生疏。我写了一个小程序来使用两个动态数组创建一个矩阵。但是,我收到此警告,但我不明白为什么?我想我不太确定指针的指针。有人可以帮我指出我的问题
在我的一个项目中,我用一个 const char(在编译时知道)初始化了一个 const std::string&,打印的结果是……令人惊讶。 我在 Ubuntu 12.04x32 上使用 gcc 版
我是一名优秀的程序员,十分优秀!