open:flutter-mobx

Flutter Mobx

dependencies:
  mobx: ^0.3.8
  flutter_mobx: ^0.3.3
  provider: ^3.1.0
 
dev_dependencies:
  build_runner: ^1.3.1
  mobx_codegen: ^0.3.9

flutter packages pub run build_runner build
flutter packages pub run build_runner watch

import 'package:mobx/mobx.dart';

// Include generated file
part 'counter_store.g.dart';

// This is the class used by rest of your codebase
class CounterStore = _CounterStore with _$CounterStore;

// The store-class
abstract class _CounterStore with Store {
  @observable
  int value = 0;

  @action
  void increment() {
    value++;
  }
}

import 'store/counter_store.dart';
import 'store/search_store.dart';

void main() => runApp(App());

class App extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
        providers: [
          Provider<CounterStore>(builder: (_) => CounterStore()),
          Provider<SearchStore>(builder: (_) => SearchStore()),
        ],
        child: MaterialApp(
          title: 'Flutter Demo',
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
            primarySwatch: Colors.green,
            backgroundColor: Colors.grey,
          ),
          home: HomeScreen(),
          // home: SearchResultScreen(),
        ));
  }
}

final searchStore = Provider.of<SearchStore>(context);
 
Observer(
  builder: (context) => Text('${searchStore.state}'),
),
 
onPressed: () {
  searchStore.search('FIX ME!!!!');
},

final List<ReactionDisposer> _disposers = [];
bool _pushed = false;
 
@override
void dispose() {
  _disposers.forEach((disposer) => disposer());
  super.dispose();
}
 
@override
void didChangeDependencies() {
  super.didChangeDependencies();
  searchStore = Provider.of<SearchStore>(context);
 
  _disposers.add(
    autorun(
      (_) {
        // print('${searchStore.state}');
      },
    ),
  );
 
  _disposers.add(
    reaction(
      (_) => searchStore.finished,
      (_) {
        print('## reaction called');
        if (_pushed == false) {
          _pushed = true;
          print('pushed is $_pushed');
          searchStore.setStateInit();
          Navigator.push(
            context,
            MaterialPageRoute(
                builder: (context) =>
                    SearchResultScreen(onWillPop: _onWillPop)),
          );
        }
      },
    ),
  );
}


  • open/flutter-mobx.txt
  • 마지막으로 수정됨: 2021/06/22 05:39
  • 저자 127.0.0.1