In the example involving the cart; he assumes the only way two sibling components can share state is by bloating parent components (by making them pass callbacks that they don't care about to their child components) or by breaking unidirectional data flow.
However, Flux (as described by Facebook) has a Store in which interested components can subscribe to change events. Your top level components will subscribe to the store and pass data to the child components. When a change occurs, only the top level component will get the new data and it will pass the data to its child components as usual. That doesn't break unidirectional data flow.
Can you expand on that? For a simple application without Flux, the data flow starts at the top-level component and ends at the bottom. That's unidirectional and we both agree.
For more complex applications that require Flux, the data flow starts at the top-level component which gets the state from the store and passes it to the child components, which may raise change events which will run the callback registered by the top-level component that gets the state from Store and passes it to the child components, which may raise change events and the cycle continues.
I don't see two flows, I don't see different directions and I'm not sure how anything is perpendicular.