注意盐和酵母不能同时放。

1斤面粉,2克白糖,3可酵母,搅拌均匀,分次加入320克温水,边加边搅拌,然后不停的按,不停的叠,一直到把水按进面里去,不沾手,
做到盆光,手光,最后表面拍点油,保鲜膜封闭,醒面20分钟

和面:加入盐,50度左右热水,边倒入边搅拌,搅拌成絮状,不用下手揉,醒30分钟。
然后加入点油,用手揉成面团,再次醒20分钟

韭菜切碎,加入油锁水,炒蛋碎,煮粉丝,加入韭菜,盐,鸡精,胡椒粉,五香粉,

面赶成椭圆状,一半放馅,用勺子整理平,另一半包过去,压好边。

两面煎熟后放在厨房纸上,盖上盖子保温,

杏鲍菇手撕细条,葱花,蒜末

冷水下锅焯水,加点食盐增味
开水1分钟左右,捞出清水冲凉后淋干,尽量把水分挤出
起油锅,倒入杏鲍菇,不停煸炒,去掉水分,直至表面微微发黄
倒入葱花,蒜末,生抽,蚝油,翻炒,放入芝麻,孜然粉,葱叶花,炒香后出盘
这里不放食盐,因为生抽,蚝油都有了

大内存优化

# 查看状态
get-mmagent
# 关闭内存压缩
disable-mmagent -mc
# 启用内存压缩
enable-mmagent -mc

小米辣,肉末
准备料汁:生抽,陈醋,蚝油,白糖,盐,清水,生粉 拌匀

起油锅,放入肉末,炒熟,放入小米辣,葱姜蒜,炒出香味,放入茄子,翻炒几下,然后放入料汁,撒上葱花翻炒几下出锅。

常用代码

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

import 'models/model_custom_screen.dart';

class PageCostum extends StatefulWidget {
const PageCostum({Key? key}) : super(key: key);

@override
State<PageCostum> createState() => _PageCostumState();
}


class _PageCostumState extends State<PageCostum> {
List<ModelCustomScreenStatistics> listCustomScreenStats = <ModelCustomScreenStatistics>[];

List<DataColumn> _createColumns() {
return [
const DataColumn2(
label: Text('日期'),
size: ColumnSize.L,
),
const DataColumn(
label: Text('数量'),
),
const DataColumn(
label: Text('至今'),
numeric: true,
),
const DataColumn(
label: Text('5日'),
),
const DataColumn(
label: Text('10日'),
),
const DataColumn(
label: Text('20日'),
numeric: true,
),
];
}
List<DataRow> _createRows() {
return listCustomScreenStats.map((element) => DataRow(cells: [
DataCell(Text(element.date)),
DataCell(Text(element.count.toString())),
DataCell(Text(element.chg5.toString())),
DataCell(Text(element.chg10.toString())),
DataCell(Text(element.chg20.toString())),
DataCell(Text(element.chgPresent.toString())),
])
).toList();
}

List<DataColumn> _createColumns_contents() {
return [
const DataColumn2(
label: Text('日期'),
size: ColumnSize.L,
),
const DataColumn(
label: Text('数量'),
),
const DataColumn(
label: Text('5日'),
),
const DataColumn(
label: Text('10日'),
),
const DataColumn(
label: Text('20日'),
numeric: true,
),

];
}
List<DataRow> _createRows_contents() {
return List<DataRow>.generate(
100,
(index) => DataRow(cells: [
DataCell(Text('A' * (10 - index % 10))),
DataCell(Text('B' * (10 - (index + 5) % 10))),
DataCell(Text('C' * (15 - (index + 5) % 10))),
DataCell(Text('D' * (15 - (index + 10) % 10))),
DataCell(Text(((index + 0.1) * 25.4).toString()))
]));
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
height: 35,
child: Row(
children: [
ElevatedButton(
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("Button1 clicked"),));
},
child: const Text('Button1')
),
],
),
),
Expanded(
child: Column(
children: [
Expanded(
child: Row(
children: [
Expanded(
flex: 3,
child: DataTable2(
columnSpacing: 12,
horizontalMargin: 12,
minWidth: 300,
columns: _createColumns(),
rows: _createRows(),
),
),
const VerticalDivider(
thickness: 3,
indent:10,
endIndent: 10,
),
Expanded(
flex: 7,
child: DataTable2(
columnSpacing: 12,
horizontalMargin: 12,
minWidth: 600,
columns: _createColumns_contents(),
rows: _createRows_contents()
),
),
],
),
),
],
),
),
],
),
),
);
}
}

unbounded height or width

flutter 在绘制组件时是从上到下,然后在返回,只走一次,不会来回反复多次,
所以需要一次性确认组件的位置和大小

父组件 column 可以有多个孩子,每个孩子提出想要的 大小,然后父组件负责分配
这里 listview 对高度需求是无限的,和父组件本身的大小有冲突,并且占用了其他兄弟组件的大小位置,就会出现 unbounded 错误。
可以使用 flexible 或者 expended, sizebox 来包裹一下。

鸡胸肉切小块,打入一个鸡蛋,生抽,盐,胡椒粉,料酒去腥,抓拌,腌制20分钟,
加入淀粉,均匀包裹,油锅炸到金黄捞出,
起油锅,番茄酱,白糖,白醋,清水,冒大泡时,放入鸡块,翻炒,加入熟芝麻,葱花即可。

数字(number)

分为整数和双精度两种

int a = 10;
double c = 0.1;

字符串(string)

一组 UTF-16 单元序列,用双引号或单引号包裹。

String str = "hi";

String multi-line = '''
使用三个单引号
或者三个双引号
'''

布尔值(boolean)

列表(list)

List<int> arr = [1,2,3];

var ls = new List();

// 指定类型后,不能添加其他类型
var ls = new List<String>();

// 获取索引和值
// Use Map Entries
// Convert the List to a Map, then map the entries containing the key/value pairs. Each key in the map is the index of the original list.
myList.asMap().entries.map((entry) {
int idx = entry.key;
String val = entry.value;

return something;
}

// Generate a Fixed Range List
// If you are looping over many lists that have a fixed length, it may be more efficient to generate a single list once. For example, the we create a ranged list that is the same length as the original, i.e. [0, 1, 2, ..., n]

final List fixedList = Iterable<int>.generate(myList.length).toList();


fixedList.map((idx) {
String val = myList[idx];

return something;
}

// Grab the Index of Unique Values
// You can access the index of a specific value by searching for it with List.indexOf, which returns the index of the first match. This approach is most predictable when all values are unique. A Set can ensure uniqueness throughout the list.

final List uniqueList = Set.from(myList).toList();


uniqueList.map((val) {
String idx = uniqueList.indexOf(val);

return something;
}

集合(set)
映射(map)
符文(rune)
符号(Symbol)

待添加

button

ElevatedButton(
onPressed: () {},
child: const Text('Enabled'),
),