January 2018
Beginner to intermediate
454 pages
10h 8m
English
It might not be clear from the previous chapter, but we indirectly used Rc<RefCell<T>> to do state mutation. Indeed, our Playlist type contains a RefCell<Option<String>> and we wrapped our Playlist inside a reference-counted pointer. This was to be able to mutate the state in reaction to events, for instance playing the song when clicking the play button:
let playlist = self.playlist.clone(); let play_image = self.toolbar.play_image.clone(); let cover = self.cover.clone(); let state = self.state.clone(); self.toolbar.play_button.connect_clicked(move |_| { if state.lock().unwrap().stopped { if playlist.play() { set_image_icon(&play_image, PAUSE_ICON); set_cover(&cover, &playlist); } } else { playlist.pause(); set_image_icon(&play_image, ...
Read now
Unlock full access