美文网首页flutter
flutter 全局获取 context

flutter 全局获取 context

作者: space77 | 来源:发表于2020-01-13 15:33 被阅读0次

    一、新建 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);
      }
    }
    

    相关文章

      网友评论

        本文标题:flutter 全局获取 context

        本文链接:https://www.haomeiwen.com/subject/eftnactx.html