Author: Nafiz

  • Call swift native code from Flutter

    In this tutorial, we are going to call a simple swift method of AppDelegate.swift file from flutter.

    Let’s create a brand new flutter app by running the following command on your terminal

    flutter create ios_native

    Delete everything inside the method _incrementCounter() on your main.dart file and make it an async method.

     Future<void> _incrementCounter() async {
        const MethodChannel _channel =
            const MethodChannel("FlutterFramework/swift_native");
        final result = await _channel.invokeMethod('getSum');
        print("result from iOS native + Swift ${result}");
      }

    Now open your Runner.xcworkspace on Xcode and open AppDelegate.swift

    private func getSum() -> Int {
        return 2 + 2
     }

    Add the following code in the method didFinishLaunchingWithOptions and close the Xcode.

     let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
          let channel = FlutterMethodChannel(name: "FlutterFramework/swift_native",
                                             binaryMessenger: controller.binaryMessenger)
          channel.setMethodCallHandler({
              [weak self]  (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
              // This method is invoked on the UI thread.
              // Handle battery messages.
              guard call.method == "getSum" else {
                  result(FlutterMethodNotImplemented)
                  return
              }
    
              result(self?.getSum())
          })

    Now run the flutter app on the VSCode or Android Studio, if you click the floating button you will swift method returns 2 +2 = 4

    Call native Android code from Flutter

    Spread the love
  • How to change the status bar color in Flutter, Android only

    Changing the status bar color is very easy in Flutter. There are a few ways to do this.

    1. Globally in the main function
    import 'package:flutter/services.dart';
    
    void main() {
    
      SystemChrome.setSystemUIOverlayStyle(
        SystemUiOverlayStyle(
          statusBarColor: Colors.red,
        ),
      );
    
      runApp(
        MyApp()
      );
    }

    2. Globally in the MaterialApp widget in ThemeData

    return MaterialApp(
          title: 'FlutterFramework',
          debugShowCheckedModeBanner: false,
          themeMode: ThemeMode.light,
          theme: ThemeData(
            primaryColor: Colors.red,
            appBarTheme: AppBarTheme(
              systemOverlayStyle: SystemUiOverlayStyle(
                statusBarColor: Colors.red,
              ),
            ),
          ),
    );

    3. AppBar only

    AppBar(
      systemOverlayStyle: SystemUiOverlayStyle(
        statusBarColor: Colors.red,
      ),
    )

    Spread the love