检测到错误使用GetX Flutter



检测到不正确使用GetX。这个错误导致我在那个时间点没有加载小部件。试图弄清楚,但问题仍然存在。您应该只对特定的小部件使用GetX或Obx。无法找出导致问题的get-x问题或OBX将其包含在何处。请在这种情况下提供帮助。谢谢

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'specified_books.dart';
import '../pages/styles.dart';
class BookMagazineTapbar extends StatelessWidget {
final String titleText;
const BookMagazineTapbar({Key? key, required this.titleText})
: super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 0,
backgroundColor: whiteColor,
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(titleText.tr),
],
),
),
body: SpecifiedBooks(
titleText: titleText,
),
);
/*TODO: Below is code for magzines and books, comment scafold from above and uncomment below code to use both if need to use magzines  */
//   DefaultTabController(
//     length: 2,
//     child: Scaffold(
//       appBar: AppBar(
//         elevation: 0,
//         backgroundColor: whiteColor,
//         title: Row(
//           mainAxisAlignment: MainAxisAlignment.center,
//           mainAxisSize: MainAxisSize.min,
//           children: <Widget>[
//             Text(titleText.tr),
//           ],
//         ),
//         bottom: TabBar(
//           labelColor: mainColor,
//           unselectedLabelColor: greyColor,
//           tabs: [
//             Tab(
//               child: Row(
//                 mainAxisSize: MainAxisSize.min,
//                 children: [
//                   const ImageIcon(AssetImage('assets/book.png')),
//                   const SizedBox(width: 8),
//                   Text('books'.tr),
//                 ],
//               ),
//             ),
//             Tab(
//               child: Row(
//                 mainAxisSize: MainAxisSize.min,
//                 children: [
//                   const ImageIcon(AssetImage('assets/magazine.png')),
//                   const SizedBox(width: 8),
//                   Text('magazines'.tr),
//                 ],
//               ),
//             ),
//           ],
//         ),
//       ),
//       body: TabBarView(
//         children: [
//           SpecifiedBooks(
//             titleText: titleText,
//           ),
//           SpecifiedMagazines(
//             titleText: titleText,
//           ),
//         ],
//       ),
//     ),
//   );
// }
}
}


import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:matab/controllers/book_controller.dart';
import 'package:matab/ui/pages/search/search_books.dart';
import 'package:matab/ui/pages/styles.dart';
class SpecifiedBooks extends StatefulWidget {
final String titleText;
const SpecifiedBooks({Key? key, required this.titleText}) : super(key: key);
@override
State<SpecifiedBooks> createState() => _SpecifiedBooksState();
}
class _SpecifiedBooksState extends State<SpecifiedBooks> {
@override
Widget build(BuildContext context) {
final BookController bookController = Get.find(tag: 'bookController');
return SingleChildScrollView(
child: RefreshIndicator(
onRefresh: bookController.refreshList,
backgroundColor: mainColor,
color: Colors.white,
child: Obx(
(() {
if (bookController.isLoading.value) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
return Column(
children: [
SizedBox(
height: MediaQuery.of(context).size.height - 100,
child: SearchBooks(
titleText: widget.titleText,
)),
],
);
}
}),
)),
);
}
}

使用Get.put bcz代替Get.find有时上下文不可用

//final BookController bookController = Get.find(tag: 'bookController');
final BookController bookController = Get.put(BookController());

GetX的解决方案是在GetMaterialApp中提供initialBinding。您可能无法查看下面的代码示例。

Future<void> main() async {
runApp(
GetMaterialApp(
title: "test App",
initialRoute: '/',
initialBinding: HomeBinding(),
getPages: AppPages.pages,
),
);
}

我们在一个单独的文件中创建HomeBinding,如下所示。

class HomeBinding implements Bindings {
@override
void dependencies() {
Get.lazyPut<MyController>(() => MyController());
Get.put<MyOtherController>(MyOtherController());
}
}

如果您正确地实现了上面的代码,那么当应用程序启动时,它将首先看到您需要什么控制器并初始化它们。

最新更新