Search code examples
flutterdartrxdartflutter-getx

How to Convert RxInt to Int in Dart || Flutter?


I am playing around with flutter,

I am facing an error and not getting any proper solution

In my app I have a few observable variables in my GetX controller, When trying apply some format then getting the log here

======== Exception caught by widgets library =======================================================
The following _TypeError was thrown building Obx(dirty, state: _ObxState#76641):
type 'int' is not a subtype of type 'RxInt' of 'function result'

The relevant error-causing widget was: 
  Obx file:///D:/flutter/mini_rupiya/lib/views/screens/payment.dart:84:17
When the exception was thrown, this was the stack: 
#0      DepositController.total (package:mini_rupiya/controllers/deposit_controller.dart)
#1      _PaymentState.build.<anonymous closure> (package:mini_rupiya/views/screens/payment.dart:84:145)
#2      Obx.build (package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart:84:28)
#3      _ObxState.notifyChilds (package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart:52:27)
#4      _ObxState.build (package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart:68:41)
...
====================================================================================================
Reloaded 7 of 1033 libraries in 2,688ms.

======== Exception caught by rendering library =====================================================
The following assertion was thrown during layout:
A RenderFlex overflowed by 99736 pixels on the bottom.

The relevant error-causing widget was: 
  Column file:///D:/flutter/mini_rupiya/lib/views/screens/payment.dart:38:20
The overflowing RenderFlex has an orientation of Axis.vertical.
The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and black striped pattern. This is usually caused by the contents being too big for the RenderFlex.

Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the RenderFlex to fit within the available space instead of being sized to their natural size.
This is considered an error condition because it indicates that there is content that cannot be seen. If the content is legitimately bigger than the available space, consider clipping it with a ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex, like a ListView.

The specific RenderFlex in question is: RenderFlex#d0b84 relayoutBoundary=up3 OVERFLOWING
...  needs compositing
...  parentData: offset=Offset(26.0, 26.0) (can use size)
...  constraints: BoxConstraints(0.0<=w<=359.4, 0.0<=h<=507.7)
...  size: Size(359.4, 507.7)
...  direction: vertical
...  mainAxisAlignment: center
...  mainAxisSize: max
...  crossAxisAlignment: center
...  verticalDirection: down
◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤
====================================================================================================

Here is the line from where this error is arrived

Obx(() => Text("You will get : ${NumberFormat.currency(locale: 'HI', name: "INR", symbol: "\u{20B9}").format(_depositController.total.value.round()/100)}"))

I am Using intl package for NumberFormat It was working fine before I have turned it into using .obs() on the controller

If anyone can describe this, It will be a greate help


Solution

  • type 'int' is not a subtype of type 'RxInt' of 'function result'
    

    means that the function is returning an integer. Not a RxInt.

    When assigning values to Rx Types use value propery. example:

    myInteger.value = 100;
    

    When getting the value from Rx Type,

    myInteger.value