一、新建 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);
}
}
网友评论