我开始学习 flutter 课程,在状态管理部分我决定学习 Getx 状态管理。无论如何,在这个商店教程中,我试图在按下时更改图标状态,但它没有。
我是新手,所以如果你帮助我,我会很感激。
product_item.dart
import 'package:flutter/material.dart';
import 'package:getx_pattern/app/ui/android/products_overview/widgets/product_details.dart';
import 'package:get/get.dart';
import '../../../theme/app_theme.dart';
import './product.dart';
import './products.dart';
class ProductItem extends StatelessWidget {
final pIndex;
// final String title;
// final String imageUrl;
ProductItem({
this.pIndex,
});
productDetails() {
Get.to(
ProductDetailScreen(),
arguments: product.findById(pIndex.id).title,
transition: Transition.rightToLeft,
);
}
final Products product = Get.put(Products());
// final Product pp = Get.put(Product(
// id: null, title: null, description: null, price: null, imageUrl: null));
@override
Widget build(BuildContext context) {
return ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child: GetBuilder<Products>( …Run Code Online (Sandbox Code Playgroud) 我又回到了问题:如何将 Switch() 小部件与 GetX/Obx() 一起使用?我在很多地方读到,使用 GetX/Obx 不需要 StatefullWidget。所以在我的应用程序中我只使用 StatelessWidgets。问题是我无法使 Switch() 工作,因为 SetState() 在 StatelessWidget 中不可用。
有人可以帮忙吗?谢谢你的好意。科特
使用GetX的实用函数时,有什么方法可以存储用户首选项(并在重新启动时检索它们) :
Get.changeTheme(ThemeData().dark)
Run Code Online (Sandbox Code Playgroud)
也
Get.updateLocale(Locale('en', 'US'));
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只能更改主题和语言,但我还没有在 GetX 中找到一种方法来保留对任何类型存储的任何更改,以便下次重新打开应用程序时加载。有什么我忽略的吗?有没有办法挂钩启动过程并检查一些存储的值(例如 in SharedPreferences)并将它们传递给 mylocale和themeproperty in GetMaterialApp?
这是我的代码:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
translations: Messages(),
locale: Get.locale,
theme: Get.theme,
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(
onPressed: () => { …Run Code Online (Sandbox Code Playgroud) 在类上使用 GetxController 并使用 Rx 获取 FirebaseUser 时,我看到一个错误,我缺少位置参数
class AuthController extends GetxController {
FirebaseAuth _auth = FirebaseAuth.instance;
Rx<User> _firebaseUser = Rx<User>();
User get user => _firebaseUser.value;
Run Code Online (Sandbox Code Playgroud)
在这 来自 package:firebase_auth/firebase_auth.dart 的Rx<User>()上,我收到错误:
预期有 1 个位置参数,但找到 0 个。尝试添加缺少的参数。dartnot_enough_positional_arguments
启动模拟器后,我得到这个更详细的错误:
lib/core/controllers/auth_controller.dart:9:36: 错误:位置参数太少:需要 1,给定 0。Rx _firebaseUser = Rx();
../../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.1.3/lib/get_rx/src/rx_types/rx_core/rx_impl.dart: 324:3:上下文:找到这个候选,但参数不匹配。Rx(T initial) : super(initial);
我找不到我应该在这里添加的内容,而且我看到的每个教程都没有在此处指定任何参数。有人知道这个问题吗?
我正在使用 getx cli 创建骨架项目,getx 创建项目。
我试图找到如何使用 getx 重定向根据身份验证状态将用户重定向到主页或登录页面。感谢您的帮助。
现在我总是像这样使用 getx 可观察声明:
var someString = ''.obs;
var someNumber = 0.obs;
Run Code Online (Sandbox Code Playgroud)
等等...
但是,如果某些变量一开始没有初始值,而我实际上希望它们为空然后更改它们呢?
我想在彼此内部使用 2 个控制器,但问题是其中一个必须在另一个之前初始化。例如
class FirstController extends GetxController {
SecondController _secondController = Get.find<SecondController>();
}
Run Code Online (Sandbox Code Playgroud)
class SecondController extends GetxController {
FirstController _firstController = Get.find<FirstController>();
}
Run Code Online (Sandbox Code Playgroud)
我同时使用了 put 和lazyPut,但没有任何效果。有什么办法可以做到吗?
我正在使用https://pub.dev/packages/flutter_secure_storage(使用 Await/Async 函数)来存储值并稍后检索它。请注意,每次打开应用程序时,我都会更新该值。我只是将其用于在应用程序打开时存储和检索值的目的。不要存储,以便当应用程序关闭然后再次打开时,我可以检索它。
现在我已经了解了https://pub.dev/packages/get,它很有前途,因为我可以使我的变量可观察,这似乎更容易使用,编码更少。
现在我只想向那些了解这两个 flutter 包的专家寻求建议,是否值得从使用flutter_secure_storage迁移到get。谢谢!
我想用 Getx 创建一个购物篮,我定义了一个值作为名称和价格,我想将基本产品添加到购物篮中。如何将产品中的字符串作为名称或双重价格添加到 PriceModel2 -RxList 中?
产品型号-
class PriceModel2 {
String name;
double price;
PriceModel2(String name, double price) {
this.name = name;
this.price = price;
}
}
Run Code Online (Sandbox Code Playgroud)
添加功能
RxList<PriceModel2> basket = [].obs;
urunEkle(String isim) {
basket.add(isim);
basket.add(isim<basket>[name]);
}
Run Code Online (Sandbox Code Playgroud)
用户界面
ElevatedButton(
onPressed: () {
controller.urunEkle(
material["name"] );
Run Code Online (Sandbox Code Playgroud)
感谢您的所有帮助。
我有一个带有命名路由的 GetMaterialApp,可在 Flutter Web 中用于仪表板项目。但是,我正在努力检查用户是否经过身份验证并根据身份验证状态重定向用户。这是我的应用程序代码:
GetMaterialApp(
initialBinding: InitialBinding(),
debugShowCheckedModeBanner: false,
theme: CustomTheme().getLightTheme,
themeMode: ThemeMode.light,
title: "----------",
initialRoute: "/login",
unknownRoute: GetPage(name: "/notfound", page: () => NotFoundPage()),
getPages: [
GetPage(name: "/login", page: () => Root()),
GetPage(name: "/dashboard", page: () => Dashboard()),
],
),
Run Code Online (Sandbox Code Playgroud)
我用来GetX处理身份验证状态。因此,我可以访问整个 Web 应用程序的身份验证状态。Root 小部件包含一个简单的命令,Obx用于检查身份验证状态并将用户发送到仪表板:
return Obx(() => (Get.find<AuthController>().loggedIn) ? Dashboard() : LoginScreen());
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这并不能解决问题,因为 url 没有改变,只是内容改变了。URL 仍为 /login。
我可以简单地Get.toNamed("dashboard")在用户登录时调用,但随后仪表板页面将暴露给该 url,允许用户即使未登录也可以访问 /dashboard url。
我也不想在我创建的每个小部件或页面中创建检查,因为那样效率低下。有没有办法检查用户是否登录,如果没有,则将用户重定向到输入的每个网址的登录页面?
例子:
有没有一种方法可以检查身份验证状态并相应地使用重定向用户GetX?
旁注:我每次都能获得正确的身份验证状态,这不是问题,因为我使用 GetX。 …