在 flutter 中可重用 类

reusable classes in flutter

我有一个如下所示的页面。这个页面有两个按钮。其中之一是将表格发送到相关地点。在我的情况下给导师。不过,这个暂时不重要。第二个按钮很重要。无论如何,第二个是将表格保存为草稿。所以,我知道我需要在 SQLite 中保存输入的数据。然后当 he/she 想再次编辑表格时,我需要从 SQLite 中提取数据然后填写相关的地方。这是问题。当我点击编辑按钮时。下面的页面将显示之前填写的内容。但是,对于此任务,为编辑按钮再次编写下面的屏幕代码是没有意义的。所以我需要重用下面的页面。我该怎么做?任何的想法。有什么有用的内容吗?请附上link、视频等,没关系。我只是想学习如何去做。我希望我能解释一下情况。如果需要更多信息以了解情况,请随时提出要求。

如果您将页面放在这样的小部件中

class MyPage extends StatelessWidget {
  Widget build(BuildContext context) {
    return Scaffold(
      body: // your page here 
    )
  }
}

您可以在不同的位置打开它。

_onButton1Click(BuildContext context){
  // do something button 1 specific
  final route = MaterialPageRoute(builder: (context) => MyPage());
  Navigator.of(context).push(route);
}

_onButton2Click(BuildContext context){
  // do something button 2 specific
  final route = MaterialPageRoute(builder: (context) => MyPage());
  Navigator.of(context).push(route);
}

有多种方法可以满足您的需求。但基本上,您需要检查是否有保存的数据?如果有保存的数据则显示它,否则显示一个空白页面。简单示例:

class MyPageData {
  String firstField;
  String secondField;
  // ... fields with page info
}

class MyFormPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _MyForPageState();
}

class _MyForPageState extends State<MyFormPage>{
  MyPageData _savedData;
  
  @override
  void initState() {
    super.initState();
    
    _savedData = loadDataFromDb();  
  }
  
  @override
  Widget build(BuildContext context) {
    String myFirstField = "";
    String mySecondField = "";
    // other fields
    
    if (_savedData != null){
      myFirstField = _savedData.firstField;
      mySecondField = _savedData.secondField;
      // other fields
    } 
    
    // render page with fields values above
  }
}

这里MyPageData是您页面上所有数据的模型。所以它更容易使用。此外,此数据将保存到 db 并在将来从 db 恢复。 MyFormPage 是表单页面的有状态小部件。有一个 loadDataFromDb 方法用于加载保存的数据。然后在构建方法中,我们检查是否有保存的数据。如果有数据,我们会为页面上的所有字段填充初始值,并将这些字段用作构建页面的小部件的初始值。因此,如果没有保存数据,那么 _savedData 将是 null,并且所有小部件都将具有空的初始值。