xandr 0.2.3+13 copy "xandr: ^0.2.3+13" to clipboard
xandr: ^0.2.3+13 copied to clipboard

flutter plugin for the Xandr, with integrations for Android and iOS

example/lib/main.dart

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:xandr/ad_banner.dart';
import 'package:xandr/ad_size.dart';
import 'package:xandr/load_mode.dart';
import 'package:xandr/xandr.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const XandrExample(),
    );
  }
}

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

  @override
  State<XandrExample> createState() => _XandrExampleState();
}

class _XandrExampleState extends State<XandrExample> {
  late final XandrController _controller;
  final ScrollController _scrollController = ScrollController();
  final StreamController<ScrollPosition> _checkIfAdIsInViewport =
      StreamController.broadcast();

  @override
  void dispose() {
    _scrollController.dispose();
    _checkIfAdIsInViewport.close();
    super.dispose();
  }

  @override
  void initState() {
    super.initState();

    _controller = XandrController()..init(9517);
    _scrollController.addListener(() {
      _checkIfAdIsInViewport.add(_scrollController.position);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('xandr sample - banner'),
      ),
      body: Center(
        child: SingleChildScrollView(
          controller: _scrollController,
          child: Column(
            children: [
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to m'),
              const Padding(
                padding: EdgeInsets.symmetric(vertical: 8),
                child: Align(
                  alignment: Alignment.topLeft,
                  child: Text(
                    'fit to container:',
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
              AdBanner(
                controller: _controller,
                //placementID: '17058950',
                inventoryCode: 'bunte_webdesktop_home_homepage_hor_1',
                adSizes: const [AdSize(728, 90)], //[AdSize(300, 250)],
                customKeywords: const {
                  'kw': ['test-kw', 'demoads'],
                },
                //resizeAdToFitContainer: false,
                //enableLazyLoad: true,
              ),
              //FIXME: not working
              //const Text(
              //  'Lorem Ipsum is simply dummy text of the printing and '
              //  'typesetting industry. Lorem Ipsum has been the boo '
              //  'standard dummy text ever since the 1500s, when an aha '
              //  'printer took a galley of type and scrambled it to n'),
              //const Padding(
              //  padding: EdgeInsets.symmetric(vertical: 8),
              //  child: Align(
              //    alignment: Alignment.topLeft,
              //    child: Text(
              //      'crop to reserved space:',
              //      style: TextStyle(
              //        fontWeight: FontWeight.bold,
              //      ),
              //    ),
              //  ),
              //),
              //AdBanner(
              //  controller: _controller,
              //  //placementID: '17058950',
              //  inventoryCode: 'bunte_webdesktop_home_homepage_hor_1',
              //  adSizes: const [
              //    AdSize(1, 1),
              //    AdSize(728, 90),
              //  ], //[AdSize(300, 250)],
              //  width: 90,
              //  height: 90,
              //  //customKeywords: useDemoAds,
              //  resizeWhenLoaded: true,
              //),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to v'),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to v'),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to v'),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to v'),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to v'),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to v'),
              const Padding(
                padding: EdgeInsets.symmetric(vertical: 8),
                child: Align(
                  alignment: Alignment.topLeft,
                  child: Text(
                    'use winning ad size:',
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
              AdBanner(
                controller: _controller,
                //placementID: '17058950',
                inventoryCode: 'bunte_webdesktop_home_homepage_hor_1',
                adSizes: const [
                  AdSize(1, 1),
                  AdSize(728, 90),
                ], //[AdSize(300, 250)],
                width: 90,
                height: 90,
                loadsInBackground: true,
                //customKeywords: useDemoAds,
              ),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to g'),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to g'),
              const Padding(
                padding: EdgeInsets.symmetric(vertical: 8),
                child: Align(
                  alignment: Alignment.topLeft,
                  child: Text(
                    'load when in viewport:',
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
              AdBanner(
                controller: _controller,
                //placementID: '17058950',
                inventoryCode: 'bunte_webdesktop_home_homepage_hor_1',
                adSizes: const [
                  AdSize(728, 90),
                  AdSize(1, 1),
                ],
                //customKeywords: useDemoAds,
                resizeAdToFitContainer: true,
                loadMode: LoadMode.whenInViewport(
                  _checkIfAdIsInViewport.stream,
                ),
              ),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to g'),
              const Text('Lorem Ipsum is simply dummy text of the printing and '
                  'typesetting industry. Lorem Ipsum has been the boo '
                  'standard dummy text ever since the 1500s, when an aha '
                  'printer took a galley of type and scrambled it to g'),
            ],
          ),
        ),
      ),
    );
  }
}
1
likes
0
pub points
63%
popularity

Publisher

verified publisherthekorn.dev

flutter plugin for the Xandr, with integrations for Android and iOS

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, xandr_android, xandr_ios, xandr_platform_interface

More

Packages that depend on xandr