base.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'dart:async';
  2. import 'package:dartin/dartin.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:provider/provider.dart';
  5. import 'package:rxdart/rxdart.dart';
  6. /// normal click event
  7. abstract class Presenter {
  8. /// 处理点击事件
  9. ///
  10. /// 可根据 [action] 进行区分 ,[action] 应是不可变的量
  11. void onClick(String action);
  12. }
  13. /// ListView Item Click
  14. abstract class ItemPresenter<T> {
  15. /// 处理列表点击事件
  16. ///
  17. /// 可根据 [action] 进行区分 ,[action] 应是不可变的量
  18. void onItemClick(String action, T item);
  19. }
  20. /// BaseProvide
  21. class BaseProvide extends ChangeNotifier {
  22. CompositeSubscription compositeSubscription = CompositeSubscription();
  23. /// add [StreamSubscription] to [compositeSubscription]
  24. ///
  25. /// 在 [dispose]的时候能进行取消
  26. addSubscription(StreamSubscription subscription) {
  27. compositeSubscription.add(subscription);
  28. }
  29. }
  30. /// page的基类 [PageProvideNode]
  31. ///
  32. /// 隐藏了 [ProviderNode] 的调用
  33. abstract class PageProvideNode<T extends ChangeNotifier> extends StatelessWidget {
  34. /// The values made available to the [child].
  35. final List<dynamic> params;
  36. final T mProvider;
  37. PageProvideNode(this.params) : mProvider = inject<T>(params: params);
  38. Widget buildContent(BuildContext context);
  39. @override
  40. Widget build(BuildContext context) {
  41. return ChangeNotifierProvider<T>.value(
  42. value: mProvider,
  43. child: buildContent(context),
  44. );
  45. }
  46. }