flutter

flutter 全局获取 context

2020-01-13  本文已影响0人  space77

一、新建 nav_key.dart 文件

// nav_key.dart
import 'package:flutter/widgets.dart';

class NavKey{
  static final navKey = new GlobalKey<NavigatorState>();
}

二、在注入 NavKey 到 MaterialApp

// main.dart
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // ...
      navigatorKey: NavKey.navKey,
      // ...
    );
  }
}

三、 全局无 context 操作

全局跳转页面

NavKey.navKey.currentState.pushNamed('routeName');

全局获取 provider

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class Store {
  // 无 context 获取值
  static T getValue<T> ({bool listen = false}) {
    return Provider.of(NavKey.navKey.currentContext, listen: listen);
  }



  /*---------------------其它获取 provider 方法--------------------------*/

  //  通过Provider.value<T>(context)获取状态数据
  static T value<T>(BuildContext context, {bool listen = false}) {
    return Provider.of<T>(context, listen: listen);
  }

  //  通过Consumer获取状态数据
  static Consumer connect<T>({Function(BuildContext, T, Widget) builder, Widget child}) {
    return Consumer<T>(builder: builder, child: child);
  }
}
上一篇下一篇

猜你喜欢

热点阅读