标签: flutter-getx

如何使用 Getx 重新启动我的 Flutter 应用

我在我的应用程序中使用 getx 包,但我想知道一些事情。是否可以使用 getx 重置我的应用程序的所有状态?所以这有点像重新启动。

flutter flutter-getx

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

Flutter Getx 构建器不更新 UI

我尝试将 GetX Builder 与控制器中的 bool 结合使用,在获取数据时显示加载旋转器,然后再显示数据。

将更新打印到 bool 显示它已完成加载并更改变量,但 UI 永远不会更新以反映这一点。

控制器

class AuthController extends GetxController {

  //final RxBool isLoading = true.obs;
  //var isLoading = true.obs;

  final Rx<bool> isLoading = Rx<bool>(true);

  setLoading(bool status) {
    isLoading.value = status;
    print(isLoading.value);
    update();
  }


  fetchUserData() async {
    setLoading(true);
    _firebaseUser.bindStream(_auth.authStateChanges());
    if (_auth.currentUser != null) {
      bool profileRetrieved =
          await FirestoreDB().getUserProfile(_auth.currentUser!.uid).then((_) {
        return true;
      });

      setLoading(!profileRetrieved);

    }
  }
}
Run Code Online (Sandbox Code Playgroud)

个人资料页

class ProfileCard extends StatelessWidget {
  const ProfileCard({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) { …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-getx

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

如何使用 GetX 让 Flutter 等待数据加载

我正在寻找一种最佳实践方法来实现在显示第一页之前等待我的应用程序初始化数据。

该应用程序有一个主控制器以及每页一个控制器。主控制器最初从服务器加载数据,在完成之前我想显示一个启动页面(或者至少在打开实际的应用程序页面之前等待)

一个简单的解决方案是,页面等待主控制器初始化

class MainController extends GetxController {
  final isInitialized = false.obs;

  @override
  void onInit() async {
    Future f1 = server.get('service1').then(....)
    Future f2 = server.get('service1').then(....)
    Future f3 = server.get('service1').then(....)
    await Future.wait([f1, f2, f3]);
    isInitialized.value = true;
  }
}
Run Code Online (Sandbox Code Playgroud)

页面组件可以:

class HandleTaskPage extends GetView<HandleTaskPageController> {

  @override
  Widget build(BuildContext context) {
    MainController mainController = Get.find();

    return Obx(() {
        if (mainController.isInitialized().value) {
            return TaskPanelWidget();
        } else {
            return WaitingPage();
        }
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

但我的应用程序允许用户使用直接 URL(网络应用程序)在任何给定页面启动,例如http://app.com/showtask/123 这意味着我必须在每个页面上等待全局控制器。

有什么方法可以让 Get 等待(并可能显示欢迎页面),直到 GlobalController 准备好,然后再转到路线中描述的页面?

我尝试向 …

flutter flutter-getx

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

为什么我的值没有在 GetX Flutter 中更新

我在 GetX 中制作了两个非常简单的页面来学习它。我为它创建了三个变量,一个是柜台,另一个是目的地和出发城市。计数器变量正在完美更新,而其他变量没有更改其值。它们仅在我热重载时才会改变。

如果您认为我错过了某些内容或者这种疑问很常见,并且您看过像我这样的非常相似的示例,请分享它的链接或如果可以的话更正代码。

这是我的课程:

import 'package:get/get.dart';

class Controller extends GetxController {
  var count = 0.obs;
  var des = "Delhi".obs;
  var dep = "Agra".obs;
  void increment() {
    count.value++;
    update();
  }

  void updateDes(String input) {
    des = input.obs;
  }

  void updateDep(String input) {
    dep = input.obs;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是第一页(您可以查看第 14、30-52 行)-

import 'package:flutter/material.dart';
import 'package:flutter_application_firebase_noti_basics/my_controller.dart';
import 'package:flutter_application_firebase_noti_basics/new_home.dart';
import 'package:get/get.dart';

class Sample extends StatefulWidget {
  const Sample({Key? key}) : super(key: key);

  @override
  _SampleState createState() => _SampleState();
}

class _SampleState extends State<Sample> { …
Run Code Online (Sandbox Code Playgroud)

android dart flutter flutter-getx

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

如何将Flutter GetXController永久放入内存中?

我正在使用获取包。

这是我的代码的样子,

class MyController extends GetXController{
//code to fetch data from firebase
}

class SecondScreen extends GetView<MyController>{
  @override
  Widget build(BuildContext context) {
    return GetBuilder(
      init: MyController(),
      builder: (controller) {
        return Scaffold(
        //code...
        );
      },
    );
}
}
Run Code Online (Sandbox Code Playgroud)

疑问: 我有一个按钮,使用它导航到secondScreenfrom homePage,每次我点击该按钮时,控制器MyController都会再次初始化,如此反复data is fetched。但我想做一些事情,将第一次初始化的控制器永久保留在内存中。我怎样才能做到这一点?

我知道,我们可以做这样的事情, Get.put(Controller(), permanent: true); 但是,在我的代码中,我没有在任何地方使用 Get.put 方法,因为当调用扩展 GetView 的类时,控制器会自动初始化。

dart flutter flutter-getx

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

在 FutureBuilder 中使用 GetX 构建列表 - UI 未更新

我正在创建一个待办事项列表(某种)应用程序。我有一个使用 FutureBuilder 的视图,它调用一个函数从 SQLite 数据库中获取文章并显示为卡片。我有一个getx_controller.dart,其中包含可观察的列表:

class Controller extends GetxController {
  // this is the list of items
  var itemsList = <Item>[].obs;
}
Run Code Online (Sandbox Code Playgroud)

我有一个items_controller.dart

  // function to delete an item based on item id
  void deleteItem(id) {
    final databaseHelper = DatabaseHelper();

    // remove item at item.id position
    databaseHelper.deleteItem(tableItems, id);

    print('delete item with id $id');
    this.loadAllItems();
  }
Run Code Online (Sandbox Code Playgroud)

loadAllItems是查询数据库函数

最后,list_builder.dart包含 FutureBuilder

final itemController = Get.put(ItemsController());

@override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Item>>(
        future: itemController.loadAllItems(),
        builder: (context, …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-futurebuilder flutter-getx

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

Flutter web:获取全屏尺寸 - 而不是窗口尺寸

我的 Flutter 桌面 Web 应用程序具有复杂的用户界面,很难做出响应。因此,我想将其放在一个FittedBox如果用户缩小浏览器窗口时会简单地缩小整个应用程序的应用程序中。

class CustomPage extends StatelessWidget {
  final Widget child;

  const CustomPage({
    Key? key,
    required this.child,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GetPlatform.isDesktop
          ? FittedBox(
              child: SizedBox(
                width: Get.width,
                height: Get.height,
                child: Center(child: child),
              ),
            )
          : Text('Sorry! This was only meant for desktop.'),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

但是Get.width并且WidgetsBinding.instance.window.physicalSize.width只能得到初始窗口大小。因此,如果应用程序在全屏浏览器中启动,则效果很好,但如果应用程序在小浏览器中启动,则不起作用。MediaQuery.of(context).size.width只获取当前屏幕尺寸。

有没有办法获取桌面物理屏幕尺寸?

dart flutter flutter-layout flutter-web flutter-getx

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

FirebaseMessaging.instance.getInitialMessage() 不适用于启动画面

在 GetX 状态管理的帮助下,我已将 Firebase Cloud Messaging 集成到我的 Flutter 移动应用中。我还使用 Laravel 和 Firebase Admin SDK 向我的应用程序发送通知。

\n

该通知在前台状态和后台状态(已暂停)下都运行良好。当我单击应用程序处于终止状态(应用程序关闭)的通知时,问题就开始了。我是否必须在启动画面和主页之间设置延迟?

\n

我已经尝试这样做但仍然出现错误

\n
//open notif content from terminated state of the app\nFirebaseMessaging.instance.getInitialMessage().then((message) {\n  if (message != null) {\n    print('TERMINATED');\n    if (FirebaseAuth.instance.currentUser != null) {\n      final redirectRoute = message.data['route'];\n      if (redirectRoute != null) {    \n        //adding delay here since my splashscreen have the same delay        \n        Future.delayed(const Duration(seconds: 6));\n        bottomnavbarController.updateIndex(int.parse(redirectRoute));\n      }\n    } else {\n      Get.offAllNamed(Routes.LOGIN);\n    }\n  }\n});\n
Run Code Online (Sandbox Code Playgroud)\n

我收到这个错误

\n
Unhandled Exception: \nYou are …
Run Code Online (Sandbox Code Playgroud)

flutter firebase-cloud-messaging flutter-getx

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

在 flutter 中将 getx 与有状态小部件一起使用是否会导致任何性能问题?

我正在构建一个 flutter 应用程序,我想在我的项目中使用有状态的小部件,并希望使用getx库进行状态管理。我想知道是否会有表演

flutter flutter-getx

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

如果文本中有参数,如何使用 Getx 进行本地化

如果文本是这样的:

           Text(
              'Put something ${widget.profileA} might like'.tr,        
            ),
Run Code Online (Sandbox Code Playgroud)

这是翻译示例的代码:

class Language extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
        'en_US': {
          'Put something ${widget.profileA} might like': 'some translation', 
        };
      };
}
Run Code Online (Sandbox Code Playgroud)

${widget.profileA}我的问题是,既然文本中有一个参数,有没有一个好的解决方案可以用这个参数翻译整个句子?谢谢你!

flutter flutter-getx

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