Advertisement
pedrolemoz

CPF Gen Flutter

May 31st, 2020
1,150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 3.92 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'dart:math' show Random;
  3.  
  4. void main() {
  5.   runApp(CPFGen());
  6. }
  7.  
  8. class CPFGen extends StatelessWidget {
  9.   @override
  10.   Widget build(BuildContext context) {
  11.     return MaterialApp(
  12.       debugShowCheckedModeBanner: false,
  13.       home: Scaffold(
  14.         appBar: AppBar(
  15.           title: Text(
  16.             'Gerador de CPF',
  17.           ),
  18.         ),
  19.         body: GeneratorScreen(),
  20.       ),
  21.     );
  22.   }
  23. }
  24.  
  25. class GeneratorScreen extends StatelessWidget {
  26.   final TextEditingController _textEditingController = TextEditingController();
  27.   @override
  28.   Widget build(BuildContext context) {
  29.     return Center(
  30.       child: IntrinsicWidth(
  31.         child: Column(
  32.           mainAxisAlignment: MainAxisAlignment.center,
  33.           crossAxisAlignment: CrossAxisAlignment.stretch,
  34.           children: <Widget>[
  35.             TextField(
  36.               enableInteractiveSelection: true,
  37.               textAlign: TextAlign.center,
  38.               showCursor: false,
  39.               maxLines: 1,
  40.               controller: _textEditingController,
  41.               cursorColor: Theme.of(context).primaryColor,
  42.               style: Theme.of(context).textTheme.subtitle1,
  43.               decoration: InputDecoration(
  44.                 contentPadding: EdgeInsets.symmetric(horizontal: 10),
  45.                 filled: false,
  46.                 hintMaxLines: 1,
  47.                 hintText: 'Quantos CPFs?',
  48.                 hintStyle: Theme.of(context).textTheme.subtitle1,
  49.                 border: OutlineInputBorder(
  50.                   borderRadius: BorderRadius.all(Radius.circular(5.0)),
  51.                 ),
  52.               ),
  53.               onChanged: (input) {
  54.                 print(_textEditingController.text);
  55.               },
  56.             ),
  57.             RaisedButton(
  58.               child: Text(
  59.                 'Gerar',
  60.                 style: TextStyle(fontSize: 14),
  61.               ),
  62.               onPressed: () {
  63.                 GeneratorAlgorithm generator = GeneratorAlgorithm();
  64.  
  65.                 List<String> cpfs = List<String>.generate(
  66.                     int.parse(_textEditingController.text), (_) {
  67.                   return generator.generateCPF();
  68.                 });
  69.                 _textEditingController.clear();
  70.                 Navigator.push(
  71.                   context,
  72.                   MaterialPageRoute(
  73.                     builder: (context) {
  74.                       return Scaffold(
  75.                         appBar: AppBar(title: Text('Resultados')),
  76.                         body: ListView.builder(
  77.                           itemCount: cpfs.length,
  78.                           itemBuilder: (context, index) {
  79.                             return ListTile(title: Text(cpfs[index]));
  80.                           },
  81.                         ),
  82.                       );
  83.                     },
  84.                   ),
  85.                 );
  86.               },
  87.             ),
  88.           ],
  89.         ),
  90.       ),
  91.     );
  92.   }
  93. }
  94.  
  95. class GeneratorAlgorithm {
  96.   String generateCPF() {
  97.     final Random random = Random();
  98.     List<int> buildCPF =
  99.         List<int>.generate(9, (_) => random.nextInt(9), growable: true);
  100.  
  101.     for (int i = 0; i < 2; i++) {
  102.       buildCPF.add(digit(buildCPF));
  103.     }
  104.  
  105.     return buildString(buildCPF);
  106.   }
  107.  
  108.   int digit(List<int> buildCPF) {
  109.     int sum = 0;
  110.     int index = buildCPF.length + 1;
  111.  
  112.     for (int i in buildCPF) {
  113.       sum += i * index;
  114.       index -= 1;
  115.     }
  116.  
  117.     return verifySum(sum);
  118.   }
  119.  
  120.   int verifySum(int sum) {
  121.     return ((sum % 11) < 2) ? 0 : 11 - (sum % 11);
  122.   }
  123.  
  124.   String buildString(List<int> buildCPF) {
  125.     List<String> getNumbers = [];
  126.     String formattedCPF = "";
  127.  
  128.     for (int i in buildCPF) {
  129.       getNumbers.add(i.toString());
  130.     }
  131.  
  132.     getNumbers.insert(3, ".");
  133.     getNumbers.insert(7, ".");
  134.     getNumbers.insert(11, "-");
  135.  
  136.     for (String i in getNumbers) {
  137.       formattedCPF += i;
  138.     }
  139.  
  140.     return formattedCPF;
  141.   }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement