在无状态或有状态小部件外部使用上下文

时间:2019-06-25 19:24:21

标签: flutter dart

我将为此解释用例

我有一个继承的窗口小部件,其中包含一些值,例如BaseApiUrl和appname

class Config extends InheritedWidget {
  Config({
    @required this.appName,
    @required this.flavorName,
    @required this.apiBaseUrl,
    @required Widget child,
  }) : super(child: child);

  final String appName;
  final String flavorName;
  final String apiBaseUrl;

  static Config of(BuildContext context) {
    return context.inheritFromWidgetOfExactType(Config);
  }

  @override
  bool updateShouldNotify(InheritedWidget oldWidget) => false;
}

这在基于上下文的类中很好用,但是如果我在需要apiBaseUrl的地方有这个类怎么办

import 'dart:async';
import 'package:http/http.dart';
class LoginRequest {
  Client client = Client();

  Future<Response> login(credentials) async => await client.get('');
}

这能完成吗?

1 个答案:

答案 0 :(得分:0)

上下文很重要,因此Flutter知道树中要在哪里查找InheritedWidget实例,因为可能有多个。如果这不是您的用例,则可以考虑将所需的数据移动到普通的单例类(而不是小部件)中。