下面这个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();
}
}