Created
January 11, 2022 11:58
-
-
Save osaxma/2a759f8c9edf400601c54d2850e1fbd0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
void main() { | |
runApp(const MyApp()); | |
} | |
class MyApp extends StatelessWidget { | |
const MyApp({Key? key}) : super(key: key); | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
title: 'Flutter Demo', | |
theme: ThemeData( | |
primarySwatch: Colors.blue, | |
), | |
home: Scaffold( | |
appBar: AppBar( | |
title: const Text('Flutter Demo Home Page'), | |
), | |
body: const MyHomePage(), | |
), | |
); | |
} | |
} | |
class MyHomePage extends StatefulWidget { | |
const MyHomePage({Key? key}) : super(key: key); | |
@override | |
State<MyHomePage> createState() => _MyHomePageState(); | |
} | |
class _MyHomePageState extends State<MyHomePage> { | |
@override | |
Widget build(BuildContext context) { | |
return Center( | |
child: Column( | |
mainAxisAlignment: MainAxisAlignment.center, | |
children: const <Widget>[ | |
MatrixOption(matrix: Matrix(1, 1)), | |
MatrixOption(matrix: Matrix(2, 2)), | |
MatrixOption(matrix: Matrix(3, 3)), | |
], | |
), | |
); | |
} | |
} | |
class Matrix { | |
final int rows; | |
final int columns; | |
const Matrix(this.rows, this.columns); | |
} | |
class MatrixOption extends StatelessWidget { | |
final Matrix matrix; | |
const MatrixOption({ | |
Key? key, | |
required this.matrix, | |
}) : super(key: key); | |
@override | |
Widget build(BuildContext context) { | |
return InkWell( | |
onTap: () { | |
Navigator.of(context).push( | |
MaterialPageRoute( | |
builder: (context) { | |
return Scaffold( | |
appBar: AppBar(), | |
body: MatrixPage(matrix: matrix), | |
); | |
}, | |
), | |
); | |
}, | |
child: Container( | |
height: 50, | |
width: 100, | |
margin: const EdgeInsets.all(8), | |
color: Colors.orange, | |
child: Center(child: Text('${matrix.rows}' 'x' '${matrix.columns} Matrix ')), | |
), | |
); | |
} | |
} | |
class MatrixPage extends StatefulWidget { | |
final Matrix matrix; | |
const MatrixPage({ | |
Key? key, | |
required this.matrix, | |
}) : super(key: key); | |
@override | |
State<MatrixPage> createState() => _MatrixPageState(); | |
} | |
class _MatrixPageState extends State<MatrixPage> { | |
// List of lists (outer list is the rows, inner list is the columns) | |
final controllers = <List<TextEditingController>>[]; | |
late final rows = widget.matrix.rows; | |
late final columns = widget.matrix.columns; | |
@override | |
void initState() { | |
super.initState(); | |
createControllers(); | |
} | |
void createControllers() { | |
for (var i = 0; i < rows; i++) { | |
controllers.add(List.generate(columns, (index) => TextEditingController(text: '0'))); | |
} | |
} | |
void printMatrix() { | |
final strings = <List<String>>[]; | |
for (var controllerRow in controllers) { | |
final row = controllerRow.map((e) => e.text).toList(); | |
strings.add(row); | |
} | |
print(strings); | |
} | |
@override | |
void dispose() { | |
for (var controllerRow in controllers) { | |
for (final c in controllerRow) { | |
c.dispose(); | |
} | |
} | |
super.dispose(); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Center( | |
child: Column( | |
children: [ | |
Column( | |
mainAxisAlignment: MainAxisAlignment.center, | |
children: List.generate( | |
controllers.length, | |
(index1) => Row( | |
mainAxisAlignment: MainAxisAlignment.center, | |
children: List.generate( | |
controllers[index1].length, | |
(index2) => Center( | |
child: MatrixField( | |
controller: controllers[index1][index2], | |
), | |
), | |
), | |
), | |
), | |
), | |
TextButton( | |
onPressed: printMatrix, | |
child: const Text('Print Matrix'), | |
) | |
], | |
), | |
); | |
} | |
} | |
class MatrixField extends StatelessWidget { | |
final TextEditingController controller; | |
const MatrixField({ | |
Key? key, | |
required this.controller, | |
}) : super(key: key); | |
@override | |
Widget build(BuildContext context) { | |
return SizedBox( | |
height: 50, | |
width: 50, | |
child: TextField( | |
controller: controller, | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment