标签: getx

单元测试 GetxController

我是 tdd 的初学者,所以如果这是一个愚蠢的问题,请原谅我。

我在单元测试 GetxControllers 时遇到困难。有谁知道这样做的简单方法?每当我这样做时,我都会收到错误,因为 Get 正在调用 onStart 并且它不喜欢 Mockito 给出的结果。我尝试使用 Mockito 5.0.1 的自动生成代码以及旧语法,类 MockController 扩展 Mock 实现 Controller{},以及扩展 Fake。

自动生成的代码有构建错误,因为 Mockito 试图使用 _InternalFinalCallback,但它没有被导入,因为它是私有的。我尝试将那部分代码复制粘贴到我生成的文件中(并关闭 pub build watch)但首先这是一个短期解决方案,它有自己的问题,第二它仍然不起作用,因为 onStart 和 onDelete 函数现在告诉我它们不是有效的覆盖。

另外,我可以看到 get_test 包,但它的文档基本上是 0,在示例中,控制器只是直接使用——从来没有模拟控制器。

我尝试设置 Get.testMode = true; 但同样,这似乎没有任何作用。虽然我在文档中找到了该属性,但我没有找到如何正确使用它。

任何帮助,将不胜感激,

这是我的代码,但问题似乎出在 GetxControllers 上,所以我认为它没有太大关系:

class FakeAuthController extends Fake implements AuthController {}

@GenerateMocks([AuthController])
void main() {
  TestWidgetsFlutterBinding.ensureInitialized();
  late MockAuthController mockAuthController;
  late FakeAuthController fakeAuthController;
  late SessionController sessionController;

  setUp(() {
    Get.testMode = true;
    mockAuthController = MockAuthController();
    fakeAuthController = FakeAuthController();
    Get.put<AuthController>(mockAuthController);

    sessionController = …
Run Code Online (Sandbox Code Playgroud)

unit-testing flutter getx flutter-getx

9
推荐指数
1
解决办法
1104
查看次数

数据更改时如何使用flutter GetX刷新ListView.Builder中的UI?

我正在将我的应用程序重构为 GetX 状态管理,以减少样板代码。 我制作了控制器和 API 提供者(下面的代码)。但是当我想刷新数据时(也是手动)它不会改变。

主页.dart

class HomeUI extends GetView<HomeController> {
...
GetX<HomeController>(
                          initState: (state) => Get.find<HomeController>().getAll(),
                          builder: (_) {
                                    return _.goalList.length < 1 ||
                                            _.goalList == null
                                        ? Center(
                                            child: Column(
                                            mainAxisAlignment:
                                                MainAxisAlignment.center,
                                            children: [
                                              CircularProgressIndicator(),
                                              Text('0 goals found, please wait',
                                                  style: Theme.of(context)
                                                      .textTheme
                                                      .headline6
                                                      .copyWith(
                                                          color: kTextColor))
                                            ],
                                          ))
                                        : ListView.builder(
                                            itemBuilder: (context, index) {
                                            GoalModel goalModel =
                                                GoalModel.fromMap(
                                                    _.goalList[index]);

                                            return ListTile(
                                              title: Text(goalModel.text),
                                              subtitle:
                                                  Text(goalModel.updated_at),
                                            );
                                          });
}                                                                         
Run Code Online (Sandbox Code Playgroud)

home_controller.dart

class HomeUI extends GetView<HomeController> {
...


class …
Run Code Online (Sandbox Code Playgroud)

state-management dart flutter bloc getx

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

Flutter GetX 表单验证

我正在寻找如何在 GetX 的最佳实践中处理表单和验证的示例?有没有很好的例子,或者有人可以向我展示我们如何最好地做到这一点的例子?

forms validation flutter flutter-form-builder getx

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

Flutter Getx - 找不到“Xxx”。你需要调用“Get.put(Xxx())”——但我已经调用了 Get.put(Xxx())

我有这个全局绑定类来初始化一些服务,我需要立即初始化它:

import 'package:get/get.dart';
import 'package:vepo/data/data_provider/local_data_provider.dart';
import 'package:vepo/data/data_source/local_data_source.dart';

import 'services/authentication_service.dart';

class GlobalBindings extends Bindings {
  final LocalDataProvider _localDataProvider = LocalDataProvider();
  @override
  void dependencies() {
    Get.put<AuthenticationService>(AuthenticationService(), permanent: true);
    Get.put<LocalDataProvider>(_localDataProvider, permanent: true);
    Get.put<LocalDataSource>(LocalDataSource(_localDataProvider),
        permanent: true);
  }
}
Run Code Online (Sandbox Code Playgroud)

这是在我的初始绑定中:

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Vepo',
      initialRoute: AppPages.INITIAL,
      initialBinding: GlobalBindings(),
      transitionDuration: const Duration(milliseconds: 500),
      defaultTransition: Transition.rightToLeft,
      getPages: AppPages.routes,
      home: Root(),
      theme: homeTheme,
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在类构造函数中,我尝试“找到”它:

class UserLocalRepository extends VpService implements IUserLocalRepository {
  UserLocalRepository() {
    localDataSource = …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-get getx

5
推荐指数
1
解决办法
6169
查看次数

Getx Flutter - 更新列表中的项目不是反应性的

我使用 getx 作为我的 flutter 应用程序的状态管理。但是我在更新列表中的值时遇到了困难。所以我有一个参数为 isFollowing 的用户模型。当我点击一个按钮时,isFollowing 变量会改变,颜色也会更新。但它并没有发生。我使用 Obx 作为我的小部件,因为我已经在开始时注入了状态。获取数据并在前端显示它一切正常。但是当我想更改列表中的值时,它没有更新。我的最小可重复示例

家庭控制器

class HomeController extends GetxController {
  var userslist = List<User>().obs;

  @override
  void onInit() {
    fetchUsers();
    super.onInit();
  }

  void fetchUsers() async {
    var users= await ApiService().getapidata('${usersurl}feed');
    if (users!= null) {
      userslist.value= users;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

模型

class User {
  User({
    this.id,
    this.user_name,
    this.profile_picture,
    this.isFollowing,
  });

  int id;
  String user_name;
  String profile_picture;
  bool isFollowing;


  factory User.fromJson(Map<String, dynamic> json) => User(
        id: json["id"],
        user_name: json["user_name"],
        profile_picture: json["profile_picture"],
        isFollowing: json["is_following"],
      );
Run Code Online (Sandbox Code Playgroud)

看法

class HomeScreen …
Run Code Online (Sandbox Code Playgroud)

dart hybrid-mobile-app flutter getx flutter-getx

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

Flutter GetX中如何使用observable方法处理复杂的API数据响应

我是 flutter 和 GetX 包世界的新手,我正在尝试使用 Laravel 作为我的 API 服务创建一个简单的应用程序,我正在以 JSON 格式发送来自 API 的响应,我正在使用 Laravel 资源 API,因此它正在发送响应中有一些额外的元数据,我已经在我的 flutter 应用程序中创建了服务模型和控制器,但是当我在控制器中初始化一个可观察变量时,它抛出了很多错误,我尝试了所有方法,但在我发送时它工作正常只有来自 API 的数据列表,因为我必须List<Model>.obs在控制器中定义,但是当我根据需要从 API 发送正确的响应时,问题就发生了。

这是我来自 API 的 JSON 响应数据

{
    "data": [
        {
            "id": 1,
            "description": "Purchased mouse",
            "amount": "1200",
            "type": "expense",
            "user_id": 1,
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 2,
            "description": "Purchased mouse sa",
            "amount": "1200",
            "type": "expense",
            "user_id": 1,
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 3,
            "description": "Purchased mouse",
            "amount": "1200",
            "type": "expense",
            "user_id": 1,
            "created_at": …
Run Code Online (Sandbox Code Playgroud)

json dart flutter getx

4
推荐指数
1
解决办法
6017
查看次数

Flutter:使用 GetX 刷新 ListView.Builder

我正在List of Cards根据toDoId的数量创建。

toDoController.toDo() 就像

toDo = [q1, r4, g4, d4].obs;
Run Code Online (Sandbox Code Playgroud)

而且,这是我的 ListView.builder()

  Obx(() {
         List _todo = toDoController.toDo();

         return ListView.builder(
         shrinkWrap: true,
         scrollDirection: Axis.horizontal,
         itemCount: _todo.length,
         itemBuilder: (BuildContext context, int i) {
                           
         var _loading = true;
         var _title = 'loading';
                          
         getTodoInfo() async {
         _title = await toDoController
                .getTodoInfo(
                     _todo[i]
                 );
         _loading = false;
         print(_title); // 'Clean!' <--- returns correct title
         }

         getTodoInfo();

         return Container(
           height: 150,
           width: 150,
           child: _loading
           ? Text(
             _title,
             )
             : Text(
             _title, …
Run Code Online (Sandbox Code Playgroud)

flutter getx flutter-getx

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

Flutter - 数据更改时 getx 控制器未更新

我正在开发一个应用程序,它有一个五页的底部导航栏。我使用 getx。在第一页,我列出了数据。我的问题是,当我从数据库手动更改数据(底部导航栏中的第一页)然后我越过页面时,回到第一页我看不到更改。

控制器;

class ExploreController extends GetxController {
  var isLoading = true.obs;
  var articleList = List<ExploreModel>().obs;

  @override
  void onInit() {
    fetchArticles();
    super.onInit();
  }

  void fetchArticles() async {
    try {
      isLoading(true);
      var articles = await ApiService.fetchArticles();
      if (articles != null) {
        //articleList.clear();
        articleList.assignAll(articles);
      }
    } finally {
      isLoading(false);
    }
    update();
  }
}
Run Code Online (Sandbox Code Playgroud)

和我的用户界面;

body: SafeArea(
        child: Column(
        children: <Widget>[
          Header(),
          Expanded(
            child: GetX<ExploreController>(builder: (exploreController) {
              if (exploreController.isLoading.value) {
                return Center(
                  child: SpinKitChasingDots(
                      color: Colors.deepPurple[600], size: 40),
                );
              }
              return ListView.separated(
                padding: …
Run Code Online (Sandbox Code Playgroud)

controller flutter getx

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

带有 Getx 的 Flutter DropdownButton 小部件

我正在学习 GetX 状态管理并偶然发现 DropdownButton 小部件。无法观察到如何使用所选值更新所选值。这是我的 DropdownButton 小部件

              DropdownButton(
                  hint: Text(
                    'Book Type',
                  ),
                  onChanged: (newValue) {
                    print(newValue);
                  },
                  value: selectedType,
                  items: bookController.listType.map((selectedType) {
                    return DropdownMenuItem(
                      child: new Text(
                        selectedType,
                      ),
                      value: selectedType,
                    );
                  }).toList(),
                ),
Run Code Online (Sandbox Code Playgroud)

var selectedType;
Run Code Online (Sandbox Code Playgroud)

在小部件构建中声明。我试图使这个变量可观察,但布局会引发溢出错误。我也用 obx 包装了小部件,但它仍然抛出相同的错误。这个小部件是如何使用 GetX 实现的。我在这里拉头发。我可以使用 getX 处理其他小部件。

flutter dropdownbutton getx

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

Get.to(MyPage()) - 如何删除所有以前的路由 - Flutter GetX

我有一个简单的 Flutter 应用程序,我想删除所有以前的路由,但我想使用 GetX,该怎么做?

现在它与

Navigator.of(context).pushNamedAndRemoveUntil('/home', (Route<dynamic> route) => false);
Run Code Online (Sandbox Code Playgroud)

但我想知道正确的方法Get.to或类似的

dart flutter flutter-routes getx

1
推荐指数
5
解决办法
6074
查看次数

Flutter Getx Snackbar 不工作

我创建了一个 flutter 应用程序并使用了 getx 包。但是后来我用它来显示小吃店,该功能被执行但小吃店没有出现。

 onPressed: () {
        print("executed");
        Get.snackbar(
            "title",
            "content",
          ); 
        },
Run Code Online (Sandbox Code Playgroud)

flutter getx

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

Flutter Getx 如何将 obs 绑定到 Widget?

当我Getx用来更新我的 Widget 时?我不知道Rx()如何联系我放入的东西。

代码是_obx=Rx(). 但我发送的数据是"".obs. 那不是,Rx()但这是RxString()。当我使用"".obs.value="newString". 为什么Rx()可以知道谁更新数据。

就像 :

import 'package:flutter/material.dart';
import 'package:get/get.dart';

class GetIncrementPage extends StatefulWidget {
  GetIncrementPage({Key key}) : super(key: key);

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

class _GetIncrementPageState extends State<GetIncrementPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('get'),
      ),
      body: Container(
        alignment: Alignment.center,
        child: _body(),
      ),
    );
  }

  Widget _body() {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center, …
Run Code Online (Sandbox Code Playgroud)

dart flutter getx

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

如何在flutter getx中为obs赋值

到目前为止,下面的代码工作正常,

class Controller extends GetxController{
  var count = 0.obs;
  increment() => count++;
}
Run Code Online (Sandbox Code Playgroud)

但是当我分配一个值时,它不能按预期工作,而不是类型转换的事件。

class Controller extends GetxController{
  var count = 0.obs;
  reset() => count = 10;
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何在 get x obs 对象中分配值(使用 '=' )?

dart flutter getx flutter-getx

0
推荐指数
1
解决办法
1010
查看次数