getx
getx copied to clipboard
Unexpected null value
I'm building my app for flutter web and using getx as state management. This is the error I'm getting consistently and I can't get any solution looking up the internet.
This is my main page code
// import 'package:awesome_notifications/awesome_notifications.dart';
import 'package:crony_store/config/theme/app_theme.dart';
import 'dart:ui' as ui;
import 'package:crony_store/constants/app_strings.dart';
import 'package:crony_store/controllers/theme_controller.dart';
import 'package:crony_store/views/home/components/app_drawer.dart';
import 'package:crony_store/views/mix_match/mix_match_view.dart';
import 'package:crony_store/views/auth/login/login_view.dart';
import 'package:crony_store/views/get_started/started_view.dart';
import 'package:crony_store/views/home/home_view.dart';
import 'package:crony_store/views/modify_items/modify_item_view.dart';
import 'package:crony_store/views/plu_group/plu_group_view.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:device_preview/device_preview.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'config/routes/app_pages.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
// AwesomeNotifications().initialize(
// null,
// [
// NotificationChannel(
// channelKey: "basic_channel",
// channelName: "Basic Notifications",
// channelDescription: "Basic and high priority immediate notifications.",
// importance: NotificationImportance.High,
// channelShowBadge: true,
// ),
// NotificationChannel(
// channelKey: "scheduled_channel",
// channelName: "Scheduled Notifications",
// channelDescription: "Scheduled notification reminders.",
// importance: NotificationImportance.High,
// ),
// ],
// );
await GetStorage.init();
// * Keep this code
// runApp(
// DevicePreview(
// enabled: !kReleaseMode,
// builder: (context) => const MyApp(),
// ),
// );
runApp(
const MyApp(),
);
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final controller = Get.put(ThemeController());
var theme = controller.switchTheme();
return GetMaterialApp(
useInheritedMediaQuery: true,
locale: DevicePreview.locale(context),
builder: DevicePreview.appBuilder,
debugShowCheckedModeBanner: false,
title: AppStrings.appName,
theme: theme,
getPages: AppPages.pages,
home: const HomeView(),
);
}
}
import 'package:crony_store/controllers/home_view_controller.dart';
import 'package:crony_store/utils/helpers/device_type_helper.dart';
import 'package:crony_store/views/card_reconciliation/card_reconciliation_view.dart';
import 'package:crony_store/views/daily_entry/daily_entry_view.dart';
import 'package:crony_store/views/daily_task/daily_task_view.dart';
import 'package:crony_store/views/departments/departments_view.dart';
import 'package:crony_store/views/edit_mix_match/edit_mix_match_view.dart';
import 'package:crony_store/views/home/components/app_drawer.dart';
import 'package:crony_store/views/home/components/grid_view.dart';
import 'package:crony_store/views/home/components/my_app_bar.dart';
import 'package:crony_store/views/home/components/my_flexible_app_bar.dart';
import 'package:crony_store/views/item_listing/item_listing_view.dart';
import 'package:crony_store/views/mix_match/mix_match_view.dart';
import 'package:crony_store/views/modify_items/modify_item_view.dart';
import 'package:crony_store/views/money_services/money_services_view.dart';
import 'package:crony_store/views/payroll_check/payroll_check_view.dart';
import 'package:crony_store/views/petty_cash/petty_cash_view.dart';
import 'package:crony_store/views/physical_entry/physical_entry_view.dart';
import 'package:crony_store/views/plu_group/plu_group_view.dart';
import 'package:crony_store/views/reports/reports_view.dart';
import 'package:crony_store/views/support_tickets/support_tickets_view.dart';
import 'package:crony_store/views/vendor_check/vendor_check_view.dart';
import 'package:crony_store/widgets/common_dialog.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../item_search/item_search_view.dart';
class HomeView extends StatelessWidget {
const HomeView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final controller = Get.put(HomeViewController());
var deviceType = getDeviceType();
final width = MediaQuery.of(context).size.width;
double expandedHeight = 300;
double collapsedHeight = 90;
ScrollController scrollController =
ScrollController(initialScrollOffset: expandedHeight - 140);
return Scaffold(
key: controller.scaffoldKey,
drawer: const AppDrawer(),
body: GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(FocusNode());
// print(deviceType);
// print(width);
// if (deviceType == DeviceType.phone) {
// print("yes");
// }
},
child: CustomScrollView(
controller: scrollController,
slivers: [
SliverAppBar(
pinned: true,
expandedHeight:
controller.role == 'admin' ? expandedHeight : collapsedHeight,
floating: true,
collapsedHeight: collapsedHeight,
centerTitle: true,
elevation: 0.0,
automaticallyImplyLeading: false,
title: const MyAppBar(),
backgroundColor: Theme.of(context).primaryColor,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(100),
bottomLeft: Radius.circular(100),
),
),
flexibleSpace: FlexibleSpaceBar(
background: controller.role == 'admin'
? const MyFlexibleAppBar()
: const SizedBox(),
),
bottom: PreferredSize(
preferredSize: Size(Get.width, 50),
child: Stack(
clipBehavior: Clip.none,
children: [
Positioned(
child: SizedBox(
width: Get.width / 1.3,
child: Material(
elevation: 10.0,
color: Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(50.0),
child: TextField(
decoration: InputDecoration(
// fillColor: Colors.white,
filled: true,
suffixIcon: const Icon(
Icons.mic_rounded,
color: Colors.grey,
),
hintText: "Search Here...",
contentPadding:
const EdgeInsets.fromLTRB(10, 0, 10, 0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(50.0),
borderSide: BorderSide.none,
),
),
),
),
),
),
],
),
),
),
SliverPadding(
padding: const EdgeInsets.all(16.0),
sliver: SliverGrid.count(
crossAxisCount: 3,
mainAxisSpacing: 25.0,
crossAxisSpacing: 25.0,
children: [
CustomGridView(
image: 'assets/svg_icons/item_search.svg',
text: 'Item Search',
onTap: () {
Get.to(() => const ItemSearchView());
},
),
],
),
),
SliverToBoxAdapter(
child: Container(
height: 700,
),
)
],
),
),
);
}
}
This is the error I'm getting:
The following TypeErrorImpl was thrown building Directionality(textDirection: ltr):
Unexpected null value.
The relevant error-causing widget was
Directionality
..\…\root\get_material_app.dart:328
When the exception was thrown, this was the stack
[C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart]() 251:49 throw_
Screenshots

Flutter Version: Flutter 2.10.0
Getx Version: get: ^4.6.1
Describe on which device you found the bug: Chrome
Try comment this line:
builder: DevicePreview.appBuilder,
@jonataslaw yaa it throwing bug if we are using device preview.
@jonataslaw The issue still persists even after removing the device preview dependency. Unexpected null value. If I hot reload with having that error then it also throws this.

@jonataslaw Have you found any solution? I'm in the middle of a project. Please look into it.
#1661 Please check this issue. This may fix your problem.