标签: flutter-getx

Flutter 和 GetxController - 如何管理状态不可靠性?

目前,我的应用程序中的getFlutter 包 ( https://pub.dev/packages/get ) 和以下状态场景存在许多问题:

例如我有一个 GetxController UserController。我需要在不同的小部件中使用此控制器,因此我在第一个小部件中使用它进行初始化Get.put(),对于其他子小部件,我将使用Get.find(). 这样可行。

但是:我有一些小部件,有时在控制器初始化之前加载,有时在控制器初始化之后加载。所以我得到了很多"UsersController" not found错误。也许这个问题有一些解决方法?

flutter flutter-getx

3
推荐指数
1
解决办法
2万
查看次数

在小部件之外使用 GetX 观察列表

我有一个isolate,它进行了一些繁重的计算,然后在接收结果列表时运行一个for循环,将它们添加到可观察列表中,其中包含items var items = [].obs;

\n

问题是我试图从启动控制器观察项目列表,一旦列表 != [] 我将导航到另一个屏幕,所以在 onInit() 中我有以下代码:

\n
class 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}\n
Run Code Online (Sandbox Code Playgroud)\n

尽管 itemsController.items 已填充(在 for 循环之后,我打印了 itemsController.items 并且它不是空的),但添加项目时,飞溅控制器上的工作程序不会触发。

\n

我在这里做错了什么?这是使用 Getx 观察小部件外部变量的正确方法吗?\n有人可以帮我解决这个问题吗?

\n

编辑:在项目控制器中 I\xe2\x80\x99m 以这种方式添加项目

\n
add(item) => items.add(item)\n
Run Code Online (Sandbox Code Playgroud)\n

dart flutter flutter-getx

3
推荐指数
1
解决办法
2万
查看次数

当我回来或结束时如何重置我的控制器?

在此输入图像描述

\n

我有一个 QuestionController 类扩展GetxController

\n

当我使用控件退出页面时,我希望它停止工作(因为它仍在后台运行),并在我返回该页面时重新启动。

\n

ScoreScreen()我已经尝试过:我在(in )的路线之后添加了这些nextQuestion ()

\n
_isAnswered = false;\n_questionNumber.value = 1; \n
Run Code Online (Sandbox Code Playgroud)\n

在进入分数页面之前,我重置了值 \xe2\x80\x8b\xe2\x80\x8b。如果您进入乐谱页面,它可能会起作用,但如果您早点回来,它就不会起作用。(上面的问题 num/4 在这里不起作用)。所以这种方式不适合。

\n

页面退出时如何停止并重置它?

\n

控制器类代码:

\n
class 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)

dart flutter flutter-getx

3
推荐指数
1
解决办法
1万
查看次数

在flutter中GetStorage总是返回null

代码

    print("Before : ${GetStorage().read("XXX")}");
    GetStorage().write("XXX", 1);
    print("After : ${GetStorage().read("XXX")}");
Run Code Online (Sandbox Code Playgroud)

这是我的守则。每次我运行该应用程序时,输出都是

之前:空
之后:1

为什么每次重启App时存储数据都会被清除?我认为这是 SharedPreference 的替代方案,效果很好。我错过了什么吗?

android ios dart flutter flutter-getx

3
推荐指数
1
解决办法
4041
查看次数

Flutter:如何使用 getX 更改文本颜色?

我想在单击图块时更改 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)

dart flutter flutter-getx

3
推荐指数
1
解决办法
4416
查看次数

同时使用GetX和Get_it可以吗?

我想在我的 flutter 项目中使用 GetX 进行状态管理。我不知道如何使用 GetX 实现依赖注入。在同一个项目中可以将 Get_it 与 GetX 一起使用吗?我觉得这样做会使代码变得混乱。或者我应该使用GetX创建一个绑定类并将其用作initialBinding来实现依赖注入?

我希望能够将依赖项注入到非视图类中。对此的最佳实践是什么?

使用 GetX + Get_it 还是单独使用 GetX 可能?

谢谢

binding dependencies flutter flutter-getx

3
推荐指数
1
解决办法
3842
查看次数

复选框列表在 flutter 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)

javascript dart flutter flutter-layout flutter-getx

3
推荐指数
1
解决办法
4098
查看次数

flutter getx web sockets - 流数据级联到提供者和控制器

目标很简单

  • flutter 应用程序通过 websockets 调用 graphql api
  • 应用程序视图调用控制器,控制器调用提供程序,提供程序通过 websockets 或通过 HTTP api 套接字调用调用 AWS appsync api
  • 我们时不时地从后端通过 websockets 接收来自 appsync api 或 HTTP api 套接字调用的数据流
  • 流需要级联回provider,然后级联到controller(这是关键步骤)
  • 控制器(而不是提供者)将更新 obs 或反应变量,使 UI 反映更改

问题:数据是通过调用者中的 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)

stream dart flutter flutter-getx

3
推荐指数
1
解决办法
1055
查看次数

flutter Getx 中无法将“String”类型的值分配给“RxString”类型的变量

我试图在 Getx 控制器中将图像转换为 Base64 文本,但显示错误“无法将‘String’类型的值分配给‘RxString’类型的变量”。

base64 state-management image-conversion flutter flutter-getx

3
推荐指数
1
解决办法
3997
查看次数

当属性更改时,如何对显示对象属性的文本小部件进行响应式更新?与 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 flutter-getx

2
推荐指数
1
解决办法
5043
查看次数