The UndoManager class manages the history of editing operations on a text flow so that these operations can be undone and redone.
The undo manager maintains two stacks of IOperation objects. When a reversible operation is executed, it is placed on the undo stack. If that operation is undone, it is removed from the undo stack, reversed, and placed on the redo stack. Likewise, if that operation is then redone, it is removed from the redo stack, re-executed, and then placed onto the undo stack again. If another operation is executed first, the redo stack is cleared.
(This paragraph can answer your question)
If the TextFlow is modified directly (not via calls to the edit manager, but directly via calls to the managed FlowElement objects), then the edit manager clears the undo stack to prevent the stack from getting out of sync with the current state.
public function undo():void
// Cancel out of an IME session if there is one.
// Some IMEs are on all the time, and so the undo has to win over the IME,
// otherwise you would never be able to undo in Korean.
Your operation can be undone only when you input words through input methods or the undoManager is initialized.
Since there is no imeSession in your case, you can have a look at when undoManager is not null.
One more requirement is to update a user style and still have the undo stack in place.
Currently I am doing :
flowElement.required="false";but this deleted every thing from the undo stack.
so I want to do something like
var tlf:TextLayoutFormat= new TextLayoutFormat();tlf.required="false";
However there will not be anything like tlf.required since "required" is a user style
Is there a work around to get the above done?