我想使用 Get 包将多个数据从一个屏幕传递到另一个屏幕。
Get.to(Second(), arguments: ["First data", "Second data"]);
Run Code Online (Sandbox Code Playgroud) 我有两个页面:HomePage和DetailsPage以及关联的GetxControllers。
主页:
class HomePage extends GetView<HomeController> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('HomePage')),
body: Container(
child: Obx(
() => ListView.builder(
itemCount: controller.task.length,
itemBuilder: (context, index) {
return ListTile(
leading: Text('${index + 1}'),
title: Text(controller.task[index]["name"]),
onTap: () {
Get.to(
DetailsPage(),
arguments: controller.task[index]["name"],
);
},
);
},
),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
家庭控制器:
class HomeController extends GetxController {
final TaskRepository repository;
HomeController({@required this.repository}) : assert(repository != null);
final _task …Run Code Online (Sandbox Code Playgroud) 这里是新手。每次我推回屏幕时如何重新运行 onInit() ?onInit() 仅运行一次,但导航回上一个屏幕不会删除已初始化的控制器 ( FetchData ) 嗯..
每次我想弹出页面时, 我只使用Get.back() ,而每次我想在命名路线上导航时,我只使用Get.toNamed()
我唯一想要发生的事情是每次弹出页面时删除初始化控制器(FetchData),但我不知道该怎么做。
我的GetxController
class FetchData extends GetxController {
RxList items = [].obs;
@override
onInit() {
fetchData();
super.onInit();
}
Future<void> fetchData() async {
var result = await http.get("api.url");
items.value = result.body;
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
I have a minimlaist sample app running on Android with GetX as State Management lib only. There are two screens LandingPage and MainScreen. On going back from MainScreen to LandingPage screen, the controller is not autodisposing as expected. I am using Flutter's Navigation only without wrapping with GetMaterialApp.
我的期望是,在实例化控制器时,控制器公开的值应重置为其初始值。但是,小部件继续显示控制器的最后一个值。
我现在使用的是最新版本的 Flutter 和 GetX:分别为 2.2.3 和 4.3.8
感谢您的帮助。
代码:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.purple,
),
home: LandingScreen(), …Run Code Online (Sandbox Code Playgroud) 我对 的依赖注入很陌生,所以有人可以向我解释和Getx的好处并告诉我它们有什么区别吗?Get.put()Get.lazyPut()
我是 Flutter 新手,所以使用 GetX https://pub.dev/packages/get
我可以从控制器内的“另一个控制器”访问值吗?
它们都将被初始化,但我不想在屏幕/小部件/处理程序等处传递“ id ”,我只想在控制器到控制器之间传递“ id ”(如果可能)
这是一个例子
这是我的第一个控制器
类firstController扩展GetxController { var id = 1; }
这是我的第二个控制器,我想从第一个控制器访问 id
类 SecondController 扩展 GetxController { var CopyIdFromFirstController = 1; }
我知道这听起来很傻,但我喜欢探索事物(笑)
先感谢您!
我有以下代码:
Get.put(DbController(HabitDao(AppDb())));
Run Code Online (Sandbox Code Playgroud)
当我热重新加载我的应用程序时,出现以下错误:
"WARNING (moor): It looks like you've created the database class AppDb multiple times. When these two databases use the same QueryExecutor, race conditions will occur and might corrupt the database."
Run Code Online (Sandbox Code Playgroud)
DbController我需要检查在创建新实例之前是否放置了 a AppDb。我在使用 Provider 包时从未遇到过这个问题。
解决这个问题的最佳实践是什么?
我在我的项目中使用 Getx 控制器。我已经为 FutureBuilder 创建了用于显示列表的控制器,但未在 Future Function 上设置 .Obs。我正在分享代码。
class PPHomeController extends GetxController {
Future<List<PPProductRenterModel>> listNearProduct;
// i want to set .Obs end of the "listNearProduct" but it's not working because of Future.
FetchNearProductList({@required int price}) async {
listNearProduct = CallGetNearProducts();// Http API Result
}
}
{
PPHomeController _homeController = Get.put(PPHomeController());
Widget mainProductListView() {
return FutureBuilder<List<PPProductRenterModel>>
(builder: (context, AsyncSnapshot<List<PPProductRenterModel>> projectSnap){
if(!projectSnap.hasData){
if(projectSnap.connectionState == ConnectionState.waiting){
return Container(
child: Loading(),
);
}
}
return ListView.builder(
itemCount: projectSnap.data.length,
itemBuilder: (context, index) {
PPProductRenterModel …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个 BottomNavigationBar,但我无法完成它,我正在使用 Get 来处理应用程序的路线和状态。
我是flutter新手,但是阅读文档我仍然不明白
这是主要的小部件。
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
backgroundColor: AppColors.black,
title: Center(
child: CommonAssetImage(
asset: 'logo.png',
color: AppColors.white,
height: 30,
),
),
),
body: BodyTabsScreen(),
bottomNavigationBar: HomeScreenBottomNavigatorBar()),
);
Run Code Online (Sandbox Code Playgroud)
}
然后,我有这个小部件可以调用其他小部件。在这个小部件中我使用 Obs。
class HomeScreenBottomNavigatorBar extends StatelessWidget {
const HomeScreenBottomNavigatorBar({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Material(
elevation: 10,
color: AppColors.white,
child: Container(
height: 60,
padding: const EdgeInsets.symmetric(horizontal: 27),
color: AppColors.white,
child: Obx(() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ …Run Code Online (Sandbox Code Playgroud) 我是 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)