检测到不正确使用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());
}
}
如果您正确地实现了上面的代码,那么当应用程序启动时,它将首先看到您需要什么控制器并初始化它们。