小编ebg*_*g11的帖子

选择正确的 Flutter 设计模式

我创建了一个 Flutter 页面,其中有一堆输入。我认为这是一团糟,让我们重构它并为每个输入创建一个新的有状态小部件。

这很好,除了数据需要在父小部件中,而且我很难理解如何将数据从新的子小部件传递回父小部件。

我发现了一些方法,你传入一个函数,只要有变化,你就通过该函数将数据传递给父级。

我已经阅读了有关集团模式的内容,但我不确定这是否是我所需要的。我只想要一个单例样式对象,当有新输入时,主小部件及其子部件都可以读取并更新子部件。

有人能解释一下 bloc 模式是否会帮助我解决这个问题,或者是否有另一种设计模式可以帮助我解决这个问题。

** 编辑

谢谢你们的好答案。我的新问题与提供者模式/库有关。

我创建了一些状态类如下(我替换了内容以尝试保持简单)

class State1 with ChangeNotifier{

String _s;

  set s(String newS){
    _s = newS;
    notifyListeners();
  }

}

Run Code Online (Sandbox Code Playgroud)

然后我使用 multiprovider 来传递它(在 init 中创建对象)

child: MultiProvider(
        providers: [
          ChangeNotifierProvider(builder: (context) => state1),
        ],
        child: Stack(
        alignment: Alignment.center,
        children: stackChildren,
      ),
Run Code Online (Sandbox Code Playgroud)

然后使用子项widegets构建方法访问

 state1Var = Provider.of<State1>(context);

Run Code Online (Sandbox Code Playgroud)

所有这些都很好用..

我的问题是当我开始使用导航推送时,我无法再访问状态。

onPressed: (() {
          Navigator.push(
            contextField,
            MaterialPageRoute(builder: (context) => NewPage()),
          );
        }),
Run Code Online (Sandbox Code Playgroud)

当我收到此错误时

Could not find the correct Provider<State1> above this NewPage Widget...
Run Code Online (Sandbox Code Playgroud)

我确实设法使用它获得了它

  Navigator.push(
            context, …
Run Code Online (Sandbox Code Playgroud)

design-patterns flutter bloc

14
推荐指数
1
解决办法
1万
查看次数

如何在 Angular 中初始化 Firebase App Check

我想知道如何使用 Angular 初始化 firebase 应用程序检查。

我正在使用 Angular Fire,但我不确定如何在使用任何服务之前初始化 Firebase 应用程序检查

文档有这个

在访问任何 Firebase 服务之前,将以下初始化代码添加到您的应用程序。

firebase.initializeApp({
  // Your firebase configuration object
});

const appCheck = firebase.appCheck();
// Pass your reCAPTCHA v3 site key (public key) to activate(). Make sure this
// key is the counterpart to the secret key you set in the Firebase console.
appCheck.activate('abcdefghijklmnopqrstuvwxy-1234567890abcd');
Run Code Online (Sandbox Code Playgroud)

但这如何在应用程序模块中完成。目前我像这样导入角火

@NgModule({
  declarations: [
   ...
  ],
  imports: [
    AngularFireModule.initializeApp(environment.firebaseConfig),
  ],
]

Run Code Online (Sandbox Code Playgroud)

更新:

我知道这可能还不是 Angular Fire 库的一部分,因为 firebase app-check 是多么新,但我注意到有一个本机 firebase 库 https://www.npmjs.com/package/@firebase/app-check

我很高兴使用它(例如,以某种方式覆盖本机 firebase js …

firebase typescript angular firebase-app-check

5
推荐指数
1
解决办法
4330
查看次数

在处理 flutter 之前删除 listerer

如果我在 initState() 中初始化一个观察者,例如

textController.addListener(textTypedListener);
Run Code Online (Sandbox Code Playgroud)

在处理文本控制器之前,我是否需要手动删除侦听器?或者 dispose 会自动处理这个问题。

例如。选项 1

 @override
  void dispose() {
    textController.removeListener(textTypedListener);
    textController.dispose();
    super.dispose();
  }
Run Code Online (Sandbox Code Playgroud)

选项 2

 @override
  void dispose() {
    textController.dispose();
    super.dispose();
  }
Run Code Online (Sandbox Code Playgroud)

哪个最好?

非常感谢。

flutter

4
推荐指数
1
解决办法
1344
查看次数

具有最大行的颤振多行

我正在使用具有以下属性的文本字段:

 TextField(
    controller: textController,    
    keyboardType: TextInputType.multiline,
    maxLines: 4,
    maxLength: 150,
 ),
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但我想知道如何防止用户输入中断行,这会导致文本字段的行数超过 maxLines (4)..

有没有办法将线路锁定在 4?例如

输入 1 \n \n \n 应该工作

但 1 \n \n \n \n \n \n 不应该被允许

flutter

1
推荐指数
1
解决办法
1876
查看次数