#flutter #dart #datatable
Вопрос:
У меня есть три списка, и я должен сгенерировать таблицу
Эти Списки Из Пользовательского Ввода
px =[0.1,0.2,0.3,........]; x= [0,1,2,........];
И этот 3-й список является Умножением 1-го на 2-й список
Mutiply=[0,0.2,0.6,......];
Я хочу сгенерировать таблицу
Длина списка зависит от ввода пользователем, поэтому (как я могу сгенерировать таблицу)
Ответ №1:
Простой подход будет заключаться в создании класса модели для функции, например
class F { final double x; final double px; final double multiply; F({ required this.x, required this.px, }) : multiply = x * px; }
На уровне штата будет a Listlt;Fgt; data
, и он будет увеличиваться при вводе пользователем.
Для динамического увеличения потока данных мы можем сопоставить его и передать дальше rows:
data .map( (f) =gt; DataRow( cells: [ DataCell(Text(f.x.toString())), DataCell(Text(f.px.toString())), DataCell(Text( f.multiply.toStringAsFixed(3), )), ], ), ) .toList()
Полный Виджет
class UserManager extends StatefulWidget { const UserManager({Key? key}) : super(key: key); @override _UserManagerState createState() =gt; _UserManagerState(); } class _UserManagerState extends Statelt;UserManagergt; { Listlt;Fgt; data = []; final xController = TextEditingController(); final pxController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ TextField( controller: xController, decoration: const InputDecoration(hintText: "x"), ), TextField( controller: pxController, decoration: const InputDecoration(hintText: "px"), ), ElevatedButton( onPressed: () { // get Text and parse to double final xVal = xController.text.toString(); final pxVal = pxController.text.toString(); double? x = double.tryParse(xVal); double? px = double.tryParse(pxVal); if (x == null || px == null) { /// allow only number return; } // else add to data list setState(() { data.add(F(x: x, px: px)); }); /// clear xController.clear(); pxController.clear(); }, child: Text("ADD")), DataTable( headingRowColor: MaterialStateProperty.all(Colors.blueGrey.withOpacity(.5)), showBottomBorder: true, columns: const [ DataColumn( label: Text("x"), ), DataColumn( label: Text("p(x)"), ), DataColumn( label: Text("x*p(x)"), ), ], rows: data .map( (f) =gt; DataRow( cells: [ DataCell(Text(f.x.toString())), DataCell(Text(f.px.toString())), DataCell(Text( f.multiply.toStringAsFixed(3), )), ], ), ) .toList()), ], ), ); } }