nestads_dev 1.0.0 copy "nestads_dev: ^1.0.0" to clipboard
nestads_dev: ^1.0.0 copied to clipboard

A Flutter project built as a data tracker SDK for tracking and managing data in real-time.

example/lib/main.dart

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:nestads_dev/nestads_dev.dart';
import 'package:visibility_detector/visibility_detector.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 초기화
  await NestAds.instance.initialize(
    userId: '6fbfb26a-fdff-40ff-9722-269def2e72ad',
    deviceId: 'ac867803-50b1-4048-b9bb-decc946af768',
  );
  // 사이즈, 시간
  NestAds.instance.setTrackingLogOptions(size: 10, duration: 5);
  runApp(SampleApp());
}

class SampleApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('NestAds')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => AdsPage()),
            );
          },
          child: Text('이벤트 페이지로 이동'),
        ),
      ),
    );
  }
}

class AdsPage extends StatelessWidget {
  final List<Map<String, dynamic>> events = List.generate(
    100,
    (index) {
      return {
        'request_id': index.toString(),
        'event_id': index.toString(),
        'placement_id': index.toString(),
        'model_version': ''
      };
    },
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('이벤트 페이지')),
      body: GridView.builder(
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2, // 2개씩 나란히 배치
          childAspectRatio: 1.0, // 정사각형 비율
          mainAxisSpacing: 50.0, // 세로 간격
        ),
        itemCount: events.length, // 이벤트 개수
        itemBuilder: (context, index) {
          final event = events[index];
          return VisibilityDetector(
            key: Key('ad-${event['event_id']}'),
            onVisibilityChanged: (visibilityInfo) {
              if (visibilityInfo.visibleFraction >= 0.5) {
                NestAds.instance.sendTrackingLog(
                    type: 'VIEW',
                    requestId: event['request_id'],
                    eventId: event['event_id'],
                    placementId: event['placement_id'],
                    modelVersion: event['model_version']);
              }
            },
            child: GestureDetector(
              onTap: () {
                // 이벤트 클릭 시 ENTER 트래킹
                NestAds.instance.sendTrackingLog(
                    type: 'ENTER',
                    requestId: event['request_id'],
                    eventId: event['event_id'],
                    modelVersion: event['model_version']);

                Navigator.push(
                  context,
                  MaterialPageRoute(
                      builder: (context) => AdDetailPage(event: event)),
                );
              },
              child: Container(
                margin: EdgeInsets.all(8.0),
                color: Colors.blueAccent,
                child: Center(
                  child: Text(
                    '이벤트 \n${event['event_id']}',
                    style: TextStyle(color: Colors.white, fontSize: 20),
                  ),
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

class AdDetailPage extends StatelessWidget {
  final Map<String, dynamic> event;

  AdDetailPage({required this.event});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('이벤트 상세 페이지')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              '이벤트 ${event['event_id']} \n\n상세 정보\n모델 버전: ${event['model_version']}',
              style: TextStyle(fontSize: 24),
              textAlign: TextAlign.center,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // INPROGRESS 트래킹
                NestAds.instance.sendTrackingLog(
                    type: 'INPROGRESS',
                    requestId: event['request_id'],
                    eventId: event['event_id'],
                    modelVersion: event['model_version']);
              },
              child: Text('INPROGRESS 참여 트래킹'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // COMPLETE 트래킹
                NestAds.instance.sendTrackingLog(
                    type: 'COMPLETE',
                    requestId: event['request_id'],
                    eventId: event['event_id'],
                    modelVersion: event['model_version']);
              },
              child: Text('COMPLETE 보상 트래킹'),
            ),
          ],
        ),
      ),
    );
  }
}
2
likes
0
points
59
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter project built as a data tracker SDK for tracking and managing data in real-time.

Homepage

License

unknown (license)

Dependencies

archive, convert, crypto, encrypt, flutter, http, package_info_plus, timezone

More

Packages that depend on nestads_dev