相关疑难解决方法(0)

将数据传递给StatefulWidget并在Flutter中以其状态访问它

我的Flutter应用程序中有2个屏幕:记录列表和用于创建和编辑记录的屏幕.

如果我将对象传递给第二个屏幕,这意味着我将编辑它,如果我传递null,则意味着我正在创建新项目.编辑屏幕是有状态的小部件,我不知道如何使用这种方法https://flutter.io/cookbook/navigation/passing-data/为我的情况.

class RecordPage extends StatefulWidget {
  final Record recordObject;

  RecordPage({Key key, @required this.recordObject}) : super(key: key);

  @override
  _RecordPageState createState() => new _RecordPageState();
}

class _RecordPageState extends State<RecordPage> {
  @override
  Widget build(BuildContext context) {
   //.....
  }
}
Run Code Online (Sandbox Code Playgroud)

如何访问recordObject里面_RecordPageState

dart flutter

58
推荐指数
6
解决办法
3万
查看次数

在initState中调用SetState的重要性

setState()方法应该被称为的内部initState()方法StatefullWidget吗?

我的理解是该initState()方法将自动应用状态。

下面的代码不起作用。post对象的值为空。

  @override
  void initState() {
    ItemService.getItemById(widget.postId).then((DocumentSnapshot doc){
        post = ItemService.getPostFromDocument(doc);
    });
  }
Run Code Online (Sandbox Code Playgroud)

但是下面的作品。

  @override
  void initState() {
    ItemService.getItemById(widget.postId).then((DocumentSnapshot doc){
      setState((){
        post = ItemService.getPostFromDocument(doc);
      });
    });
  }
Run Code Online (Sandbox Code Playgroud)

在其他一些情况下,即使不使用setState()同一类也可以正常工作。

因此,什么时候应该使用setState()内部initState()方法,什么时候不应该使用?

另一个相关问题:

super.initState()initState()什么时候应该打电话给我?我不打扰没关系吗?

flutter

6
推荐指数
2
解决办法
1722
查看次数

不使用构造函数将StatefulWidget数据传递给State类

我设法通过如下构造函数将有状态类变量的值传递给State类:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Demo',
        home: MyHomePage('John', 'Morison'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage(this.fname, this.lname);

  final String fname;
  final String lname;

  @override
  _MyHomePageState createState() => _MyHomePageState(fname, lname);
}

class _MyHomePageState extends State<MyHomePage> {
  _MyHomePageState(this.fname, this.lname);

  final String fname;
  final String lname;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('Hello $fname $lname'),
      )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

太奇怪了,因为有两个以上的变量,所以我不得不做很多工作。有没有更好的办法?

dart flutter

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

从列表中删除项目后更新UI

如果我删除或添加项目,我想更新我的ListView。现在,我只想删除项目,并立即看到项目的删除。

我的应用程序更复杂,因此我写了一个小示例项目来展示我的问题。

TestItem类包含一些数据项:

class TestItem {
  static int id = 1;
  bool isFinished = false;
  String text;
  TestItem() {
    text = "Item ${id++}";
  }
}
Run Code Online (Sandbox Code Playgroud)

ItemInfoViewWidget是对的UI表示TestItem,如果它完成(当该复选框被更改为true)中删除的项目。

class ItemInfoViewWidget extends StatefulWidget {
  TestItem item;
  List<TestItem> items;

  ItemInfoViewWidget(this.items, this.item);

  @override
  _ItemInfoViewWidgetState createState() =>
      _ItemInfoViewWidgetState(this.items, this.item);
}

class _ItemInfoViewWidgetState extends State<ItemInfoViewWidget> {
  TestItem item;
  List<TestItem> items;

  _ItemInfoViewWidgetState(this.items, this.item);

  @override
  Widget build(BuildContext context) {
    return new Card(
      child: new Column(
        children: <Widget>[
          new Text(this.item.text),
          new Checkbox(
              value: this.item.isFinished, …
Run Code Online (Sandbox Code Playgroud)

dart flutter

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

Flutter:如何将变量从 StatelessWidget 传递到 StatefulWidget

问题是我无法将我自己的类 ForceSelection 值从另一个屏幕传递到另一个屏幕的 StatefulWidget。它在 StatelessWidget 中运行良好。我试图从这个颤振教程中学习:https : //flutter.dev/docs/cookbook/navigation/passing-data#4-navigate-and-pass-data-to-the-detail-screen

我在 levelSelection.dart 中有这种类

class ForceSelection {
  final String forceSelection;
  final String langSelection;

  ForceSelection(this.forceSelection, this.langSelection);
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试将值传递给下一个文件 PlayQuiz.dart

Game(forceSelection: ForceSelection('maa', 'fin'))
Run Code Online (Sandbox Code Playgroud)

game.dart 看起来像这样:

class Game extends StatelessWidget {
  final ForceSelection forceSelection;

  Game({Key key, @required this.forceSelection}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: forceSelection.langSelection, // TODO should work and change later
      theme: new ThemeData(
        primaryColor: Colors.white,
      ),
      home: PlayQuiz(),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我想将 ForceSelection 值传递给 PlayQuiz()

class PlayQuizState extends …
Run Code Online (Sandbox Code Playgroud)

android dart flutter

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

标签 统计

flutter ×5

dart ×4

android ×1