Menus

Monday, 28 October 2024

Flutter using Add Two Numbers | Flutter Tutorials

Add Two Numbers using Flutter

In this presentation, we'll explore how to build a simple Flutter app that can add two numbers together. We'll cover the basics of the Dart programming language, Flutter's widget system, and the steps to create a functional user interface and add the necessary logic.


main.dart:


import 'package:add_two_numbers/addtwonumbers.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
       
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const AddTwoNumbers(),
    );
  }
}


addtwonumbers.dart:


import 'package:flutter/material.dart';

class AddTwoNumbers extends StatefulWidget {
  const AddTwoNumbers({super.key});

  @override
  State<AddTwoNumbers> createState() => _AddTwoNumbersState();
}

class _AddTwoNumbersState extends State<AddTwoNumbers> {

  final TextEditingController _num1Controller = TextEditingController();
  final TextEditingController _num2Controller = TextEditingController();
  final TextEditingController _resultController = TextEditingController();

  void _addNumbers(){
    setState(() {
     
      double num1 = double.tryParse(_num1Controller.text)?? 0;
      double num2 = double.tryParse(_num2Controller.text)?? 0;

      double result = num1 + num2;

      _resultController.text = result.toString();
 
    });
  }



  @override
  Widget build(BuildContext context) {
    return Scaffold(

      appBar: AppBar(
        title: Text("LogicLab Academy"),
        centerTitle: true,
        backgroundColor: Colors.red,
      ),

      body: SafeArea(child: Container(
        padding:EdgeInsets.symmetric(horizontal: 15, vertical: 20),
        child: Column(
          children: [

            Text("Add Two Numbers",style: TextStyle(fontSize: 30,color: Colors.blue),),

            SizedBox(height: 15,),

            TextField(
              controller: _num1Controller,
              decoration: InputDecoration(
                labelText: "First Number",
                labelStyle: TextStyle(fontSize: 15,color: Colors.grey.shade400),
                border: OutlineInputBorder(borderRadius: BorderRadius.circular(10))
              ),
            ),

            SizedBox(height: 15,),

            TextField(
              controller: _num2Controller,
              decoration: InputDecoration(
                labelText: "Second Number",
                labelStyle: TextStyle(fontSize: 15,color: Colors.grey.shade400),
                border: OutlineInputBorder(borderRadius: BorderRadius.circular(10))
              ),
            ),

            SizedBox(height: 15,),


            ElevatedButton(
             
              style: ButtonStyle(
                padding: WidgetStatePropertyAll(EdgeInsets.only(
                  left: 150,
                  right: 150,
                  top: 10,
                  bottom: 10,

                )),
                backgroundColor: WidgetStatePropertyAll(Colors.red),
                foregroundColor: WidgetStatePropertyAll(Colors.white),
                textStyle: WidgetStatePropertyAll(TextStyle(fontSize: 20 ))
              ),

              onPressed: _addNumbers,
              child: Text("ADD")
              ),

              SizedBox(height: 15,),

            TextField(
              controller: _resultController,
              decoration: InputDecoration(
                labelText: "Result",
                labelStyle: TextStyle(fontSize: 15,color: Colors.grey.shade400),
                border: OutlineInputBorder(borderRadius: BorderRadius.circular(10))
              ),
            ),

          ],
        ),
      )),

    );
  }
}


Thursday, 1 February 2024

How to get relation value in index in yii2 and Filter


How to get relation value in index in yii2


Certainly! When using Yii2, the convention is to create a separate search model for handling search and filtering logic. Here's a basic example of a PostSearch model with filtering capabilities for the author.name attribute:

Assuming you have a Post model with a hasOne relation to Author:

  1. Create a PostSearch model:

// models/PostSearch.php

namespace app\models;

use yii\base\Model;

use yii\data\ActiveDataProvider;

class PostSearch extends Post

{

    public $authorName;

    public function rules()

    {

        return [

            [['id', 'author_id'], 'integer'],

            [['title', 'content', 'authorName'], 'safe'],

        ];

    }


    public function search($params)

    {

        $query = Post::find()->joinWith('author');

        $dataProvider = new ActiveDataProvider([

            'query' => $query,

            'sort' => [

                'attributes' => [

                    'id',

                    'title',

                    'content',

                    'authorName' => [

                        'asc' => ['author.name' => SORT_ASC],

                        'desc' => ['author.name' => SORT_DESC],

                    ],

                ],

            ],

        ]);

        $dataProvider->sort->attributes['authorName'] = [

            'asc' => ['author.name' => SORT_ASC],

            'desc' => ['author.name' => SORT_DESC],

        ];

        $this->load($params);

        if (!$this->validate()) {

            return $dataProvider;

        }

        $query->andFilterWhere(['like', 'author.name', $this->authorName]);

        // Your other filtering logic goes here


        return $dataProvider;

    }

}


In your views/post/index.php, you can now use the GridView widget with the search model:

// views/post/index.php

use yii\grid\GridView;

// Other view code

<?= GridView::widget([

    'dataProvider' => $dataProvider,

    'filterModel' => $searchModel,

    'columns' => [

        // Your other columns


        [

            'attribute'=>'authorName'

            'value'=> 'author.name',

            'label' => 'Author Name',

        ],

        // Other columns

    ],

]); ?>


  1. In your Post model, ensure you have defined the relation to Author:
// models/Post.php

namespace app\models;

use yii\db\ActiveRecord;

class Post extends ActiveRecord
{
    // Your other attributes and methods here

    // Define the relation to Author

    public function getAuthor()
    {
        return $this->hasOne(Author::class, ['id' => 'author_id']);
    }

}


In your PostController, use the PostSearch model in the actionIndex method:

// controllers/PostController.php

namespace app\controllers;

use Yii;

use yii\web\Controller;

use app\models\PostSearch;

class PostController extends Controller

{

    public function actionIndex()

    {

        $searchModel = new PostSearch();

        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);


        return $this->render('index', [

            'searchModel' => $searchModel,

            'dataProvider' => $dataProvider,

        ]);

    }

}