05
Oct
07

Creating view states in a Flex application

The following example shows how you can create different view states in a Flex application by using the <mx:states /> and <mx:State /> tags.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2007/10/05/creating-view-states-in-a-flex-application/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:states>
        <mx:State name="login">
            <mx:AddChild>
                <mx:Form id="loginForm">
                    <mx:FormHeading label="Login" />
                    <mx:FormItem label="Username:">
                        <mx:TextInput id="log_username" />
                    </mx:FormItem>
                    <mx:FormItem label="Password:">
                        <mx:TextInput id="log_password"
                                displayAsPassword="true" />
                    </mx:FormItem>
                    <mx:FormItem>
                        <mx:Button label="Login" />
                    </mx:FormItem>
                </mx:Form>
            </mx:AddChild>
        </mx:State>
        <mx:State name="register">
            <mx:AddChild>
                <mx:Form id="registerForm">
                    <mx:FormHeading label="Register" />
                    <mx:FormItem label="Username:">
                        <mx:TextInput id="reg_username" />
                    </mx:FormItem>
                    <mx:FormItem label="Password:">
                        <mx:TextInput id="reg_password1"
                                displayAsPassword="true" />
                    </mx:FormItem>
                    <mx:FormItem label="Confirm password:">
                        <mx:TextInput id="reg_password2"
                                displayAsPassword="true" />
                    </mx:FormItem>
                    <mx:FormItem>
                        <mx:Button label="Register" />
                    </mx:FormItem>
                </mx:Form>
            </mx:AddChild>
        </mx:State>
    </mx:states>

    <mx:transitions>
        <mx:Transition id="loginTransition"
                fromState="*"
                toState="login">
            <mx:WipeDown target="{loginForm}"/>
        </mx:Transition>
        <mx:Transition id="registerTransition"
                fromState="*"
                toState="register">
            <mx:WipeDown target="{registerForm}"/>
        </mx:Transition>
    </mx:transitions>

    <mx:Script>
        <![CDATA[
            import mx.events.ItemClickEvent;

            private function toggleButtonBar_itemClick(evt:ItemClickEvent):void {
                currentState = evt.item.data;
            }
        ]]>
    </mx:Script>

    <mx:Array id="dp">
        <mx:Object data="" label="Default state" />
        <mx:Object data="login" label="Login" />
        <mx:Object data="register" label="Register" />
    </mx:Array>

    <mx:ApplicationControlBar dock="true">
        <mx:ToggleButtonBar id="toggleButtonBar"
                dataProvider="{dp}"
                itemClick="toggleButtonBar_itemClick(event);" />
    </mx:ApplicationControlBar>

</mx:Application>

View source is enabled in the following example.


9 Responses to “Creating view states in a Flex application”


  1. 1 pierre Oct 6th, 2007 at 12:44 am

    Hello,

    Your example with differents view states is interesting. Is it possible using this method to do something more difficult with tree states and resizing each other like this example :

    http://weblogs.macromedia.com/khoyt/files/f1040.swf

    Thanks

  2. 2 Anonymous Jun 4th, 2008 at 6:11 am

    Hello,

    Is it possible to Change the states with the Combo Selection?

    Thanks a lot
    PSamanth

  3. 3 Prashanth Samanth Jun 4th, 2008 at 11:07 pm

    Is it possible to Change the states with the Combo Selection? so that I can show Different type of chart using same values

  4. 4 peterd Jun 5th, 2008 at 8:14 am

    Prashanth Samanth,

    I don’t think I understand the question. Are you asking whether it is possible to use a ComboBox instead of a ToggleButtonBar in the previous example?
    If so, yes.

    Peter

  5. 5 De Angela Duff Jun 26th, 2008 at 2:25 pm

    I tried this out with Flex 3, and I am getting the following message:
    Type was not found or was not a compile-time constant: states.[Generated code (use -keep to save): Path: states-generated.as, Line:654, Column: 14]

    Any suggestions?

  6. 6 tyu Jul 28th, 2008 at 5:42 pm

    I have the same error in Flex3:
    Type was not found or was not a compile-time constant: states… :(

  7. 7 peterd Jul 28th, 2008 at 6:07 pm

    De Angela Duff / tyu,

    Which version of the Flex 3 SDK are you using? I tried in the SDK that shipped with Flex Builder 3 (3.0.0.477) and the code above worked.

    Peter

  8. 8 Sine Jul 31st, 2008 at 5:34 am

    Hello - Is there any reason why the mx:script CDATA block is not at the top of the code? Does it matter - apart from making it easier to find?
    P.s. The code runs fine for me in Flex Builder 3.

  9. 9 Sine Jul 31st, 2008 at 5:59 am

    Hello again,
    I am trying to load a gallery component - with images driven by xml - into one of the states, but Flash Player does not like it… Is it wrong to load something so complex inside a state?

Leave a Reply

This blog is terrible at eating HTML tags. If you plan on posting code/XML, please escape your "<" characters as "&lt;" and your ">" characters as "&gt;".




Badge Farm

  • Firefox 2
  • Powered by Redoable 1.2
  • Feeds burnt by Feedburner
  • Feed