目前,我的应用程序中的getFlutter 包 ( https://pub.dev/packages/get ) 和以下状态场景存在许多问题:
例如我有一个 GetxController UserController。我需要在不同的小部件中使用此控制器,因此我在第一个小部件中使用它进行初始化Get.put(),对于其他子小部件,我将使用Get.find(). 这样可行。
但是:我有一些小部件,有时在控制器初始化之前加载,有时在控制器初始化之后加载。所以我得到了很多"UsersController" not found错误。也许这个问题有一些解决方法?
我有一个isolate,它进行了一些繁重的计算,然后在接收结果列表时运行一个for循环,将它们添加到可观察列表中,其中包含items var items = [].obs;
\n问题是我试图从启动控制器观察项目列表,一旦列表 != [] 我将导航到另一个屏幕,所以在 onInit() 中我有以下代码:
\nclass SplashController extends GetxController {\n @override\n void onInit() {\n final ItemsController _itemsController = Get.put(ItemsController());\n\n // TODO: implement onInit\n super.onInit();\n ever(_itemsController.items, (newItems) {\n print('new items here $newItems');\n });\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n尽管 itemsController.items 已填充(在 for 循环之后,我打印了 itemsController.items 并且它不是空的),但添加项目时,飞溅控制器上的工作程序不会触发。
\n我在这里做错了什么?这是使用 Getx 观察小部件外部变量的正确方法吗?\n有人可以帮我解决这个问题吗?
\n编辑:在项目控制器中 I\xe2\x80\x99m 以这种方式添加项目
\nadd(item) => items.add(item)\nRun Code Online (Sandbox Code Playgroud)\n 我有一个 QuestionController 类扩展GetxController
当我使用控件退出页面时,我希望它停止工作(因为它仍在后台运行),并在我返回该页面时重新启动。
\nScoreScreen()我已经尝试过:我在(in )的路线之后添加了这些nextQuestion ():
_isAnswered = false;\n_questionNumber.value = 1; \nRun Code Online (Sandbox Code Playgroud)\n在进入分数页面之前,我重置了值 \xe2\x80\x8b\xe2\x80\x8b。如果您进入乐谱页面,它可能会起作用,但如果您早点回来,它就不会起作用。(上面的问题 num/4 在这里不起作用)。所以这种方式不适合。
\n页面退出时如何停止并重置它?
\n控制器类代码:
\nclass QuestionController extends GetxController\n with SingleGetTickerProviderMixin {\n PageController _pageController;\n\n PageController get pageController => this._pageController;\n\n List<Question> _questions = questions_data\n .map(\n (e) => Question(\n id: e["id"],\n question: e["question"],\n options: e["options"],\n answer: e["answer_index"]),\n )\n .toList();\n\n List<Question> get questions => this._questions;\n\n bool _isAnswered = false;\n\n bool get isAnswered => this._isAnswered;\n\n int _correctAns;\n\n int …Run Code Online (Sandbox Code Playgroud) 代码
print("Before : ${GetStorage().read("XXX")}");
GetStorage().write("XXX", 1);
print("After : ${GetStorage().read("XXX")}");
Run Code Online (Sandbox Code Playgroud)
这是我的守则。每次我运行该应用程序时,输出都是
之前:空
之后:1
为什么每次重启App时存储数据都会被清除?我认为这是 SharedPreference 的替代方案,效果很好。我错过了什么吗?
我想在单击图块时更改 ListTile 文本的颜色,我该怎么做,而且颜色也应该只更改特定选定图块的颜色。我的方法如下:
ListView.builder(
itemCount: _antigen.plantAntigens.length,
itemBuilder: (BuildContext cntxt, int index) {
return ListTile(
title: Text(
_antigen.plantAntigens[index],
style: TextStyle(
color: controller.isSelected ? Colors.red : Colors.black87),
),
onTap: () {
controller.toogle();
});
},
),
Run Code Online (Sandbox Code Playgroud)
控制器的代码如下:
bool isSelected = false.obs;
toogle() {
isSelected = !isSelected;
}
Run Code Online (Sandbox Code Playgroud) 我想在我的 flutter 项目中使用 GetX 进行状态管理。我不知道如何使用 GetX 实现依赖注入。在同一个项目中可以将 Get_it 与 GetX 一起使用吗?我觉得这样做会使代码变得混乱。或者我应该使用GetX创建一个绑定类并将其用作initialBinding来实现依赖注入?
我希望能够将依赖项注入到非视图类中。对此的最佳实践是什么?
使用 GetX + Get_it 还是单独使用 GetX 可能?
谢谢
我正在使用 GetX 进行 flutter 项目的状态管理。我的问题是,当我单击复选框时,它会更新控制器中的状态,但不会在 UI 中显示结果。一般来说,改变的状态也应该改变 UI。我不确定问题是什么,但我认为在 getx 中使用可观察变量有一个错误。如何解决这个问题呢?如果帖子不清楚的话请问我。
这就是观点。
class FilterBottomSheetWidget extends GetView<SearchController> {
@override
Widget build(BuildContext context) {
return Container(
height: Get.height - 90,
child: Stack(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 80),
child: Container(
padding: EdgeInsets.only(top: 20, bottom: 15, left: 4, right: 4),
child: controller.expiringContractStatus.isEmpty ? CircularLoadingWidget(height: 100)
: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: ExpansionTile(
title: Text("Contract Status".tr, style: Get.textTheme.bodyText2),
children: List.generate(controller.expiringContractStatus.length, (index) {
var _expiringContractStatus = controller.expiringContractStatus.elementAt(index);
return CheckboxListTile(
controlAffinity: ListTileControlAffinity.trailing,
value: _expiringContractStatus["isCheck"], // ************
onChanged: …Run Code Online (Sandbox Code Playgroud) 目标很简单
问题:数据是通过调用者中的 websocket 接收的,但从未作为流传回提供者或控制器以反映更改
示例代码
实际调用者 orderdata.dart
@override
Stream<dynamic> subscribe({
String query,
Map<String, dynamic> variables,
}) async* {
debugPrint('===->subscribe===');
// it can be any stream here, http or file or image or media
final Stream<GraphQLResponse<String>> operation = Amplify.API.subscribe(
GraphQLRequest<String>(
document: query,
variables: variables,
),
onEstablished: () {
debugPrint(
'===->subscribe onEstablished …Run Code Online (Sandbox Code Playgroud) 我试图在 Getx 控制器中将图像转换为 Base64 文本,但显示错误“无法将‘String’类型的值分配给‘RxString’类型的变量”。
base64 state-management image-conversion flutter flutter-getx
我试图了解如何在 Flutter 应用程序中使用 GetX 包,以便在 TextFormField 中的值发生更改时在 Text 小部件中获取响应式更新。文本小部件中显示的内容是可观察对象的属性。正是该属性从 TextFormField 更新。该值在控制器中正确更新,但在小部件中未正确更新。如果我直接使用字符串变量,它会正确更新。但一旦我使用一个对象,它就不再更新。
这是我的应用程序的一个非常简单的示例,只是为了确保理解基础知识。
这是我的代码:
class User {
String name = "";
}
class TestController extends GetxController {
TestController();
final user = User().obs;
}
class MyHomePage extends StatelessWidget {
final c = Get.put(TestController());
final String title;
MyHomePage({this.title});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Center(
child: Container(
width: Get.width * 0.8,
height: Get.height * 0.8,
child: Column(
children: [
Obx(() => Text(c.user.value.name)),
TextFormField(
onChanged: (value) => …Run Code Online (Sandbox Code Playgroud) flutter ×10
flutter-getx ×10
dart ×6
android ×1
base64 ×1
binding ×1
dependencies ×1
ios ×1
javascript ×1
stream ×1