我有一个函数,可以构建一个小部件来重用它,我想在这个函数中设置文本主题.我的问题是,要做到这一点,我需要访问BuildContext.我能想到的唯一方法是在每次函数调用中将其作为参数传递,但感觉必须有一个更简单的方法.还是这是最好的方法?

以下是当前代码:

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

import 'package:snapping_page_scroll/snapping_page_scroll.dart';

void main() => runApp(MaterialApp(
      theme: ThemeData(
        backgroundColor: Color(0xff121217),
         textTheme: TextTheme(
           headline: TextStyle(fontSize: 40)
         )
      ),
      home: SplashScreen(),
    ));

class SplashScreen extends StatefulWidget {
  @override
  _SplashScreenState createState() => _SplashScreenState();
}

class _SplashScreenState extends State<SplashScreen> {
  @override
  void initState() {
    super.initState();
    loadData();
  }

  //Simulates loading of data
  Future<Timer> loadData() async {
    return new Timer(Duration(seconds: 1), onDoneLoading);
  }

  onDoneLoading() async {
    Navigator.of(context).push(MaterialPageRoute(builder: (context) => Home()));
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Color(0xff121217),
      child: Padding(
        padding: const EdgeInsets.all(20),
        child: Image.asset('assets/logo.png'),
      ),
    );
  }
}

class Home extends StatelessWidget {

  Widget page(text, color, context){
    return Container(
      color: color,
      child: Align(
        alignment: Alignment(0, 0.5),
        child: Text(text, style: Theme.of(context).textTheme.headline,),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: SnappingPageScroll(
          children: <Widget>[
            page('Page 1', Colors.orange, context),
            page('Page 2', Colors.green, context),
          ],
        ),
      ),
    );
  }
}

推荐答案

您可以使用生成器小部件.... https://api.flutter.dev/flutter/widgets/Builder-class.html

Dart相关问答推荐

异类列表中函数类型不变性的解决方法

使用arm64v8/DART Docker映像进行编译时不支持DART镜像

如何在将构造函数参数赋给最终变量和传递给超级构造函数之前操作它?

Dartpad使用基本身份验证发出请求

Flutter 是否提供即时应用程序?

在Flutter中重命名文件/图像

我可以动态应用 Dart 的字符串插值吗?

Flutter:Firebase FieldValue.serverTimestamp() 到 DateTime 对象

如何使用我的 dart 包私有而不在 pub dart lang 上显示?

Flutter 扩展方法不起作用,它说undefined class和requires the extension-methods language feature

如何根据用户在Flitter中的时间显示问候,如早上好、下午好或晚上好

异常:在Flatter项目上没有Linux桌面项目配置错误

如何在Flutter中返回异步函数的值?

Flutter url_launcher 未在发布模式下启动 url

使用Flatter向Cloud Firestore添加对象

如何在dart中获得一周的开始或结束

如何在抽象类中声明工厂构造函数?

具有 Maps 的 Null 感知运算符

使用 VSCode 创建和运行 Dart 控制台应用程序?

如何在 Dart 中定义接口?