gpt4 book ai didi

dart - Flutter - 应用程序范围 'Services'

转载 作者:IT王子 更新时间:2023-10-29 06:58:29 26 4
gpt4 key购买 nike

我正在研究 Flutter,想知道最好或正确的方法:

如果我有一个“通用”对象,它提供的功能在整个应用程序中都很有用,那么什么是使其易于使用的最佳方式?

例如我有一个服务类,我希望在整个应用程序的各个页面/屏幕上可用

class MyService{

bool available = true;

bool validString(String s) => true;

bool validNum(num n) => true;

void someFunc() => print("Called");

String formatString(String s) => "Formatted String";

String defaultString() => "Default String";

// ....

}

我遇到的最好的例子是在 main.dart(第一行)中的应用程序启动时初始化此类的单个实例

MyService service = new MyService();

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}

然后任何需要该服务的路由/屏幕/小部件都导入 main 并通过先前初始化的对象调用它

import 'main.dart';

class MyHomePage extends StatelessWidget {

final String title;

MyHomePage({Key key, this.title}) : super(key: key);

@override
Widget build(BuildContext context) {

return Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
service.defaultString(),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => service.available ? service.someFunc() : print("Service Unavailable"),
tooltip: 'Validate',
child: Icon(Icons.question_answer),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}

是否有更好/更清洁的方法来做到这一点?

最佳答案

不,这种方法很好,因为只有一个实例,对其参数的任何更改都会立即反射(reflect)在使用它的其他小部件/类中。也可以从代码中的任何位置访问它。 这种方法的另一个优点是您不必更新任何显式依赖于此对象的 Stateful widgetState,它的任何更改都会触发 setState() 函数。

关于dart - Flutter - 应用程序范围 'Services',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54630631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com