Flutter get_it库,有点类似依赖注入

下面这个demo在两个页面都注入了CountService来共享数据

// main.dart
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:rxdart/rxdart.dart';

GetIt getIt = GetIt.instance;

void main() {
  getIt.registerSingleton<CountService>(CountService(), signalsReady: true);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      routes: {
        "/": (c) => HomePage(),
        "/about": (c) => AboutPage(),
      },
    );
  }
}

class HomePage extends StatelessWidget {
  final count = getIt<CountService>(); // 注入

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            StreamBuilder(
                stream: count.n$,
                builder: (context, snapshot) {
                  return Text(snapshot.data.toString());
                }),
            FlatButton(
              child: Text('To About'),
              onPressed: () {
                Navigator.of(context).pushNamed('/about');
              },
            )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: count.add,
      ),
    );
  }
}

class AboutPage extends StatelessWidget {
  final count = getIt<CountService>(); // 注入

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('About Page'),
      ),
      body: Center(
        child: StreamBuilder(
            stream: count.n$,
            builder: (context, snapshot) {
              return Text(snapshot.data.toString());
            }),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: count.add,
      ),
    );
  }
}

class CountService {
  Stream<int> get n$ => _nSubject.stream;
  Sink<int> get nSink => _nSubject.sink;
  final _nSubject = BehaviorSubject<int>.seeded(0);
  int _n = 0;

  add() {
    _n += 1;
    nSink.add(_n);
  }

  dispose() {
    _nSubject.close();
  }
}

猜你喜欢

转载自www.cnblogs.com/ajanuw/p/11704495.html