This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
abstract class BaseCommand<T> { | |
BuildContext _context; | |
BaseCommand(this._context); | |
T locate<T>(LogicRef<T> ref) => _context.use(ref); | |
T read<T>(StateRef<T> ref) => _context.read(ref); | |
Future<T> run(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// We create a "provider", which will store a reference to NotesController. | |
final notesProvider = StateNotifierProvider((ref) => NotesController()); | |
class NotesController extends StateNotifier<NotesState> { | |
NotesController() : super(NotesState.initial()); | |
void addNote() { | |
var notes = state.notes.concat(state.input); | |
state = state.copyWith(notes: notes, input: ''); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void main() { | |
// For widgets to be able to read providers, we need to wrap the entire | |
// application in a "ProviderScope" widget. | |
// This is where the state of our providers will be stored. | |
runApp(ProviderScope(child: App())); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// A simple helper function to allow us to immutably add to lists. | |
extension ImmutableList<T> on List<T> { | |
List<T> concat(T item) => List<T>.from(<T>[...this, item]); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class RiverpodPage extends StatefulWidget { | |
const RiverpodPage({Key key}) : super(key: key); | |
@override | |
_RiverpodPageState createState() => _RiverpodPageState(); | |
} | |
class _RiverpodPageState extends State<RiverpodPage> { | |
TextEditingController _controller; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class NotesCubit extends Cubit<NotesState> { | |
NotesCubit(): super(NotesState.initial()); | |
void addNote() { | |
emit(state.copyWith(notes: state.notes.concat(state.input), input: '')); | |
} | |
void updateInput(String input) => emit(state.copyWith(input: input)); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class BlocPage extends StatefulWidget { | |
const BlocPage({Key key}) : super(key: key); | |
@override | |
_BlocPageState createState() => _BlocPageState(); | |
} | |
class _BlocPageState extends State<BlocPage> { | |
TextEditingController _controller; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class FlutterCommandPage extends StatefulWidget { | |
const FlutterCommandPage({Key key}) : super(key: key); | |
@override | |
_FlutterCommandPageState createState() => _FlutterCommandPageState(); | |
} | |
class _FlutterCommandPageState extends State<FlutterCommandPage> { | |
final _notesViewModel = NotesViewModel(); | |
TextEditingController _controller; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class NotesViewModel { | |
NotesState state = NotesState.initial(); | |
Command<String, String> inputChangedCommand; | |
Command<String, NotesState> updateNotesCommand; | |
NotesViewModel() { | |
inputChangedCommand = Command.createSync((x) => x, ''); | |
updateNotesCommand = Command.createSync((input) { | |
state = state.copyWith(notes: state.notes.concat(input)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
part 'notes.g.dart'; | |
class Notes = NotesBase with _$Notes; | |
abstract class NotesBase with Store { | |
@observable | |
String input = ''; | |
@observable | |
ObservableList<String> notes = ObservableList(); |